From fbf27560b3eca06504994cca534799f27dd9f561 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Sat, 10 Aug 2024 13:53:49 +0000 Subject: [PATCH 001/147] optimize processNewBlocks --- backend/src/api/mempool-blocks.ts | 92 +++++++++++++++++++++---------- 1 file changed, 62 insertions(+), 30 deletions(-) diff --git a/backend/src/api/mempool-blocks.ts b/backend/src/api/mempool-blocks.ts index 5d9dcf8f4..6e547e653 100644 --- a/backend/src/api/mempool-blocks.ts +++ b/backend/src/api/mempool-blocks.ts @@ -369,7 +369,7 @@ class MempoolBlocks { const lastBlockIndex = blocks.length - 1; let hasBlockStack = blocks.length >= 8; let stackWeight; - let feeStatsCalculator: OnlineFeeStatsCalculator | void; + let feeStatsCalculator: OnlineFeeStatsCalculator | null = null; if (hasBlockStack) { if (blockWeights && blockWeights[7] !== null) { stackWeight = blockWeights[7]; @@ -380,28 +380,36 @@ class MempoolBlocks { feeStatsCalculator = new OnlineFeeStatsCalculator(stackWeight, 0.5, [10, 20, 30, 40, 50, 60, 70, 80, 90]); } + const ancestors: Ancestor[] = []; + const descendants: Ancestor[] = []; + let ancestor: MempoolTransactionExtended for (const cluster of clusters) { for (const memberTxid of cluster) { const mempoolTx = mempool[memberTxid]; if (mempoolTx) { - const ancestors: Ancestor[] = []; - const descendants: Ancestor[] = []; + // ugly micro-optimization to avoid allocating new arrays + ancestors.length = 0; + descendants.length = 0; let matched = false; cluster.forEach(txid => { + ancestor = mempool[txid]; if (txid === memberTxid) { matched = true; } else { - if (!mempool[txid]) { + if (!ancestor) { console.log('txid missing from mempool! ', txid, candidates?.txs[txid]); + return; } const relative = { txid: txid, - fee: mempool[txid].fee, - weight: (mempool[txid].adjustedVsize * 4), + fee: ancestor.fee, + weight: (ancestor.adjustedVsize * 4), }; if (matched) { descendants.push(relative); - mempoolTx.lastBoosted = Math.max(mempoolTx.lastBoosted || 0, mempool[txid].firstSeen || 0); + if (!mempoolTx.lastBoosted || (ancestor.firstSeen && ancestor.firstSeen > mempoolTx.lastBoosted)) { + mempoolTx.lastBoosted = ancestor.firstSeen; + } } else { ancestors.push(relative); } @@ -410,7 +418,20 @@ class MempoolBlocks { if (mempoolTx.ancestors?.length !== ancestors.length || mempoolTx.descendants?.length !== descendants.length) { mempoolTx.cpfpDirty = true; } - Object.assign(mempoolTx, {ancestors, descendants, bestDescendant: null, cpfpChecked: true}); + // ugly micro-optimization to avoid allocating new arrays or objects + if (mempoolTx.ancestors) { + mempoolTx.ancestors.length = 0; + } else { + mempoolTx.ancestors = []; + } + if (mempoolTx.descendants) { + mempoolTx.descendants.length = 0; + } else { + mempoolTx.descendants = []; + } + mempoolTx.ancestors.push(...ancestors); + mempoolTx.descendants.push(...descendants); + mempoolTx.cpfpChecked = true; } } } @@ -420,7 +441,10 @@ class MempoolBlocks { const sizeLimit = (config.MEMPOOL.BLOCK_WEIGHT_UNITS / 4) * 1.2; // update this thread's mempool with the results let mempoolTx: MempoolTransactionExtended; - const mempoolBlocks: MempoolBlockWithTransactions[] = blocks.map((block, blockIndex) => { + let acceleration: Acceleration; + const mempoolBlocks: MempoolBlockWithTransactions[] = []; + for (let blockIndex = 0; blockIndex < blocks.length; blockIndex++) { + const block = blocks[blockIndex]; let totalSize = 0; let totalVsize = 0; let totalWeight = 0; @@ -436,7 +460,8 @@ class MempoolBlocks { } } - for (const txid of block) { + for (let i = 0; i < block.length; i++) { + const txid = block[i]; if (txid) { mempoolTx = mempool[txid]; // save position in projected blocks @@ -445,30 +470,37 @@ class MempoolBlocks { vsize: totalVsize + (mempoolTx.vsize / 2), }; - const acceleration = accelerations[txid]; - if (isAcceleratedBy[txid] || (acceleration && (!accelerationPool || acceleration.pools.includes(accelerationPool)))) { - if (!mempoolTx.acceleration) { - mempoolTx.cpfpDirty = true; - } - mempoolTx.acceleration = true; - mempoolTx.acceleratedBy = isAcceleratedBy[txid] || acceleration?.pools; - mempoolTx.acceleratedAt = acceleration?.added; - mempoolTx.feeDelta = acceleration?.feeDelta; - for (const ancestor of mempoolTx.ancestors || []) { - if (!mempool[ancestor.txid].acceleration) { - mempool[ancestor.txid].cpfpDirty = true; + if (txid in accelerations) { + acceleration = accelerations[txid]; + if (isAcceleratedBy[txid] || (acceleration && (!accelerationPool || acceleration.pools.includes(accelerationPool)))) { + if (!mempoolTx.acceleration) { + mempoolTx.cpfpDirty = true; + } + mempoolTx.acceleration = true; + mempoolTx.acceleratedBy = isAcceleratedBy[txid] || acceleration?.pools; + mempoolTx.acceleratedAt = acceleration?.added; + mempoolTx.feeDelta = acceleration?.feeDelta; + for (const ancestor of mempoolTx.ancestors || []) { + if (!mempool[ancestor.txid].acceleration) { + mempool[ancestor.txid].cpfpDirty = true; + } + mempool[ancestor.txid].acceleration = true; + mempool[ancestor.txid].acceleratedBy = mempoolTx.acceleratedBy; + mempool[ancestor.txid].acceleratedAt = mempoolTx.acceleratedAt; + mempool[ancestor.txid].feeDelta = mempoolTx.feeDelta; + isAcceleratedBy[ancestor.txid] = mempoolTx.acceleratedBy; + } + } else { + if (mempoolTx.acceleration) { + mempoolTx.cpfpDirty = true; + delete mempoolTx.acceleration; } - mempool[ancestor.txid].acceleration = true; - mempool[ancestor.txid].acceleratedBy = mempoolTx.acceleratedBy; - mempool[ancestor.txid].acceleratedAt = mempoolTx.acceleratedAt; - mempool[ancestor.txid].feeDelta = mempoolTx.feeDelta; - isAcceleratedBy[ancestor.txid] = mempoolTx.acceleratedBy; } } else { if (mempoolTx.acceleration) { mempoolTx.cpfpDirty = true; + delete mempoolTx.acceleration; } - delete mempoolTx.acceleration; } // online calculation of stack-of-blocks fee stats @@ -486,7 +518,7 @@ class MempoolBlocks { } } } - return this.dataToMempoolBlocks( + mempoolBlocks[blockIndex] = this.dataToMempoolBlocks( block, transactions, totalSize, @@ -494,7 +526,7 @@ class MempoolBlocks { totalFees, (hasBlockStack && blockIndex === lastBlockIndex && feeStatsCalculator) ? feeStatsCalculator.getRawFeeStats() : undefined, ); - }); + }; if (saveResults) { const deltas = this.calculateMempoolDeltas(this.mempoolBlocks, mempoolBlocks); From c7f48b4390a7973bb97b02b6cfe239d0b5feee8c Mon Sep 17 00:00:00 2001 From: natsoni Date: Mon, 19 Aug 2024 16:29:34 +0200 Subject: [PATCH 002/147] Add amount mode selector to footer --- .../amount-selector.component.html | 7 ++++ .../amount-selector.component.scss | 0 .../amount-selector.component.ts | 36 +++++++++++++++++++ .../global-footer.component.html | 6 +++- .../global-footer.component.scss | 5 +++ frontend/src/app/shared/shared.module.ts | 3 ++ 6 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 frontend/src/app/components/amount-selector/amount-selector.component.html create mode 100644 frontend/src/app/components/amount-selector/amount-selector.component.scss create mode 100644 frontend/src/app/components/amount-selector/amount-selector.component.ts diff --git a/frontend/src/app/components/amount-selector/amount-selector.component.html b/frontend/src/app/components/amount-selector/amount-selector.component.html new file mode 100644 index 000000000..b509d6fe3 --- /dev/null +++ b/frontend/src/app/components/amount-selector/amount-selector.component.html @@ -0,0 +1,7 @@ +
+ +
diff --git a/frontend/src/app/components/amount-selector/amount-selector.component.scss b/frontend/src/app/components/amount-selector/amount-selector.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/frontend/src/app/components/amount-selector/amount-selector.component.ts b/frontend/src/app/components/amount-selector/amount-selector.component.ts new file mode 100644 index 000000000..144b0f1db --- /dev/null +++ b/frontend/src/app/components/amount-selector/amount-selector.component.ts @@ -0,0 +1,36 @@ +import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; +import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; +import { StorageService } from '../../services/storage.service'; +import { StateService } from '../../services/state.service'; + +@Component({ + selector: 'app-amount-selector', + templateUrl: './amount-selector.component.html', + styleUrls: ['./amount-selector.component.scss'], + changeDetection: ChangeDetectionStrategy.OnPush +}) +export class AmountSelectorComponent implements OnInit { + amountForm: UntypedFormGroup; + modes = ['btc', 'sats', 'fiat']; + + constructor( + private formBuilder: UntypedFormBuilder, + private stateService: StateService, + private storageService: StorageService, + ) { } + + ngOnInit() { + this.amountForm = this.formBuilder.group({ + mode: ['btc'] + }); + this.stateService.viewAmountMode$.subscribe((mode) => { + this.amountForm.get('mode')?.setValue(mode); + }); + } + + changeMode() { + const newMode = this.amountForm.get('mode')?.value; + this.storageService.setValue('view-amount-mode', newMode); + this.stateService.viewAmountMode$.next(newMode); + } +} diff --git a/frontend/src/app/shared/components/global-footer/global-footer.component.html b/frontend/src/app/shared/components/global-footer/global-footer.component.html index a2e7286e0..1765bc6fc 100644 --- a/frontend/src/app/shared/components/global-footer/global-footer.component.html +++ b/frontend/src/app/shared/components/global-footer/global-footer.component.html @@ -27,6 +27,9 @@
+
+ +
@if (!env.customize?.theme) {
@@ -39,7 +42,8 @@
@if (!env.customize?.theme) {
- + +
} @if (!enterpriseInfo?.footer_img) { diff --git a/frontend/src/app/shared/components/global-footer/global-footer.component.scss b/frontend/src/app/shared/components/global-footer/global-footer.component.scss index e0daf4f4c..b815da754 100644 --- a/frontend/src/app/shared/components/global-footer/global-footer.component.scss +++ b/frontend/src/app/shared/components/global-footer/global-footer.component.scss @@ -76,6 +76,11 @@ footer .selector { display: inline-block; } +footer .add-margin { + margin-left: 5px; + margin-right: 5px; +} + footer .row.link-tree { max-width: 1140px; margin: 0 auto; diff --git a/frontend/src/app/shared/shared.module.ts b/frontend/src/app/shared/shared.module.ts index 2d5b4d0f9..2e300a300 100644 --- a/frontend/src/app/shared/shared.module.ts +++ b/frontend/src/app/shared/shared.module.ts @@ -35,6 +35,7 @@ import { LanguageSelectorComponent } from '../components/language-selector/langu import { FiatSelectorComponent } from '../components/fiat-selector/fiat-selector.component'; import { RateUnitSelectorComponent } from '../components/rate-unit-selector/rate-unit-selector.component'; import { ThemeSelectorComponent } from '../components/theme-selector/theme-selector.component'; +import { AmountSelectorComponent } from '../components/amount-selector/amount-selector.component'; import { BrowserOnlyDirective } from './directives/browser-only.directive'; import { ServerOnlyDirective } from './directives/server-only.directive'; import { ColoredPriceDirective } from './directives/colored-price.directive'; @@ -131,6 +132,7 @@ import { OnlyVsizeDirective, OnlyWeightDirective } from './components/weight-dir FiatSelectorComponent, ThemeSelectorComponent, RateUnitSelectorComponent, + AmountSelectorComponent, ScriptpubkeyTypePipe, RelativeUrlPipe, NoSanitizePipe, @@ -278,6 +280,7 @@ import { OnlyVsizeDirective, OnlyWeightDirective } from './components/weight-dir FiatSelectorComponent, RateUnitSelectorComponent, ThemeSelectorComponent, + AmountSelectorComponent, ScriptpubkeyTypePipe, RelativeUrlPipe, Hex2asciiPipe, From e59308c2f5ab79d24e9a3f2fca7ecb135284fcac Mon Sep 17 00:00:00 2001 From: natsoni Date: Mon, 19 Aug 2024 17:13:41 +0200 Subject: [PATCH 003/147] Fix global footer css --- .../global-footer.component.html | 10 ++++---- .../global-footer.component.scss | 25 ++++++++++++++++--- 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/frontend/src/app/shared/components/global-footer/global-footer.component.html b/frontend/src/app/shared/components/global-footer/global-footer.component.html index 1765bc6fc..fbc2c89eb 100644 --- a/frontend/src/app/shared/components/global-footer/global-footer.component.html +++ b/frontend/src/app/shared/components/global-footer/global-footer.component.html @@ -27,27 +27,27 @@
-
+
@if (!env.customize?.theme) { - @if (!env.customize?.theme) { -
+
} @if (!enterpriseInfo?.footer_img) { - diff --git a/frontend/src/app/shared/components/global-footer/global-footer.component.scss b/frontend/src/app/shared/components/global-footer/global-footer.component.scss index b815da754..bf47d5489 100644 --- a/frontend/src/app/shared/components/global-footer/global-footer.component.scss +++ b/frontend/src/app/shared/components/global-footer/global-footer.component.scss @@ -159,7 +159,7 @@ footer .nowrap { display: block; } -@media (min-width: 951px) { +@media (min-width: 1020px) { :host-context(.ltr-layout) .language-selector { float: right !important; } @@ -177,7 +177,24 @@ footer .nowrap { } .services { - @media (min-width: 951px) and (max-width: 1147px) { + @media (min-width: 1300px) { + :host-context(.ltr-layout) .language-selector { + float: right !important; + } + :host-context(.rtl-layout) .language-selector { + float: left !important; + } + + .explore-tagline-desktop { + display: block; + } + + .explore-tagline-mobile { + display: none; + } + } + + @media (max-width: 1300px) { :host-context(.ltr-layout) .services .language-selector { float: none !important; } @@ -253,7 +270,7 @@ footer .nowrap { } -@media (max-width: 950px) { +@media (max-width: 1019px) { .main-logo { width: 220px; @@ -292,7 +309,7 @@ footer .nowrap { } } -@media (max-width: 1147px) { +@media (max-width: 1300px) { .services.main-logo { width: 220px; From ae2ed8fdae41145d23af1f7ecd2330e40732dc15 Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Tue, 20 Aug 2024 11:53:48 +0200 Subject: [PATCH 004/147] [mining] fix pools updater only running at start --- backend/src/config.ts | 2 ++ backend/src/index.ts | 1 + backend/src/tasks/pools-updater.ts | 9 +++------ 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/backend/src/config.ts b/backend/src/config.ts index b0afe7f23..cf63a0c7d 100644 --- a/backend/src/config.ts +++ b/backend/src/config.ts @@ -32,6 +32,7 @@ interface IConfig { AUTOMATIC_POOLS_UPDATE: boolean; POOLS_JSON_URL: string, POOLS_JSON_TREE_URL: string, + POOLS_UPDATE_DELAY: number, AUDIT: boolean; RUST_GBT: boolean; LIMIT_GBT: boolean; @@ -192,6 +193,7 @@ const defaults: IConfig = { 'AUTOMATIC_POOLS_UPDATE': false, 'POOLS_JSON_URL': 'https://raw.githubusercontent.com/mempool/mining-pools/master/pools-v2.json', 'POOLS_JSON_TREE_URL': 'https://api.github.com/repos/mempool/mining-pools/git/trees/master', + 'POOLS_UPDATE_DELAY': 604800, // in seconds, default is one week 'AUDIT': false, 'RUST_GBT': false, 'LIMIT_GBT': false, diff --git a/backend/src/index.ts b/backend/src/index.ts index 1d83c56a3..fa380b0c9 100644 --- a/backend/src/index.ts +++ b/backend/src/index.ts @@ -239,6 +239,7 @@ class Server { if (config.FIAT_PRICE.ENABLED) { priceUpdater.$run(); } + await poolsUpdater.updatePoolsJson(); // rerun immediately if we skipped the mempool update, otherwise wait POLL_RATE_MS const elapsed = Date.now() - start; diff --git a/backend/src/tasks/pools-updater.ts b/backend/src/tasks/pools-updater.ts index a3a3265c6..6b56fff95 100644 --- a/backend/src/tasks/pools-updater.ts +++ b/backend/src/tasks/pools-updater.ts @@ -23,11 +23,8 @@ class PoolsUpdater { return; } - const oneWeek = 604800; - const oneDay = 86400; - const now = new Date().getTime() / 1000; - if (now - this.lastRun < oneWeek) { // Execute the PoolsUpdate only once a week, or upon restart + if (now - this.lastRun < config.MEMPOOL.POOLS_UPDATE_DELAY) { // Execute the PoolsUpdate only once a week, or upon restart return; } @@ -87,8 +84,8 @@ class PoolsUpdater { logger.info(`Mining pools-v2.json (${githubSha}) import completed`); } catch (e) { - this.lastRun = now - (oneWeek - oneDay); // Try again in 24h instead of waiting next week - logger.err(`PoolsUpdater failed. Will try again in 24h. Exception: ${JSON.stringify(e)}`, logger.tags.mining); + this.lastRun = now - 600; // Try again in 10 minutes + logger.err(`PoolsUpdater failed. Will try again in 10 minutes. Exception: ${JSON.stringify(e)}`, logger.tags.mining); } } From 459639410081554ddf7a5f523f2790a700f9e329 Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Tue, 20 Aug 2024 12:07:20 +0200 Subject: [PATCH 005/147] [mining] pool updater is now self contained service --- backend/src/index.ts | 3 ++- backend/src/tasks/pools-updater.ts | 40 ++++++++++++++++++++---------- 2 files changed, 29 insertions(+), 14 deletions(-) diff --git a/backend/src/index.ts b/backend/src/index.ts index fa380b0c9..446a6a140 100644 --- a/backend/src/index.ts +++ b/backend/src/index.ts @@ -211,6 +211,8 @@ class Server { } }); } + + poolsUpdater.$startService(); } async runMainUpdateLoop(): Promise { @@ -239,7 +241,6 @@ class Server { if (config.FIAT_PRICE.ENABLED) { priceUpdater.$run(); } - await poolsUpdater.updatePoolsJson(); // rerun immediately if we skipped the mempool update, otherwise wait POLL_RATE_MS const elapsed = Date.now() - start; diff --git a/backend/src/tasks/pools-updater.ts b/backend/src/tasks/pools-updater.ts index 6b56fff95..652383a2a 100644 --- a/backend/src/tasks/pools-updater.ts +++ b/backend/src/tasks/pools-updater.ts @@ -6,16 +6,30 @@ import backendInfo from '../api/backend-info'; import logger from '../logger'; import { SocksProxyAgent } from 'socks-proxy-agent'; import * as https from 'https'; +import { Common } from '../api/common'; /** * Maintain the most recent version of pools-v2.json */ class PoolsUpdater { + tag = 'PoolsUpdater'; + lastRun: number = 0; currentSha: string | null = null; poolsUrl: string = config.MEMPOOL.POOLS_JSON_URL; treeUrl: string = config.MEMPOOL.POOLS_JSON_TREE_URL; + public async $startService(): Promise { + while ('Bitcoin is still alive') { + try { + await this.updatePoolsJson(); + } catch (e: any) { + logger.info(`Exception ${e} in PoolsUpdater::$startService. Code: ${e.code}. Message: ${e.message}`, this.tag); + } + await Common.sleep$(10000); + } + } + public async updatePoolsJson(): Promise { if (['mainnet', 'testnet', 'signet'].includes(config.MEMPOOL.NETWORK) === false || config.MEMPOOL.ENABLED === false @@ -40,7 +54,7 @@ class PoolsUpdater { this.currentSha = await this.getShaFromDb(); } - logger.debug(`pools-v2.json sha | Current: ${this.currentSha} | Github: ${githubSha}`); + logger.debug(`pools-v2.json sha | Current: ${this.currentSha} | Github: ${githubSha}`, this.tag); if (this.currentSha !== null && this.currentSha === githubSha) { return; } @@ -50,16 +64,16 @@ class PoolsUpdater { config.MEMPOOL.AUTOMATIC_POOLS_UPDATE !== true && // Automatic pools update is disabled !process.env.npm_config_update_pools // We're not manually updating mining pool ) { - logger.warn(`Updated mining pools data is available (${githubSha}) but AUTOMATIC_POOLS_UPDATE is disabled`); - logger.info(`You can update your mining pools using the --update-pools command flag. You may want to clear your nginx cache as well if applicable`); + logger.warn(`Updated mining pools data is available (${githubSha}) but AUTOMATIC_POOLS_UPDATE is disabled`, this.tag); + logger.info(`You can update your mining pools using the --update-pools command flag. You may want to clear your nginx cache as well if applicable`, this.tag); return; } const network = config.SOCKS5PROXY.ENABLED ? 'tor' : 'clearnet'; if (this.currentSha === null) { - logger.info(`Downloading pools-v2.json for the first time from ${this.poolsUrl} over ${network}`, logger.tags.mining); + logger.info(`Downloading pools-v2.json for the first time from ${this.poolsUrl} over ${network}`, this.tag); } else { - logger.warn(`pools-v2.json is outdated, fetching latest from ${this.poolsUrl} over ${network}`, logger.tags.mining); + logger.warn(`pools-v2.json is outdated, fetching latest from ${this.poolsUrl} over ${network}`, this.tag); } const poolsJson = await this.query(this.poolsUrl); if (poolsJson === undefined) { @@ -68,7 +82,7 @@ class PoolsUpdater { poolsParser.setMiningPools(poolsJson); if (config.DATABASE.ENABLED === false) { // Don't run db operations - logger.info(`Mining pools-v2.json (${githubSha}) import completed (no database)`); + logger.info(`Mining pools-v2.json (${githubSha}) import completed (no database)`, this.tag); return; } @@ -78,14 +92,14 @@ class PoolsUpdater { await this.updateDBSha(githubSha); await DB.query('COMMIT;'); } catch (e) { - logger.err(`Could not migrate mining pools, rolling back. Exception: ${JSON.stringify(e)}`, logger.tags.mining); + logger.err(`Could not migrate mining pools, rolling back. Exception: ${JSON.stringify(e)}`, this.tag); await DB.query('ROLLBACK;'); } - logger.info(`Mining pools-v2.json (${githubSha}) import completed`); + logger.info(`Mining pools-v2.json (${githubSha}) import completed`, this.tag); } catch (e) { this.lastRun = now - 600; // Try again in 10 minutes - logger.err(`PoolsUpdater failed. Will try again in 10 minutes. Exception: ${JSON.stringify(e)}`, logger.tags.mining); + logger.err(`PoolsUpdater failed. Will try again in 10 minutes. Exception: ${JSON.stringify(e)}`, this.tag); } } @@ -99,7 +113,7 @@ class PoolsUpdater { await DB.query('DELETE FROM state where name="pools_json_sha"'); await DB.query(`INSERT INTO state VALUES('pools_json_sha', NULL, '${githubSha}')`); } catch (e) { - logger.err('Cannot save github pools-v2.json sha into the db. Reason: ' + (e instanceof Error ? e.message : e), logger.tags.mining); + logger.err('Cannot save github pools-v2.json sha into the db. Reason: ' + (e instanceof Error ? e.message : e), this.tag); } } } @@ -112,7 +126,7 @@ class PoolsUpdater { const [rows]: any[] = await DB.query('SELECT string FROM state WHERE name="pools_json_sha"'); return (rows.length > 0 ? rows[0].string : null); } catch (e) { - logger.err('Cannot fetch pools-v2.json sha from db. Reason: ' + (e instanceof Error ? e.message : e), logger.tags.mining); + logger.err('Cannot fetch pools-v2.json sha from db. Reason: ' + (e instanceof Error ? e.message : e), this.tag); return null; } } @@ -131,7 +145,7 @@ class PoolsUpdater { } } - logger.err(`Cannot find "pools-v2.json" in git tree (${this.treeUrl})`, logger.tags.mining); + logger.err(`Cannot find "pools-v2.json" in git tree (${this.treeUrl})`, this.tag); return null; } @@ -183,7 +197,7 @@ class PoolsUpdater { } return data.data; } catch (e) { - logger.err('Could not connect to Github. Reason: ' + (e instanceof Error ? e.message : e)); + logger.err('Could not connect to Github. Reason: ' + (e instanceof Error ? e.message : e), this.tag); retry++; } await setDelay(config.MEMPOOL.EXTERNAL_RETRY_INTERVAL); From 6db4afe878082c67e3bb7045cb78d4a9add567ef Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Tue, 20 Aug 2024 14:31:07 +0200 Subject: [PATCH 006/147] [mining] add POOLS_UPDATE_DELAY where needed --- backend/mempool-config.sample.json | 1 + backend/src/__fixtures__/mempool-config.template.json | 1 + backend/src/__tests__/config.test.ts | 1 + docker/README.md | 2 ++ docker/backend/mempool-config.json | 1 + docker/backend/start.sh | 2 ++ 6 files changed, 8 insertions(+) diff --git a/backend/mempool-config.sample.json b/backend/mempool-config.sample.json index 4650c1e64..8cd7f2ede 100644 --- a/backend/mempool-config.sample.json +++ b/backend/mempool-config.sample.json @@ -27,6 +27,7 @@ "AUTOMATIC_POOLS_UPDATE": false, "POOLS_JSON_URL": "https://raw.githubusercontent.com/mempool/mining-pools/master/pools-v2.json", "POOLS_JSON_TREE_URL": "https://api.github.com/repos/mempool/mining-pools/git/trees/master", + "POOLS_UPDATE_DELAY": 604800, "AUDIT": false, "RUST_GBT": false, "LIMIT_GBT": false, diff --git a/backend/src/__fixtures__/mempool-config.template.json b/backend/src/__fixtures__/mempool-config.template.json index 3796b7f22..00049725a 100644 --- a/backend/src/__fixtures__/mempool-config.template.json +++ b/backend/src/__fixtures__/mempool-config.template.json @@ -28,6 +28,7 @@ "INDEXING_BLOCKS_AMOUNT": 14, "POOLS_JSON_TREE_URL": "__MEMPOOL_POOLS_JSON_TREE_URL__", "POOLS_JSON_URL": "__MEMPOOL_POOLS_JSON_URL__", + "POOLS_UPDATE_DELAY": 604800, "AUDIT": true, "RUST_GBT": false, "LIMIT_GBT": false, diff --git a/backend/src/__tests__/config.test.ts b/backend/src/__tests__/config.test.ts index 050213143..d112ab6eb 100644 --- a/backend/src/__tests__/config.test.ts +++ b/backend/src/__tests__/config.test.ts @@ -41,6 +41,7 @@ describe('Mempool Backend Config', () => { STDOUT_LOG_MIN_PRIORITY: 'debug', POOLS_JSON_TREE_URL: 'https://api.github.com/repos/mempool/mining-pools/git/trees/master', POOLS_JSON_URL: 'https://raw.githubusercontent.com/mempool/mining-pools/master/pools-v2.json', + POOLS_UPDATE_DELAY: 604800, AUDIT: false, RUST_GBT: false, LIMIT_GBT: false, diff --git a/docker/README.md b/docker/README.md index ce1548e91..2658914eb 100644 --- a/docker/README.md +++ b/docker/README.md @@ -109,6 +109,7 @@ Below we list all settings from `mempool-config.json` and the corresponding over "AUTOMATIC_POOLS_UPDATE": false, "POOLS_JSON_URL": "https://raw.githubusercontent.com/mempool/mining-pools/master/pools-v2.json", "POOLS_JSON_TREE_URL": "https://api.github.com/repos/mempool/mining-pools/git/trees/master", + "POOLS_UPDATE_DELAY": 604800, "CPFP_INDEXING": false, "MAX_BLOCKS_BULK_QUERY": 0, "DISK_CACHE_BLOCK_INTERVAL": 6, @@ -140,6 +141,7 @@ Corresponding `docker-compose.yml` overrides: MEMPOOL_AUTOMATIC_POOLS_UPDATE: "" MEMPOOL_POOLS_JSON_URL: "" MEMPOOL_POOLS_JSON_TREE_URL: "" + MEMPOOL_POOLS_UPDATE_DELAY: "" MEMPOOL_CPFP_INDEXING: "" MEMPOOL_MAX_BLOCKS_BULK_QUERY: "" MEMPOOL_DISK_CACHE_BLOCK_INTERVAL: "" diff --git a/docker/backend/mempool-config.json b/docker/backend/mempool-config.json index 79cd14644..7b00d792a 100644 --- a/docker/backend/mempool-config.json +++ b/docker/backend/mempool-config.json @@ -36,6 +36,7 @@ "ALLOW_UNREACHABLE": __MEMPOOL_ALLOW_UNREACHABLE__, "POOLS_JSON_TREE_URL": "__MEMPOOL_POOLS_JSON_TREE_URL__", "POOLS_JSON_URL": "__MEMPOOL_POOLS_JSON_URL__", + "POOLS_UPDATE_DELAY": __MEMPOOL_POOLS_UPDATE_DELAY__, "PRICE_UPDATES_PER_HOUR": __MEMPOOL_PRICE_UPDATES_PER_HOUR__, "MAX_TRACKED_ADDRESSES": __MEMPOOL_MAX_TRACKED_ADDRESSES__ }, diff --git a/docker/backend/start.sh b/docker/backend/start.sh index 8033531ef..9c98fed44 100755 --- a/docker/backend/start.sh +++ b/docker/backend/start.sh @@ -29,6 +29,7 @@ __MEMPOOL_STDOUT_LOG_MIN_PRIORITY__=${MEMPOOL_STDOUT_LOG_MIN_PRIORITY:=info} __MEMPOOL_AUTOMATIC_POOLS_UPDATE__=${MEMPOOL_AUTOMATIC_POOLS_UPDATE:=false} __MEMPOOL_POOLS_JSON_URL__=${MEMPOOL_POOLS_JSON_URL:=https://raw.githubusercontent.com/mempool/mining-pools/master/pools-v2.json} __MEMPOOL_POOLS_JSON_TREE_URL__=${MEMPOOL_POOLS_JSON_TREE_URL:=https://api.github.com/repos/mempool/mining-pools/git/trees/master} +__MEMPOOL_POOLS_UPDATE_DELAY__=${MEMPOOL_POOLS_UPDATE_DELAY:=604800} __MEMPOOL_AUDIT__=${MEMPOOL_AUDIT:=false} __MEMPOOL_RUST_GBT__=${MEMPOOL_RUST_GBT:=false} __MEMPOOL_LIMIT_GBT__=${MEMPOOL_LIMIT_GBT:=false} @@ -187,6 +188,7 @@ sed -i "s!__MEMPOOL_STDOUT_LOG_MIN_PRIORITY__!${__MEMPOOL_STDOUT_LOG_MIN_PRIORIT sed -i "s!__MEMPOOL_AUTOMATIC_POOLS_UPDATE__!${__MEMPOOL_AUTOMATIC_POOLS_UPDATE__}!g" mempool-config.json sed -i "s!__MEMPOOL_POOLS_JSON_URL__!${__MEMPOOL_POOLS_JSON_URL__}!g" mempool-config.json sed -i "s!__MEMPOOL_POOLS_JSON_TREE_URL__!${__MEMPOOL_POOLS_JSON_TREE_URL__}!g" mempool-config.json +sed -i "s!__MEMPOOL_POOLS_UPDATE_DELAY__!${__MEMPOOL_POOLS_UPDATE_DELAY__}!g" mempool-config.json sed -i "s!__MEMPOOL_AUDIT__!${__MEMPOOL_AUDIT__}!g" mempool-config.json sed -i "s!__MEMPOOL_RUST_GBT__!${__MEMPOOL_RUST_GBT__}!g" mempool-config.json sed -i "s!__MEMPOOL_LIMIT_GBT__!${__MEMPOOL_LIMIT_GBT__}!g" mempool-config.json From d22743c4b81331768d4e44cab5f4a0d213743434 Mon Sep 17 00:00:00 2001 From: natsoni Date: Thu, 22 Aug 2024 15:39:20 +0200 Subject: [PATCH 007/147] Don't display accelerator checkout on already accelerated txs --- .../app/components/transaction/transaction.component.html | 8 ++++---- .../app/components/transaction/transaction.component.ts | 6 ++++++ 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/frontend/src/app/components/transaction/transaction.component.html b/frontend/src/app/components/transaction/transaction.component.html index 715fca4c8..553d3221f 100644 --- a/frontend/src/app/components/transaction/transaction.component.html +++ b/frontend/src/app/components/transaction/transaction.component.html @@ -552,18 +552,18 @@ @if (eta.blocks >= 7) { - + Not any time soon - @if (!tx?.acceleration && acceleratorAvailable && accelerateCtaType === 'button' && !showAccelerationSummary && eligibleForAcceleration) { + @if (!tx?.acceleration && acceleratorAvailable && accelerateCtaType === 'button' && !showAccelerationSummary && eligibleForAcceleration && notAcceleratedOnLoad) { Accelerate } } @else if (network === 'liquid' || network === 'liquidtestnet') { } @else { - + - @if (!tx?.acceleration && acceleratorAvailable && accelerateCtaType === 'button' && !showAccelerationSummary && eligibleForAcceleration) { + @if (!tx?.acceleration && acceleratorAvailable && accelerateCtaType === 'button' && !showAccelerationSummary && eligibleForAcceleration && notAcceleratedOnLoad) { Accelerate } diff --git a/frontend/src/app/components/transaction/transaction.component.ts b/frontend/src/app/components/transaction/transaction.component.ts index 8c0d3b4a9..4d0818c72 100644 --- a/frontend/src/app/components/transaction/transaction.component.ts +++ b/frontend/src/app/components/transaction/transaction.component.ts @@ -139,6 +139,7 @@ export class TransactionComponent implements OnInit, AfterViewInit, OnDestroy { firstLoad = true; waitingForAccelerationInfo: boolean = false; isLoadingFirstSeen = false; + notAcceleratedOnLoad: boolean = null; featuresEnabled: boolean; segwitEnabled: boolean; @@ -848,6 +849,10 @@ export class TransactionComponent implements OnInit, AfterViewInit, OnDestroy { this.tx.feeDelta = cpfpInfo.feeDelta; this.setIsAccelerated(firstCpfp); } + + if (this.notAcceleratedOnLoad === null) { + this.notAcceleratedOnLoad = !this.isAcceleration; + } if (!this.isAcceleration && this.fragmentParams.has('accelerate')) { this.forceAccelerationSummary = true; @@ -1083,6 +1088,7 @@ export class TransactionComponent implements OnInit, AfterViewInit, OnDestroy { (!this.hideAccelerationSummary && !this.accelerationFlowCompleted) || this.forceAccelerationSummary ) + && this.notAcceleratedOnLoad // avoid briefly showing accelerator checkout on already accelerated txs ); } From b47e1486775a35593a8b9233cdee3c700fe463b3 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Thu, 22 Aug 2024 19:51:28 +0000 Subject: [PATCH 008/147] respect json Accept header in API error responses --- backend/src/api/bitcoin/bitcoin.routes.ts | 144 +++++++++++--------- backend/src/api/explorer/channels.routes.ts | 19 +-- backend/src/api/explorer/general.routes.ts | 8 +- backend/src/api/explorer/nodes.routes.ts | 39 +++--- backend/src/api/liquid/liquid.routes.ts | 35 ++--- backend/src/api/mining/mining-routes.ts | 73 +++++----- backend/src/utils/api.ts | 9 ++ 7 files changed, 177 insertions(+), 150 deletions(-) create mode 100644 backend/src/utils/api.ts diff --git a/backend/src/api/bitcoin/bitcoin.routes.ts b/backend/src/api/bitcoin/bitcoin.routes.ts index 6225a9c1d..498003d98 100644 --- a/backend/src/api/bitcoin/bitcoin.routes.ts +++ b/backend/src/api/bitcoin/bitcoin.routes.ts @@ -20,6 +20,7 @@ import difficultyAdjustment from '../difficulty-adjustment'; import transactionRepository from '../../repositories/TransactionRepository'; import rbfCache from '../rbf-cache'; import { calculateMempoolTxCpfp } from '../cpfp'; +import { handleError } from '../../utils/api'; class BitcoinRoutes { public initRoutes(app: Application) { @@ -86,7 +87,7 @@ class BitcoinRoutes { res.set('Content-Type', 'application/json'); res.send(result); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -105,13 +106,13 @@ class BitcoinRoutes { const result = mempoolBlocks.getMempoolBlocks(); res.json(result); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } private getTransactionTimes(req: Request, res: Response) { if (!Array.isArray(req.query.txId)) { - res.status(500).send('Not an array'); + handleError(req, res, 500, 'Not an array'); return; } const txIds: string[] = []; @@ -128,12 +129,12 @@ class BitcoinRoutes { private async $getBatchedOutspends(req: Request, res: Response): Promise { const txids_csv = req.query.txids; if (!txids_csv || typeof txids_csv !== 'string') { - res.status(500).send('Invalid txids format'); + handleError(req, res, 500, 'Invalid txids format'); return; } const txids = txids_csv.split(','); if (txids.length > 50) { - res.status(400).send('Too many txids requested'); + handleError(req, res, 400, 'Too many txids requested'); return; } @@ -141,13 +142,13 @@ class BitcoinRoutes { const batchedOutspends = await bitcoinApi.$getBatchedOutspends(txids); res.json(batchedOutspends); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } private async $getCpfpInfo(req: Request, res: Response) { if (!/^[a-fA-F0-9]{64}$/.test(req.params.txId)) { - res.status(501).send(`Invalid transaction ID.`); + handleError(req, res, 501, `Invalid transaction ID.`); return; } @@ -180,7 +181,7 @@ class BitcoinRoutes { try { cpfpInfo = await transactionRepository.$getCpfpInfo(req.params.txId); } catch (e) { - res.status(500).send('failed to get CPFP info'); + handleError(req, res, 500, 'failed to get CPFP info'); return; } } @@ -209,7 +210,7 @@ class BitcoinRoutes { if (e instanceof Error && e instanceof Error && e.message && e.message.indexOf('No such mempool or blockchain transaction') > -1) { statusCode = 404; } - res.status(statusCode).send(e instanceof Error ? e.message : e); + handleError(req, res, statusCode, e instanceof Error ? e.message : e); } } @@ -223,7 +224,7 @@ class BitcoinRoutes { if (e instanceof Error && e.message && e.message.indexOf('No such mempool or blockchain transaction') > -1) { statusCode = 404; } - res.status(statusCode).send(e instanceof Error ? e.message : e); + handleError(req, res, statusCode, e instanceof Error ? e.message : e); } } @@ -284,13 +285,13 @@ class BitcoinRoutes { // Not modified // 422 Unprocessable Entity // https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/422 - res.status(422).send(`Psbt had no missing nonWitnessUtxos.`); + handleError(req, res, 422, `Psbt had no missing nonWitnessUtxos.`); } } catch (e: any) { if (e instanceof Error && new RegExp(notFoundError).test(e.message)) { - res.status(404).send(e.message); + handleError(req, res, 404, e.message); } else { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } } @@ -304,7 +305,7 @@ class BitcoinRoutes { if (e instanceof Error && e.message && e.message.indexOf('No such mempool or blockchain transaction') > -1) { statusCode = 404; } - res.status(statusCode).send(e instanceof Error ? e.message : e); + handleError(req, res, statusCode, e instanceof Error ? e.message : e); } } @@ -314,7 +315,7 @@ class BitcoinRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 3600 * 24 * 30).toUTCString()); res.json(transactions); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -336,7 +337,7 @@ class BitcoinRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * cacheDuration).toUTCString()); res.json(block); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -346,7 +347,7 @@ class BitcoinRoutes { res.setHeader('content-type', 'text/plain'); res.send(blockHeader); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -357,10 +358,11 @@ class BitcoinRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 3600 * 24 * 30).toUTCString()); res.json(auditSummary); } else { - return res.status(404).send(`audit not available`); + handleError(req, res, 404, `audit not available`); + return; } } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -371,7 +373,8 @@ class BitcoinRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 3600 * 24 * 30).toUTCString()); res.json(auditSummary); } else { - return res.status(404).send(`transaction audit not available`); + handleError(req, res, 404, `transaction audit not available`); + return; } } catch (e) { res.status(500).send(e instanceof Error ? e.message : e); @@ -388,42 +391,49 @@ class BitcoinRoutes { return await this.getLegacyBlocks(req, res); } } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } private async getBlocksByBulk(req: Request, res: Response) { try { if (['mainnet', 'testnet', 'signet'].includes(config.MEMPOOL.NETWORK) === false) { // Liquid - Not implemented - return res.status(404).send(`This API is only available for Bitcoin networks`); + handleError(req, res, 404, `This API is only available for Bitcoin networks`); + return; } if (config.MEMPOOL.MAX_BLOCKS_BULK_QUERY <= 0) { - return res.status(404).send(`This API is disabled. Set config.MEMPOOL.MAX_BLOCKS_BULK_QUERY to a positive number to enable it.`); + handleError(req, res, 404, `This API is disabled. Set config.MEMPOOL.MAX_BLOCKS_BULK_QUERY to a positive number to enable it.`); + return; } if (!Common.indexingEnabled()) { - return res.status(404).send(`Indexing is required for this API`); + handleError(req, res, 404, `Indexing is required for this API`); + return; } const from = parseInt(req.params.from, 10); if (!req.params.from || from < 0) { - return res.status(400).send(`Parameter 'from' must be a block height (integer)`); + handleError(req, res, 400, `Parameter 'from' must be a block height (integer)`); + return; } const to = req.params.to === undefined ? await bitcoinApi.$getBlockHeightTip() : parseInt(req.params.to, 10); if (to < 0) { - return res.status(400).send(`Parameter 'to' must be a block height (integer)`); + handleError(req, res, 400, `Parameter 'to' must be a block height (integer)`); + return; } if (from > to) { - return res.status(400).send(`Parameter 'to' must be a higher block height than 'from'`); + handleError(req, res, 400, `Parameter 'to' must be a higher block height than 'from'`); + return; } if ((to - from + 1) > config.MEMPOOL.MAX_BLOCKS_BULK_QUERY) { - return res.status(400).send(`You can only query ${config.MEMPOOL.MAX_BLOCKS_BULK_QUERY} blocks at once.`); + handleError(req, res, 400, `You can only query ${config.MEMPOOL.MAX_BLOCKS_BULK_QUERY} blocks at once.`); + return; } res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString()); res.json(await blocks.$getBlocksBetweenHeight(from, to)); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -458,10 +468,10 @@ class BitcoinRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString()); res.json(returnBlocks); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } - + private async getBlockTransactions(req: Request, res: Response) { try { loadingIndicators.setProgress('blocktxs-' + req.params.hash, 0); @@ -483,7 +493,7 @@ class BitcoinRoutes { res.json(transactions); } catch (e) { loadingIndicators.setProgress('blocktxs-' + req.params.hash, 100); - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -492,13 +502,13 @@ class BitcoinRoutes { const blockHash = await bitcoinApi.$getBlockHash(parseInt(req.params.height, 10)); res.send(blockHash); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } private async getAddress(req: Request, res: Response) { if (config.MEMPOOL.BACKEND === 'none') { - res.status(405).send('Address lookups cannot be used with bitcoind as backend.'); + handleError(req, res, 405, 'Address lookups cannot be used with bitcoind as backend.'); return; } @@ -507,15 +517,16 @@ class BitcoinRoutes { res.json(addressData); } catch (e) { if (e instanceof Error && e.message && (e.message.indexOf('too long') > 0 || e.message.indexOf('confirmed status') > 0)) { - return res.status(413).send(e instanceof Error ? e.message : e); + handleError(req, res, 413, e instanceof Error ? e.message : e); + return; } - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } private async getAddressTransactions(req: Request, res: Response): Promise { if (config.MEMPOOL.BACKEND === 'none') { - res.status(405).send('Address lookups cannot be used with bitcoind as backend.'); + handleError(req, res, 405, 'Address lookups cannot be used with bitcoind as backend.'); return; } @@ -528,23 +539,23 @@ class BitcoinRoutes { res.json(transactions); } catch (e) { if (e instanceof Error && e.message && (e.message.indexOf('too long') > 0 || e.message.indexOf('confirmed status') > 0)) { - res.status(413).send(e instanceof Error ? e.message : e); + handleError(req, res, 413, e instanceof Error ? e.message : e); return; } - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } private async getAddressTransactionSummary(req: Request, res: Response): Promise { if (config.MEMPOOL.BACKEND !== 'esplora') { - res.status(405).send('Address summary lookups require mempool/electrs backend.'); + handleError(req, res, 405, 'Address summary lookups require mempool/electrs backend.'); return; } } private async getScriptHash(req: Request, res: Response) { if (config.MEMPOOL.BACKEND === 'none') { - res.status(405).send('Address lookups cannot be used with bitcoind as backend.'); + handleError(req, res, 405, 'Address lookups cannot be used with bitcoind as backend.'); return; } @@ -555,15 +566,16 @@ class BitcoinRoutes { res.json(addressData); } catch (e) { if (e instanceof Error && e.message && (e.message.indexOf('too long') > 0 || e.message.indexOf('confirmed status') > 0)) { - return res.status(413).send(e instanceof Error ? e.message : e); + handleError(req, res, 413, e instanceof Error ? e.message : e); + return; } - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } private async getScriptHashTransactions(req: Request, res: Response): Promise { if (config.MEMPOOL.BACKEND === 'none') { - res.status(405).send('Address lookups cannot be used with bitcoind as backend.'); + handleError(req, res, 405, 'Address lookups cannot be used with bitcoind as backend.'); return; } @@ -578,16 +590,16 @@ class BitcoinRoutes { res.json(transactions); } catch (e) { if (e instanceof Error && e.message && (e.message.indexOf('too long') > 0 || e.message.indexOf('confirmed status') > 0)) { - res.status(413).send(e instanceof Error ? e.message : e); + handleError(req, res, 413, e instanceof Error ? e.message : e); return; } - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } private async getScriptHashTransactionSummary(req: Request, res: Response): Promise { if (config.MEMPOOL.BACKEND !== 'esplora') { - res.status(405).send('Scripthash summary lookups require mempool/electrs backend.'); + handleError(req, res, 405, 'Scripthash summary lookups require mempool/electrs backend.'); return; } } @@ -597,7 +609,7 @@ class BitcoinRoutes { const blockHash = await bitcoinApi.$getAddressPrefix(req.params.prefix); res.send(blockHash); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -624,7 +636,7 @@ class BitcoinRoutes { const rawMempool = await bitcoinApi.$getRawMempool(); res.send(rawMempool); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -632,12 +644,13 @@ class BitcoinRoutes { try { const result = blocks.getCurrentBlockHeight(); if (!result) { - return res.status(503).send(`Service Temporarily Unavailable`); + handleError(req, res, 503, `Service Temporarily Unavailable`); + return; } res.setHeader('content-type', 'text/plain'); res.send(result.toString()); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -647,7 +660,7 @@ class BitcoinRoutes { res.setHeader('content-type', 'text/plain'); res.send(result); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -657,7 +670,7 @@ class BitcoinRoutes { res.setHeader('content-type', 'application/octet-stream'); res.send(result); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -666,7 +679,7 @@ class BitcoinRoutes { const result = await bitcoinApi.$getTxIdsForBlock(req.params.hash); res.json(result); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -675,7 +688,7 @@ class BitcoinRoutes { const result = await bitcoinClient.validateAddress(req.params.address); res.json(result); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -688,7 +701,7 @@ class BitcoinRoutes { replaces }); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -697,7 +710,7 @@ class BitcoinRoutes { const result = rbfCache.getRbfTrees(false); res.json(result); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -706,7 +719,7 @@ class BitcoinRoutes { const result = rbfCache.getRbfTrees(true); res.json(result); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -719,7 +732,7 @@ class BitcoinRoutes { res.status(204).send(); } } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -728,7 +741,7 @@ class BitcoinRoutes { const result = await bitcoinApi.$getOutspends(req.params.txId); res.json(result); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -738,10 +751,10 @@ class BitcoinRoutes { if (da) { res.json(da); } else { - res.status(503).send(`Service Temporarily Unavailable`); + handleError(req, res, 503, `Service Temporarily Unavailable`); } } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -752,7 +765,7 @@ class BitcoinRoutes { const txIdResult = await bitcoinApi.$sendRawTransaction(rawTx); res.send(txIdResult); } catch (e: any) { - res.status(400).send(e.message && e.code ? 'sendrawtransaction RPC error: ' + JSON.stringify({ code: e.code, message: e.message }) + handleError(req, res, 400, e.message && e.code ? 'sendrawtransaction RPC error: ' + JSON.stringify({ code: e.code, message: e.message }) : (e.message || 'Error')); } } @@ -764,7 +777,7 @@ class BitcoinRoutes { const txIdResult = await bitcoinClient.sendRawTransaction(txHex); res.send(txIdResult); } catch (e: any) { - res.status(400).send(e.message && e.code ? 'sendrawtransaction RPC error: ' + JSON.stringify({ code: e.code, message: e.message }) + handleError(req, res, 400, e.message && e.code ? 'sendrawtransaction RPC error: ' + JSON.stringify({ code: e.code, message: e.message }) : (e.message || 'Error')); } } @@ -776,8 +789,7 @@ class BitcoinRoutes { const result = await bitcoinApi.$testMempoolAccept(rawTxs, maxfeerate); res.send(result); } catch (e: any) { - res.setHeader('content-type', 'text/plain'); - res.status(400).send(e.message && e.code ? 'testmempoolaccept RPC error: ' + JSON.stringify({ code: e.code, message: e.message }) + handleError(req, res, 400, e.message && e.code ? 'testmempoolaccept RPC error: ' + JSON.stringify({ code: e.code, message: e.message }) : (e.message || 'Error')); } } diff --git a/backend/src/api/explorer/channels.routes.ts b/backend/src/api/explorer/channels.routes.ts index 391bf628e..8b4c3e8c8 100644 --- a/backend/src/api/explorer/channels.routes.ts +++ b/backend/src/api/explorer/channels.routes.ts @@ -1,6 +1,7 @@ import config from '../../config'; import { Application, Request, Response } from 'express'; import channelsApi from './channels.api'; +import { handleError } from '../../utils/api'; class ChannelsRoutes { constructor() { } @@ -22,7 +23,7 @@ class ChannelsRoutes { const channels = await channelsApi.$searchChannelsById(req.params.search); res.json(channels); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -38,7 +39,7 @@ class ChannelsRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString()); res.json(channel); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -53,11 +54,11 @@ class ChannelsRoutes { const status: string = typeof req.query.status === 'string' ? req.query.status : ''; if (index < -1) { - res.status(400).send('Invalid index'); + handleError(req, res, 400, 'Invalid index'); return; } if (['open', 'active', 'closed'].includes(status) === false) { - res.status(400).send('Invalid status'); + handleError(req, res, 400, 'Invalid status'); return; } @@ -69,14 +70,14 @@ class ChannelsRoutes { res.header('X-Total-Count', channelsCount.toString()); res.json(channels); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } private async $getChannelsByTransactionIds(req: Request, res: Response): Promise { try { if (!Array.isArray(req.query.txId)) { - res.status(400).send('Not an array'); + handleError(req, res, 400, 'Not an array'); return; } const txIds: string[] = []; @@ -107,7 +108,7 @@ class ChannelsRoutes { res.json(result); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -119,7 +120,7 @@ class ChannelsRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString()); res.json(channels); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -132,7 +133,7 @@ class ChannelsRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString()); res.json(channels); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } diff --git a/backend/src/api/explorer/general.routes.ts b/backend/src/api/explorer/general.routes.ts index 07620e84a..b4d0c635d 100644 --- a/backend/src/api/explorer/general.routes.ts +++ b/backend/src/api/explorer/general.routes.ts @@ -3,6 +3,8 @@ import { Application, Request, Response } from 'express'; import nodesApi from './nodes.api'; import channelsApi from './channels.api'; import statisticsApi from './statistics.api'; +import { handleError } from '../../utils/api'; + class GeneralLightningRoutes { constructor() { } @@ -27,7 +29,7 @@ class GeneralLightningRoutes { channels: channels, }); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -41,7 +43,7 @@ class GeneralLightningRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString()); res.json(statistics); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -50,7 +52,7 @@ class GeneralLightningRoutes { const statistics = await statisticsApi.$getLatestStatistics(); res.json(statistics); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } } diff --git a/backend/src/api/explorer/nodes.routes.ts b/backend/src/api/explorer/nodes.routes.ts index 9d6373845..9ca2fd1c3 100644 --- a/backend/src/api/explorer/nodes.routes.ts +++ b/backend/src/api/explorer/nodes.routes.ts @@ -3,6 +3,7 @@ import { Application, Request, Response } from 'express'; import nodesApi from './nodes.api'; import DB from '../../database'; import { INodesRanking } from '../../mempool.interfaces'; +import { handleError } from '../../utils/api'; class NodesRoutes { constructor() { } @@ -31,7 +32,7 @@ class NodesRoutes { const nodes = await nodesApi.$searchNodeByPublicKeyOrAlias(req.params.search); res.json(nodes); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -181,13 +182,13 @@ class NodesRoutes { } } catch (e) {} } - + res.header('Pragma', 'public'); res.header('Cache-control', 'public'); res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString()); res.json(nodes); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -195,7 +196,7 @@ class NodesRoutes { try { const node = await nodesApi.$getNode(req.params.public_key); if (!node) { - res.status(404).send('Node not found'); + handleError(req, res, 404, 'Node not found'); return; } res.header('Pragma', 'public'); @@ -203,7 +204,7 @@ class NodesRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString()); res.json(node); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -215,7 +216,7 @@ class NodesRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString()); res.json(statistics); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -223,7 +224,7 @@ class NodesRoutes { try { const node = await nodesApi.$getFeeHistogram(req.params.public_key); if (!node) { - res.status(404).send('Node not found'); + handleError(req, res, 404, 'Node not found'); return; } res.header('Pragma', 'public'); @@ -231,7 +232,7 @@ class NodesRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString()); res.json(node); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -247,7 +248,7 @@ class NodesRoutes { topByChannels: topChannelsNodes, }); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -259,7 +260,7 @@ class NodesRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString()); res.json(topCapacityNodes); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -271,7 +272,7 @@ class NodesRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString()); res.json(topCapacityNodes); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -283,7 +284,7 @@ class NodesRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString()); res.json(topCapacityNodes); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -295,7 +296,7 @@ class NodesRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 600).toUTCString()); res.json(nodesPerAs); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -307,7 +308,7 @@ class NodesRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 600).toUTCString()); res.json(worldNodes); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -322,7 +323,7 @@ class NodesRoutes { ); if (country.length === 0) { - res.status(404).send(`This country does not exist or does not host any lightning nodes on clearnet`); + handleError(req, res, 404, `This country does not exist or does not host any lightning nodes on clearnet`); return; } @@ -335,7 +336,7 @@ class NodesRoutes { nodes: nodes, }); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -349,7 +350,7 @@ class NodesRoutes { ); if (isp.length === 0) { - res.status(404).send(`This ISP does not exist or does not host any lightning nodes on clearnet`); + handleError(req, res, 404, `This ISP does not exist or does not host any lightning nodes on clearnet`); return; } @@ -362,7 +363,7 @@ class NodesRoutes { nodes: nodes, }); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -374,7 +375,7 @@ class NodesRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 600).toUTCString()); res.json(nodesPerAs); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } } diff --git a/backend/src/api/liquid/liquid.routes.ts b/backend/src/api/liquid/liquid.routes.ts index 9ea61ca31..9dafd0def 100644 --- a/backend/src/api/liquid/liquid.routes.ts +++ b/backend/src/api/liquid/liquid.routes.ts @@ -3,6 +3,7 @@ import { Application, Request, Response } from 'express'; import config from '../../config'; import elementsParser from './elements-parser'; import icons from './icons'; +import { handleError } from '../../utils/api'; class LiquidRoutes { public initRoutes(app: Application) { @@ -42,7 +43,7 @@ class LiquidRoutes { res.setHeader('content-length', result.length); res.send(result); } else { - res.status(404).send('Asset icon not found'); + handleError(req, res, 404, 'Asset icon not found'); } } @@ -51,7 +52,7 @@ class LiquidRoutes { if (result) { res.json(result); } else { - res.status(404).send('Asset icons not found'); + handleError(req, res, 404, 'Asset icons not found'); } } @@ -82,7 +83,7 @@ class LiquidRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 60 * 60).toUTCString()); res.json(pegs); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -94,7 +95,7 @@ class LiquidRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 60 * 60).toUTCString()); res.json(reserves); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -106,7 +107,7 @@ class LiquidRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 30).toUTCString()); res.json(currentSupply); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -118,7 +119,7 @@ class LiquidRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 30).toUTCString()); res.json(currentReserves); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -130,7 +131,7 @@ class LiquidRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 30).toUTCString()); res.json(auditStatus); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -142,7 +143,7 @@ class LiquidRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 30).toUTCString()); res.json(federationAddresses); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -154,7 +155,7 @@ class LiquidRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 30).toUTCString()); res.json(federationAddresses); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -166,7 +167,7 @@ class LiquidRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 30).toUTCString()); res.json(federationUtxos); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -178,7 +179,7 @@ class LiquidRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 30).toUTCString()); res.json(expiredUtxos); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -190,7 +191,7 @@ class LiquidRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 30).toUTCString()); res.json(federationUtxos); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -202,7 +203,7 @@ class LiquidRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 30).toUTCString()); res.json(emergencySpentUtxos); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -214,7 +215,7 @@ class LiquidRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 30).toUTCString()); res.json(emergencySpentUtxos); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -226,7 +227,7 @@ class LiquidRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 30).toUTCString()); res.json(recentPegs); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -238,7 +239,7 @@ class LiquidRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 30).toUTCString()); res.json(pegsVolume); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -250,7 +251,7 @@ class LiquidRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 30).toUTCString()); res.json(pegsCount); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } diff --git a/backend/src/api/mining/mining-routes.ts b/backend/src/api/mining/mining-routes.ts index 8f8bbac82..69e6d95d4 100644 --- a/backend/src/api/mining/mining-routes.ts +++ b/backend/src/api/mining/mining-routes.ts @@ -10,6 +10,7 @@ import mining from "./mining"; import PricesRepository from '../../repositories/PricesRepository'; import AccelerationRepository from '../../repositories/AccelerationRepository'; import accelerationApi from '../services/acceleration'; +import { handleError } from '../../utils/api'; class MiningRoutes { public initRoutes(app: Application) { @@ -53,12 +54,12 @@ class MiningRoutes { res.header('Cache-control', 'public'); res.setHeader('Expires', new Date(Date.now() + 1000 * 300).toUTCString()); if (['testnet', 'signet', 'liquidtestnet'].includes(config.MEMPOOL.NETWORK)) { - res.status(400).send('Prices are not available on testnets.'); + handleError(req, res, 400, 'Prices are not available on testnets.'); return; } const timestamp = parseInt(req.query.timestamp as string, 10) || 0; const currency = req.query.currency as string; - + let response; if (timestamp && currency) { response = await PricesRepository.$getNearestHistoricalPrice(timestamp, currency); @@ -71,7 +72,7 @@ class MiningRoutes { } res.status(200).send(response); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -84,9 +85,9 @@ class MiningRoutes { res.json(stats); } catch (e) { if (e instanceof Error && e.message.indexOf('This mining pool does not exist') > -1) { - res.status(404).send(e.message); + handleError(req, res, 404, e.message); } else { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } } @@ -103,9 +104,9 @@ class MiningRoutes { res.json(poolBlocks); } catch (e) { if (e instanceof Error && e.message.indexOf('This mining pool does not exist') > -1) { - res.status(404).send(e.message); + handleError(req, res, 404, e.message); } else { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } } @@ -129,7 +130,7 @@ class MiningRoutes { res.json(pools); } } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -143,7 +144,7 @@ class MiningRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString()); res.json(stats); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -157,7 +158,7 @@ class MiningRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 300).toUTCString()); res.json(hashrates); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -172,9 +173,9 @@ class MiningRoutes { res.json(hashrates); } catch (e) { if (e instanceof Error && e.message.indexOf('This mining pool does not exist') > -1) { - res.status(404).send(e.message); + handleError(req, res, 404, e.message); } else { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } } @@ -203,7 +204,7 @@ class MiningRoutes { currentDifficulty: currentDifficulty, }); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -217,7 +218,7 @@ class MiningRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString()); res.json(blockFees); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -235,7 +236,7 @@ class MiningRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString()); res.json(blockFees); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -249,7 +250,7 @@ class MiningRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString()); res.json(blockRewards); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -263,7 +264,7 @@ class MiningRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString()); res.json(blockFeeRates); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -281,7 +282,7 @@ class MiningRoutes { weights: blockWeights }); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -293,7 +294,7 @@ class MiningRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 300).toUTCString()); res.json(difficulty.map(adj => [adj.time, adj.height, adj.difficulty, adj.adjustment])); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -317,7 +318,7 @@ class MiningRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString()); res.json(blocksHealth.map(health => [health.time, health.height, health.match_rate])); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -326,7 +327,7 @@ class MiningRoutes { const audit = await BlocksAuditsRepository.$getBlockAudit(req.params.hash); if (!audit) { - res.status(204).send(`This block has not been audited.`); + handleError(req, res, 204, `This block has not been audited.`); return; } @@ -335,7 +336,7 @@ class MiningRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 3600 * 24).toUTCString()); res.json(audit); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -358,7 +359,7 @@ class MiningRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 300).toUTCString()); res.json(result); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -371,7 +372,7 @@ class MiningRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString()); res.json(await BlocksAuditsRepository.$getBlockAuditScores(height, height - 15)); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -384,7 +385,7 @@ class MiningRoutes { res.setHeader('Expires', new Date(Date.now() + 1000 * 3600 * 24).toUTCString()); res.json(audit || 'null'); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -394,12 +395,12 @@ class MiningRoutes { res.header('Cache-control', 'public'); res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString()); if (!config.MEMPOOL_SERVICES.ACCELERATIONS || ['testnet', 'signet', 'liquidtestnet', 'liquid'].includes(config.MEMPOOL.NETWORK)) { - res.status(400).send('Acceleration data is not available.'); + handleError(req, res, 400, 'Acceleration data is not available.'); return; } res.status(200).send(await AccelerationRepository.$getAccelerationInfo(req.params.slug)); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -409,13 +410,13 @@ class MiningRoutes { res.header('Cache-control', 'public'); res.setHeader('Expires', new Date(Date.now() + 1000 * 3600 * 24).toUTCString()); if (!config.MEMPOOL_SERVICES.ACCELERATIONS || ['testnet', 'signet', 'liquidtestnet', 'liquid'].includes(config.MEMPOOL.NETWORK)) { - res.status(400).send('Acceleration data is not available.'); + handleError(req, res, 400, 'Acceleration data is not available.'); return; } const height = req.params.height === undefined ? undefined : parseInt(req.params.height, 10); res.status(200).send(await AccelerationRepository.$getAccelerationInfo(null, height)); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -425,12 +426,12 @@ class MiningRoutes { res.header('Cache-control', 'public'); res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString()); if (!config.MEMPOOL_SERVICES.ACCELERATIONS || ['testnet', 'signet', 'liquidtestnet', 'liquid'].includes(config.MEMPOOL.NETWORK)) { - res.status(400).send('Acceleration data is not available.'); + handleError(req, res, 400, 'Acceleration data is not available.'); return; } res.status(200).send(await AccelerationRepository.$getAccelerationInfo(null, null, req.params.interval)); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -440,12 +441,12 @@ class MiningRoutes { res.header('Cache-control', 'public'); res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString()); if (!config.MEMPOOL_SERVICES.ACCELERATIONS || ['testnet', 'signet', 'liquidtestnet', 'liquid'].includes(config.MEMPOOL.NETWORK)) { - res.status(400).send('Acceleration data is not available.'); + handleError(req, res, 400, 'Acceleration data is not available.'); return; } res.status(200).send(await AccelerationRepository.$getAccelerationTotals(req.query.pool, req.query.interval)); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -455,12 +456,12 @@ class MiningRoutes { res.header('Cache-control', 'public'); res.setHeader('Expires', new Date(Date.now() + 1000 * 60).toUTCString()); if (!config.MEMPOOL_SERVICES.ACCELERATIONS || ['testnet', 'signet', 'liquidtestnet', 'liquid'].includes(config.MEMPOOL.NETWORK)) { - res.status(400).send('Acceleration data is not available.'); + handleError(req, res, 400, 'Acceleration data is not available.'); return; } res.status(200).send(accelerationApi.accelerations || []); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } @@ -472,7 +473,7 @@ class MiningRoutes { accelerationApi.accelerationRequested(req.params.txid); res.status(200).send(); } catch (e) { - res.status(500).send(e instanceof Error ? e.message : e); + handleError(req, res, 500, e instanceof Error ? e.message : e); } } } diff --git a/backend/src/utils/api.ts b/backend/src/utils/api.ts new file mode 100644 index 000000000..69d746b9f --- /dev/null +++ b/backend/src/utils/api.ts @@ -0,0 +1,9 @@ +import { Request, Response } from 'express'; + +export function handleError(req: Request, res: Response, statusCode: number, errorMessage: string | unknown): void { + if (req.accepts('json')) { + res.status(statusCode).json({ error: errorMessage }); + } else { + res.status(statusCode).send(errorMessage); + } +} \ No newline at end of file From 185eae00e9af812032b37852d4551c2b4ef6a04a Mon Sep 17 00:00:00 2001 From: Mononaut Date: Sun, 25 Aug 2024 22:38:00 +0000 Subject: [PATCH 009/147] Fix RBF tracking inconsistencies --- backend/src/api/rbf-cache.ts | 121 ++++++++++++++++++++++++----------- 1 file changed, 82 insertions(+), 39 deletions(-) diff --git a/backend/src/api/rbf-cache.ts b/backend/src/api/rbf-cache.ts index a087abbe0..f4b192d3a 100644 --- a/backend/src/api/rbf-cache.ts +++ b/backend/src/api/rbf-cache.ts @@ -44,6 +44,22 @@ interface CacheEvent { value?: any, } +/** + * Singleton for tracking RBF trees + * + * Maintains a set of RBF trees, where each tree represents a sequence of + * consecutive RBF replacements. + * + * Trees are identified by the txid of the root transaction. + * + * To maintain consistency, the following invariants must be upheld: + * - Symmetry: replacedBy(A) = B <=> A in replaces(B) + * - Unique id: treeMap(treeMap(X)) = treeMap(X) + * - Unique tree: A in replaces(B) => treeMap(A) == treeMap(B) + * - Existence: X in treeMap => treeMap(X) in rbfTrees + * - Completeness: X in replacedBy => X in treeMap, Y in replaces => Y in treeMap + */ + class RbfCache { private replacedBy: Map = new Map(); private replaces: Map = new Map(); @@ -61,6 +77,10 @@ class RbfCache { setInterval(this.cleanup.bind(this), 1000 * 60 * 10); } + /** + * Low level cache operations + */ + private addTx(txid: string, tx: MempoolTransactionExtended): void { this.txs.set(txid, tx); this.cacheQueue.push({ op: CacheOp.Add, type: 'tx', txid }); @@ -92,6 +112,12 @@ class RbfCache { this.cacheQueue.push({ op: CacheOp.Remove, type: 'exp', txid }); } + /** + * Basic data structure operations + * must uphold tree invariants + */ + + public add(replaced: MempoolTransactionExtended[], newTxExtended: MempoolTransactionExtended): void { if (!newTxExtended || !replaced?.length || this.txs.has(newTxExtended.txid)) { return; @@ -114,6 +140,10 @@ class RbfCache { if (!replacedTx.rbf) { txFullRbf = true; } + if (this.replacedBy.has(replacedTx.txid)) { + // should never happen + continue; + } this.replacedBy.set(replacedTx.txid, newTx.txid); if (this.treeMap.has(replacedTx.txid)) { const treeId = this.treeMap.get(replacedTx.txid); @@ -140,18 +170,47 @@ class RbfCache { } } newTx.fullRbf = txFullRbf; - const treeId = replacedTrees[0].tx.txid; const newTree = { tx: newTx, time: newTime, fullRbf: treeFullRbf, replaces: replacedTrees }; - this.addTree(treeId, newTree); - this.updateTreeMap(treeId, newTree); + this.addTree(newTree.tx.txid, newTree); + this.updateTreeMap(newTree.tx.txid, newTree); this.replaces.set(newTx.txid, replacedTrees.map(tree => tree.tx.txid)); } + public mined(txid): void { + if (!this.txs.has(txid)) { + return; + } + const treeId = this.treeMap.get(txid); + if (treeId && this.rbfTrees.has(treeId)) { + const tree = this.rbfTrees.get(treeId); + if (tree) { + this.setTreeMined(tree, txid); + tree.mined = true; + this.dirtyTrees.add(treeId); + this.cacheQueue.push({ op: CacheOp.Change, type: 'tree', txid: treeId }); + } + } + this.evict(txid); + } + + // flag a transaction as removed from the mempool + public evict(txid: string, fast: boolean = false): void { + this.evictionCount++; + if (this.txs.has(txid) && (fast || !this.expiring.has(txid))) { + const expiryTime = fast ? Date.now() + (1000 * 60 * 10) : Date.now() + (1000 * 86400); // 24 hours + this.addExpiration(txid, expiryTime); + } + } + + /** + * Read-only public interface + */ + public has(txId: string): boolean { return this.txs.has(txId); } @@ -232,32 +291,6 @@ class RbfCache { return changes; } - public mined(txid): void { - if (!this.txs.has(txid)) { - return; - } - const treeId = this.treeMap.get(txid); - if (treeId && this.rbfTrees.has(treeId)) { - const tree = this.rbfTrees.get(treeId); - if (tree) { - this.setTreeMined(tree, txid); - tree.mined = true; - this.dirtyTrees.add(treeId); - this.cacheQueue.push({ op: CacheOp.Change, type: 'tree', txid: treeId }); - } - } - this.evict(txid); - } - - // flag a transaction as removed from the mempool - public evict(txid: string, fast: boolean = false): void { - this.evictionCount++; - if (this.txs.has(txid) && (fast || !this.expiring.has(txid))) { - const expiryTime = fast ? Date.now() + (1000 * 60 * 10) : Date.now() + (1000 * 86400); // 24 hours - this.addExpiration(txid, expiryTime); - } - } - // is the transaction involved in a full rbf replacement? public isFullRbf(txid: string): boolean { const treeId = this.treeMap.get(txid); @@ -271,6 +304,10 @@ class RbfCache { return tree?.fullRbf; } + /** + * Cache maintenance & utility functions + */ + private cleanup(): void { const now = Date.now(); for (const txid of this.expiring.keys()) { @@ -299,10 +336,6 @@ class RbfCache { for (const tx of (replaces || [])) { // recursively remove prior versions from the cache this.replacedBy.delete(tx); - // if this is the id of a tree, remove that too - if (this.treeMap.get(tx) === tx) { - this.removeTree(tx); - } this.remove(tx); } } @@ -376,8 +409,15 @@ class RbfCache { this.txs.set(txEntry.value.txid, txEntry.value); }); this.staleCount = 0; - for (const deflatedTree of trees) { - await this.importTree(mempool, deflatedTree.root, deflatedTree.root, deflatedTree, this.txs); + for (const deflatedTree of trees.sort((a, b) => Object.keys(b).length - Object.keys(a).length)) { + const tree = await this.importTree(mempool, deflatedTree.root, deflatedTree.root, deflatedTree, this.txs); + if (tree) { + this.addTree(tree.tx.txid, tree); + this.updateTreeMap(tree.tx.txid, tree); + if (tree.mined) { + this.evict(tree.tx.txid); + } + } } expiring.forEach(expiringEntry => { if (this.txs.has(expiringEntry.key)) { @@ -426,6 +466,12 @@ class RbfCache { return; } + // if this tx is already in the cache, return early + if (this.treeMap.has(txid)) { + this.removeTree(deflated.key); + return; + } + // recursively reconstruct child trees for (const childId of treeInfo.replaces) { const replaced = await this.importTree(mempool, root, childId, deflated, txs, mined); @@ -457,10 +503,6 @@ class RbfCache { fullRbf: treeInfo.fullRbf, replaces, }; - this.treeMap.set(txid, root); - if (root === txid) { - this.addTree(root, tree); - } return tree; } @@ -511,6 +553,7 @@ class RbfCache { processTxs(txs); } + // evict missing transactions for (const txid of txids) { if (!found[txid]) { this.evict(txid, false); From e362003746e237adbfc2681695b956f05ece80ef Mon Sep 17 00:00:00 2001 From: Mononaut Date: Mon, 26 Aug 2024 21:51:49 +0000 Subject: [PATCH 010/147] Catch RBF replacements across mempool update boundaries --- backend/src/api/common.ts | 16 +++++++------- backend/src/api/mempool.ts | 31 ++++++++++++---------------- backend/src/api/websocket-handler.ts | 19 +++++++++++++---- 3 files changed, 36 insertions(+), 30 deletions(-) diff --git a/backend/src/api/common.ts b/backend/src/api/common.ts index 13fc86147..f3d3e43b5 100644 --- a/backend/src/api/common.ts +++ b/backend/src/api/common.ts @@ -80,8 +80,8 @@ export class Common { return arr; } - static findRbfTransactions(added: MempoolTransactionExtended[], deleted: MempoolTransactionExtended[], forceScalable = false): { [txid: string]: MempoolTransactionExtended[] } { - const matches: { [txid: string]: MempoolTransactionExtended[] } = {}; + static findRbfTransactions(added: MempoolTransactionExtended[], deleted: MempoolTransactionExtended[], forceScalable = false): { [txid: string]: { replaced: MempoolTransactionExtended[], replacedBy: TransactionExtended }} { + const matches: { [txid: string]: { replaced: MempoolTransactionExtended[], replacedBy: TransactionExtended }} = {}; // For small N, a naive nested loop is extremely fast, but it doesn't scale if (added.length < 1000 && deleted.length < 50 && !forceScalable) { @@ -96,7 +96,7 @@ export class Common { addedTx.vin.some((vin) => vin.txid === deletedVin.txid && vin.vout === deletedVin.vout)); }); if (foundMatches?.length) { - matches[addedTx.txid] = [...new Set(foundMatches)]; + matches[addedTx.txid] = { replaced: [...new Set(foundMatches)], replacedBy: addedTx }; } }); } else { @@ -124,7 +124,7 @@ export class Common { foundMatches.add(deletedTx); } if (foundMatches.size) { - matches[addedTx.txid] = [...foundMatches]; + matches[addedTx.txid] = { replaced: [...foundMatches], replacedBy: addedTx }; } } } @@ -139,17 +139,17 @@ export class Common { const replaced: Set = new Set(); for (let i = 0; i < tx.vin.length; i++) { const vin = tx.vin[i]; - const match = spendMap.get(`${vin.txid}:${vin.vout}`); + const key = `${vin.txid}:${vin.vout}`; + const match = spendMap.get(key); if (match && match.txid !== tx.txid) { replaced.add(match); // remove this tx from the spendMap // prevents the same tx being replaced more than once for (const replacedVin of match.vin) { - const key = `${replacedVin.txid}:${replacedVin.vout}`; - spendMap.delete(key); + const replacedKey = `${replacedVin.txid}:${replacedVin.vout}`; + spendMap.delete(replacedKey); } } - const key = `${vin.txid}:${vin.vout}`; spendMap.delete(key); } if (replaced.size) { diff --git a/backend/src/api/mempool.ts b/backend/src/api/mempool.ts index 1f55179fb..1442b05fa 100644 --- a/backend/src/api/mempool.ts +++ b/backend/src/api/mempool.ts @@ -19,12 +19,13 @@ class Mempool { private mempoolCache: { [txId: string]: MempoolTransactionExtended } = {}; private mempoolCandidates: { [txid: string ]: boolean } = {}; private spendMap = new Map(); + private recentlyDeleted: MempoolTransactionExtended[][] = []; // buffer of transactions deleted in recent mempool updates private mempoolInfo: IBitcoinApi.MempoolInfo = { loaded: false, size: 0, bytes: 0, usage: 0, total_fee: 0, maxmempool: 300000000, mempoolminfee: Common.isLiquid() ? 0.00000100 : 0.00001000, minrelaytxfee: Common.isLiquid() ? 0.00000100 : 0.00001000 }; private mempoolChangedCallback: ((newMempool: {[txId: string]: MempoolTransactionExtended; }, newTransactions: MempoolTransactionExtended[], - deletedTransactions: MempoolTransactionExtended[], accelerationDelta: string[]) => void) | undefined; + deletedTransactions: MempoolTransactionExtended[][], accelerationDelta: string[]) => void) | undefined; private $asyncMempoolChangedCallback: ((newMempool: {[txId: string]: MempoolTransactionExtended; }, mempoolSize: number, newTransactions: MempoolTransactionExtended[], - deletedTransactions: MempoolTransactionExtended[], accelerationDelta: string[], candidates?: GbtCandidates) => Promise) | undefined; + deletedTransactions: MempoolTransactionExtended[][], accelerationDelta: string[], candidates?: GbtCandidates) => Promise) | undefined; private accelerations: { [txId: string]: Acceleration } = {}; private accelerationPositions: { [txid: string]: { poolId: number, pool: string, block: number, vsize: number }[] } = {}; @@ -74,12 +75,12 @@ class Mempool { } public setMempoolChangedCallback(fn: (newMempool: { [txId: string]: MempoolTransactionExtended; }, - newTransactions: MempoolTransactionExtended[], deletedTransactions: MempoolTransactionExtended[], accelerationDelta: string[]) => void): void { + newTransactions: MempoolTransactionExtended[], deletedTransactions: MempoolTransactionExtended[][], accelerationDelta: string[]) => void): void { this.mempoolChangedCallback = fn; } public setAsyncMempoolChangedCallback(fn: (newMempool: { [txId: string]: MempoolTransactionExtended; }, mempoolSize: number, - newTransactions: MempoolTransactionExtended[], deletedTransactions: MempoolTransactionExtended[], accelerationDelta: string[], + newTransactions: MempoolTransactionExtended[], deletedTransactions: MempoolTransactionExtended[][], accelerationDelta: string[], candidates?: GbtCandidates) => Promise): void { this.$asyncMempoolChangedCallback = fn; } @@ -362,12 +363,15 @@ class Mempool { const candidatesChanged = candidates?.added?.length || candidates?.removed?.length; - if (this.mempoolChangedCallback && (hasChange || deletedTransactions.length)) { - this.mempoolChangedCallback(this.mempoolCache, newTransactions, deletedTransactions, accelerationDelta); + this.recentlyDeleted.unshift(deletedTransactions); + this.recentlyDeleted.length = Math.min(this.recentlyDeleted.length, 10); // truncate to the last 10 mempool updates + + if (this.mempoolChangedCallback && (hasChange || newTransactions.length || deletedTransactions.length)) { + this.mempoolChangedCallback(this.mempoolCache, newTransactions, this.recentlyDeleted, accelerationDelta); } - if (this.$asyncMempoolChangedCallback && (hasChange || deletedTransactions.length || candidatesChanged)) { + if (this.$asyncMempoolChangedCallback && (hasChange || newTransactions.length || deletedTransactions.length || candidatesChanged)) { this.updateTimerProgress(timer, 'running async mempool callback'); - await this.$asyncMempoolChangedCallback(this.mempoolCache, newMempoolSize, newTransactions, deletedTransactions, accelerationDelta, candidates); + await this.$asyncMempoolChangedCallback(this.mempoolCache, newMempoolSize, newTransactions, this.recentlyDeleted, accelerationDelta, candidates); this.updateTimerProgress(timer, 'completed async mempool callback'); } @@ -541,16 +545,7 @@ class Mempool { } } - public handleRbfTransactions(rbfTransactions: { [txid: string]: MempoolTransactionExtended[]; }): void { - for (const rbfTransaction in rbfTransactions) { - if (this.mempoolCache[rbfTransaction] && rbfTransactions[rbfTransaction]?.length) { - // Store replaced transactions - rbfCache.add(rbfTransactions[rbfTransaction], this.mempoolCache[rbfTransaction]); - } - } - } - - public handleMinedRbfTransactions(rbfTransactions: { [txid: string]: { replaced: MempoolTransactionExtended[], replacedBy: TransactionExtended }}): void { + public handleRbfTransactions(rbfTransactions: { [txid: string]: { replaced: MempoolTransactionExtended[], replacedBy: TransactionExtended }}): void { for (const rbfTransaction in rbfTransactions) { if (rbfTransactions[rbfTransaction].replacedBy && rbfTransactions[rbfTransaction]?.replaced?.length) { // Store replaced transactions diff --git a/backend/src/api/websocket-handler.ts b/backend/src/api/websocket-handler.ts index 79a783f88..2a047472e 100644 --- a/backend/src/api/websocket-handler.ts +++ b/backend/src/api/websocket-handler.ts @@ -520,8 +520,17 @@ class WebsocketHandler { } } + /** + * + * @param newMempool + * @param mempoolSize + * @param newTransactions array of transactions added this mempool update. + * @param recentlyDeletedTransactions array of arrays of transactions removed in the last N mempool updates, most recent first. + * @param accelerationDelta + * @param candidates + */ async $handleMempoolChange(newMempool: { [txid: string]: MempoolTransactionExtended }, mempoolSize: number, - newTransactions: MempoolTransactionExtended[], deletedTransactions: MempoolTransactionExtended[], accelerationDelta: string[], + newTransactions: MempoolTransactionExtended[], recentlyDeletedTransactions: MempoolTransactionExtended[][], accelerationDelta: string[], candidates?: GbtCandidates): Promise { if (!this.webSocketServers.length) { throw new Error('No WebSocket.Server have been set'); @@ -529,6 +538,8 @@ class WebsocketHandler { this.printLogs(); + const deletedTransactions = recentlyDeletedTransactions.length ? recentlyDeletedTransactions[0] : []; + const transactionIds = (memPool.limitGBT && candidates) ? Object.keys(candidates?.txs || {}) : Object.keys(newMempool); let added = newTransactions; let removed = deletedTransactions; @@ -547,7 +558,7 @@ class WebsocketHandler { const mBlockDeltas = mempoolBlocks.getMempoolBlockDeltas(); const mempoolInfo = memPool.getMempoolInfo(); const vBytesPerSecond = memPool.getVBytesPerSecond(); - const rbfTransactions = Common.findRbfTransactions(newTransactions, deletedTransactions); + const rbfTransactions = Common.findRbfTransactions(newTransactions, recentlyDeletedTransactions.flat()); const da = difficultyAdjustment.getDifficultyAdjustment(); const accelerations = memPool.getAccelerations(); memPool.handleRbfTransactions(rbfTransactions); @@ -578,7 +589,7 @@ class WebsocketHandler { const replacedTransactions: { replaced: string, by: TransactionExtended }[] = []; for (const tx of newTransactions) { if (rbfTransactions[tx.txid]) { - for (const replaced of rbfTransactions[tx.txid]) { + for (const replaced of rbfTransactions[tx.txid].replaced) { replacedTransactions.push({ replaced: replaced.txid, by: tx }); } } @@ -947,7 +958,7 @@ class WebsocketHandler { await accelerationRepository.$indexAccelerationsForBlock(block, accelerations, structuredClone(transactions)); const rbfTransactions = Common.findMinedRbfTransactions(transactions, memPool.getSpendMap()); - memPool.handleMinedRbfTransactions(rbfTransactions); + memPool.handleRbfTransactions(rbfTransactions); memPool.removeFromSpendMap(transactions); if (config.MEMPOOL.AUDIT && memPool.isInSync()) { From ee53597fe9805ce8c5de3b6e17deac7b3159cb30 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Mon, 26 Aug 2024 23:22:39 +0000 Subject: [PATCH 011/147] Resume RBF trees after restart --- backend/src/api/disk-cache.ts | 1 + backend/src/api/rbf-cache.ts | 27 ++++++++++++++++++++++++++- backend/src/api/redis-cache.ts | 1 + 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/backend/src/api/disk-cache.ts b/backend/src/api/disk-cache.ts index 202f8f4cb..f2a1f2390 100644 --- a/backend/src/api/disk-cache.ts +++ b/backend/src/api/disk-cache.ts @@ -257,6 +257,7 @@ class DiskCache { trees: rbfData.rbf.trees, expiring: rbfData.rbf.expiring.map(([txid, value]) => ({ key: txid, value })), mempool: memPool.getMempool(), + spendMap: memPool.getSpendMap(), }); } } catch (e) { diff --git a/backend/src/api/rbf-cache.ts b/backend/src/api/rbf-cache.ts index f4b192d3a..944ad790e 100644 --- a/backend/src/api/rbf-cache.ts +++ b/backend/src/api/rbf-cache.ts @@ -403,7 +403,7 @@ class RbfCache { }; } - public async load({ txs, trees, expiring, mempool }): Promise { + public async load({ txs, trees, expiring, mempool, spendMap }): Promise { try { txs.forEach(txEntry => { this.txs.set(txEntry.value.txid, txEntry.value); @@ -425,6 +425,31 @@ class RbfCache { } }); this.staleCount = 0; + + // connect cached trees to current mempool transactions + const conflicts: Record }> = {}; + for (const tree of this.rbfTrees.values()) { + const tx = this.getTx(tree.tx.txid); + if (!tx || tree.mined) { + continue; + } + for (const vin of tx.vin) { + const conflict = spendMap.get(`${vin.txid}:${vin.vout}`); + if (conflict && conflict.txid !== tx.txid) { + if (!conflicts[conflict.txid]) { + conflicts[conflict.txid] = { + replacedBy: conflict, + replaces: new Set(), + }; + } + conflicts[conflict.txid].replaces.add(tx); + } + } + } + for (const { replacedBy, replaces } of Object.values(conflicts)) { + this.add([...replaces.values()], replacedBy); + } + await this.checkTrees(); logger.debug(`loaded ${txs.length} txs, ${trees.length} trees into rbf cache, ${expiring.length} due to expire, ${this.staleCount} were stale`); this.cleanup(); diff --git a/backend/src/api/redis-cache.ts b/backend/src/api/redis-cache.ts index cbfa2f18b..1caade15b 100644 --- a/backend/src/api/redis-cache.ts +++ b/backend/src/api/redis-cache.ts @@ -365,6 +365,7 @@ class RedisCache { trees: rbfTrees.map(loadedTree => { loadedTree.value.key = loadedTree.key; return loadedTree.value; }), expiring: rbfExpirations, mempool: memPool.getMempool(), + spendMap: memPool.getSpendMap(), }); } From 9e05060af4de8411536fccc41098c69ae3775155 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Tue, 27 Aug 2024 00:17:17 +0000 Subject: [PATCH 012/147] fix tests --- backend/src/__tests__/api/common.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/backend/src/__tests__/api/common.ts b/backend/src/__tests__/api/common.ts index 74a7db88f..14ae3c78b 100644 --- a/backend/src/__tests__/api/common.ts +++ b/backend/src/__tests__/api/common.ts @@ -1,5 +1,5 @@ import { Common } from '../../api/common'; -import { MempoolTransactionExtended } from '../../mempool.interfaces'; +import { MempoolTransactionExtended, TransactionExtended } from '../../mempool.interfaces'; const randomTransactions = require('./test-data/transactions-random.json'); const replacedTransactions = require('./test-data/transactions-replaced.json'); @@ -10,14 +10,14 @@ describe('Common', () => { describe('RBF', () => { const newTransactions = rbfTransactions.concat(randomTransactions); test('should detect RBF transactions with fast method', () => { - const result: { [txid: string]: MempoolTransactionExtended[] } = Common.findRbfTransactions(newTransactions, replacedTransactions); + const result: { [txid: string]: { replaced: MempoolTransactionExtended[], replacedBy: TransactionExtended }} = Common.findRbfTransactions(newTransactions, replacedTransactions); expect(Object.values(result).length).toEqual(2); expect(result).toHaveProperty('7219d95161f3718335991ac6d967d24eedec370908c9879bb1e192e6d797d0a6'); expect(result).toHaveProperty('5387881d695d4564d397026dc5f740f816f8390b4b2c5ec8c20309122712a875'); }); test('should detect RBF transactions with scalable method', () => { - const result: { [txid: string]: MempoolTransactionExtended[] } = Common.findRbfTransactions(newTransactions, replacedTransactions, true); + const result: { [txid: string]: { replaced: MempoolTransactionExtended[], replacedBy: TransactionExtended }} = Common.findRbfTransactions(newTransactions, replacedTransactions, true); expect(Object.values(result).length).toEqual(2); expect(result).toHaveProperty('7219d95161f3718335991ac6d967d24eedec370908c9879bb1e192e6d797d0a6'); expect(result).toHaveProperty('5387881d695d4564d397026dc5f740f816f8390b4b2c5ec8c20309122712a875'); From a3e61525fe76af94494be02f6a4c24e565aac2eb Mon Sep 17 00:00:00 2001 From: natsoni Date: Tue, 27 Aug 2024 11:42:13 +0200 Subject: [PATCH 013/147] Reset acceleration flow state when leaving transaction --- frontend/src/app/components/transaction/transaction.component.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/src/app/components/transaction/transaction.component.ts b/frontend/src/app/components/transaction/transaction.component.ts index 8c0d3b4a9..6ff85c5bd 100644 --- a/frontend/src/app/components/transaction/transaction.component.ts +++ b/frontend/src/app/components/transaction/transaction.component.ts @@ -966,6 +966,7 @@ export class TransactionComponent implements OnInit, AfterViewInit, OnDestroy { this.filters = []; this.showCpfpDetails = false; this.showAccelerationDetails = false; + this.accelerationFlowCompleted = false; this.accelerationInfo = null; this.cashappEligible = false; this.txInBlockIndex = null; From 624b3473fc39ba34a1f13f82579379ee39e553d7 Mon Sep 17 00:00:00 2001 From: natsoni Date: Tue, 27 Aug 2024 11:29:29 +0200 Subject: [PATCH 014/147] Hide accelerator panel if tx gets accelerated on another session --- .../accelerate-checkout/accelerate-checkout.component.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts b/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts index 6b1eadf7d..0bb37f15e 100644 --- a/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts +++ b/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts @@ -196,9 +196,11 @@ export class AccelerateCheckout implements OnInit, OnDestroy { if (changes.scrollEvent && this.scrollEvent) { this.scrollToElement('acceleratePreviewAnchor', 'start'); } - if (changes.accelerating) { - if ((this.step === 'processing' || this.step === 'paid') && this.accelerating) { + if (changes.accelerating && this.accelerating) { + if (this.step === 'processing' || this.step === 'paid') { this.moveToStep('success'); + } else { // Edge case where the transaction gets accelerated by someone else or on another session + this.closeModal(); } } } From 555425d97eba920c39091c49e90f5223c8d9b20a Mon Sep 17 00:00:00 2001 From: natsoni Date: Tue, 27 Aug 2024 14:49:54 +0200 Subject: [PATCH 015/147] Handle city-states in geolocation component --- .../shared/components/geolocation/geolocation.component.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/frontend/src/app/shared/components/geolocation/geolocation.component.ts b/frontend/src/app/shared/components/geolocation/geolocation.component.ts index 1a498a1b2..85e4b6e53 100644 --- a/frontend/src/app/shared/components/geolocation/geolocation.component.ts +++ b/frontend/src/app/shared/components/geolocation/geolocation.component.ts @@ -70,6 +70,12 @@ export class GeolocationComponent implements OnChanges { if (this.type === 'node') { const city = this.data.city ? this.data.city : ''; + // Handle city-states like Singapore or Hong Kong + if (city && city === this.data?.country) { + this.formattedLocation = `${this.data.country} ${getFlagEmoji(this.data.iso)}`; + return; + } + // City this.formattedLocation = `${city}`; From 98d98b2478320d1e868a1f5df7cf4243b7a675b8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 28 Aug 2024 05:01:52 +0000 Subject: [PATCH 016/147] Bump micromatch from 4.0.4 to 4.0.8 in /frontend Bumps [micromatch](https://github.com/micromatch/micromatch) from 4.0.4 to 4.0.8. - [Release notes](https://github.com/micromatch/micromatch/releases) - [Changelog](https://github.com/micromatch/micromatch/blob/4.0.8/CHANGELOG.md) - [Commits](https://github.com/micromatch/micromatch/compare/4.0.4...4.0.8) --- updated-dependencies: - dependency-name: micromatch dependency-type: indirect ... Signed-off-by: dependabot[bot] --- frontend/package-lock.json | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index c17e706af..16400db7c 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -32,7 +32,6 @@ "bootstrap": "~4.6.2", "browserify": "^17.0.0", "clipboard": "^2.0.11", - "cypress": "^13.14.0", "domino": "^2.1.6", "echarts": "~5.5.0", "esbuild": "^0.23.0", @@ -12694,12 +12693,12 @@ } }, "node_modules/micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" + "braces": "^3.0.3", + "picomatch": "^2.3.1" }, "engines": { "node": ">=8.6" @@ -27622,12 +27621,12 @@ "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" }, "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" + "braces": "^3.0.3", + "picomatch": "^2.3.1" } }, "miller-rabin": { From b526ee0877f3a9c9ff4fef9ed6414221e424185c Mon Sep 17 00:00:00 2001 From: Mononaut Date: Wed, 28 Aug 2024 14:38:12 +0000 Subject: [PATCH 017/147] Handle paginated acceleration results --- .../block/block-preview.component.ts | 2 +- .../app/components/block/block.component.ts | 2 +- .../components/tracker/tracker.component.ts | 2 +- .../transaction/transaction.component.ts | 2 +- .../src/app/services/services-api.service.ts | 25 ++++++++++++++++++- 5 files changed, 28 insertions(+), 5 deletions(-) diff --git a/frontend/src/app/components/block/block-preview.component.ts b/frontend/src/app/components/block/block-preview.component.ts index 72da96818..572f91a38 100644 --- a/frontend/src/app/components/block/block-preview.component.ts +++ b/frontend/src/app/components/block/block-preview.component.ts @@ -137,7 +137,7 @@ export class BlockPreviewComponent implements OnInit, OnDestroy { }) ), this.stateService.env.ACCELERATOR === true && block.height > 819500 - ? this.servicesApiService.getAccelerationHistory$({ blockHeight: block.height }) + ? this.servicesApiService.getAllAccelerationHistory$({ blockHeight: block.height }) .pipe(catchError(() => { return of([]); })) diff --git a/frontend/src/app/components/block/block.component.ts b/frontend/src/app/components/block/block.component.ts index 5cba85e90..9da74cb62 100644 --- a/frontend/src/app/components/block/block.component.ts +++ b/frontend/src/app/components/block/block.component.ts @@ -319,7 +319,7 @@ export class BlockComponent implements OnInit, OnDestroy { this.accelerationsSubscription = this.block$.pipe( switchMap((block) => { return this.stateService.env.ACCELERATOR === true && block.height > 819500 - ? this.servicesApiService.getAccelerationHistory$({ blockHeight: block.height }) + ? this.servicesApiService.getAllAccelerationHistory$({ blockHeight: block.height }) .pipe(catchError(() => { return of([]); })) diff --git a/frontend/src/app/components/tracker/tracker.component.ts b/frontend/src/app/components/tracker/tracker.component.ts index 24b5fc1dc..42156d2a9 100644 --- a/frontend/src/app/components/tracker/tracker.component.ts +++ b/frontend/src/app/components/tracker/tracker.component.ts @@ -286,7 +286,7 @@ export class TrackerComponent implements OnInit, OnDestroy { this.accelerationInfo = null; }), switchMap((blockHash: string) => { - return this.servicesApiService.getAccelerationHistory$({ blockHash }); + return this.servicesApiService.getAllAccelerationHistory$({ blockHash }, null, this.txId); }), catchError(() => { return of(null); diff --git a/frontend/src/app/components/transaction/transaction.component.ts b/frontend/src/app/components/transaction/transaction.component.ts index 8c0d3b4a9..09e0d2874 100644 --- a/frontend/src/app/components/transaction/transaction.component.ts +++ b/frontend/src/app/components/transaction/transaction.component.ts @@ -343,7 +343,7 @@ export class TransactionComponent implements OnInit, AfterViewInit, OnDestroy { this.setIsAccelerated(); }), switchMap((blockHeight: number) => { - return this.servicesApiService.getAccelerationHistory$({ blockHeight }).pipe( + return this.servicesApiService.getAllAccelerationHistory$({ blockHeight }, null, this.txId).pipe( switchMap((accelerationHistory: Acceleration[]) => { if (this.tx.acceleration && !accelerationHistory.length) { // If the just mined transaction was accelerated, but services backend did not return any acceleration data, retry return throwError('retry'); diff --git a/frontend/src/app/services/services-api.service.ts b/frontend/src/app/services/services-api.service.ts index 1366342f7..5213e131c 100644 --- a/frontend/src/app/services/services-api.service.ts +++ b/frontend/src/app/services/services-api.service.ts @@ -4,7 +4,7 @@ import { HttpClient } from '@angular/common/http'; import { StateService } from './state.service'; import { StorageService } from './storage.service'; import { MenuGroup } from '../interfaces/services.interface'; -import { Observable, of, ReplaySubject, tap, catchError, share, filter, switchMap } from 'rxjs'; +import { Observable, of, ReplaySubject, tap, catchError, share, filter, switchMap, map } from 'rxjs'; import { IBackendInfo } from '../interfaces/websocket.interface'; import { Acceleration, AccelerationHistoryParams } from '../interfaces/node-api.interface'; import { AccelerationStats } from '../components/acceleration/acceleration-stats/acceleration-stats.component'; @@ -160,6 +160,29 @@ export class ServicesApiServices { return this.httpClient.get(`${this.stateService.env.SERVICES_API}/accelerator/accelerations/history`, { params: { ...params } }); } + getAllAccelerationHistory$(params: AccelerationHistoryParams, limit?: number, findTxid?: string): Observable { + const getPage$ = (page: number, accelerations: Acceleration[] = []): Observable<{ page: number, total: number, accelerations: Acceleration[] }> => { + return this.getAccelerationHistoryObserveResponse$({...params, page}).pipe( + map((response) => ({ + page, + total: parseInt(response.headers.get('X-Total-Count'), 10), + accelerations: accelerations.concat(response.body || []), + })), + switchMap(({page, total, accelerations}) => { + if (accelerations.length >= Math.min(total, limit ?? Infinity) || (findTxid && accelerations.find((acc) => acc.txid === findTxid))) { + return of({ page, total, accelerations }); + } else { + return getPage$(page + 1, accelerations); + } + }), + ); + }; + + return getPage$(1).pipe( + map(({ accelerations }) => accelerations), + ); + } + getAccelerationHistoryObserveResponse$(params: AccelerationHistoryParams): Observable { return this.httpClient.get(`${this.stateService.env.SERVICES_API}/accelerator/accelerations/history`, { params: { ...params }, observe: 'response'}); } From 0a5a2c3c7e40c46c2d2ddead1144c48d7c718038 Mon Sep 17 00:00:00 2001 From: natsoni Date: Wed, 28 Aug 2024 16:50:00 +0200 Subject: [PATCH 018/147] Remove difficulty epoch block offset --- .../difficulty-mining/difficulty-mining.component.ts | 2 +- .../src/app/components/difficulty/difficulty.component.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/frontend/src/app/components/difficulty-mining/difficulty-mining.component.ts b/frontend/src/app/components/difficulty-mining/difficulty-mining.component.ts index 90b41d749..e19f510b5 100644 --- a/frontend/src/app/components/difficulty-mining/difficulty-mining.component.ts +++ b/frontend/src/app/components/difficulty-mining/difficulty-mining.component.ts @@ -77,7 +77,7 @@ export class DifficultyMiningComponent implements OnInit { base: `${da.progressPercent.toFixed(2)}%`, change: da.difficultyChange, progress: da.progressPercent, - remainingBlocks: da.remainingBlocks - 1, + remainingBlocks: da.remainingBlocks, colorAdjustments, colorPreviousAdjustments, newDifficultyHeight: da.nextRetargetHeight, diff --git a/frontend/src/app/components/difficulty/difficulty.component.ts b/frontend/src/app/components/difficulty/difficulty.component.ts index 579b49fc3..6a99aecef 100644 --- a/frontend/src/app/components/difficulty/difficulty.component.ts +++ b/frontend/src/app/components/difficulty/difficulty.component.ts @@ -153,8 +153,8 @@ export class DifficultyComponent implements OnInit { base: `${da.progressPercent.toFixed(2)}%`, change: da.difficultyChange, progress: da.progressPercent, - minedBlocks: this.currentIndex + 1, - remainingBlocks: da.remainingBlocks - 1, + minedBlocks: this.currentIndex, + remainingBlocks: da.remainingBlocks, expectedBlocks: Math.floor(da.expectedBlocks), colorAdjustments, colorPreviousAdjustments, From 0f1def58226038d8047fac2eb3e9fa530700df0a Mon Sep 17 00:00:00 2001 From: nymkappa <9780671+nymkappa@users.noreply.github.com> Date: Thu, 29 Aug 2024 20:53:40 +0200 Subject: [PATCH 019/147] [accelerator] make bid boost graph bar min height taller --- .../acceleration-fees-graph.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts b/frontend/src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts index d78b663a4..68a2bdd52 100644 --- a/frontend/src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts +++ b/frontend/src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts @@ -264,7 +264,7 @@ export class AccelerationFeesGraphComponent implements OnInit, OnChanges, OnDest type: 'bar', barWidth: '90%', large: true, - barMinHeight: 1, + barMinHeight: 3, }, ], dataZoom: (this.widget || data.length === 0 )? undefined : [{ From eab008c7075f4a806505c4dd0c0a8038cf58bfc0 Mon Sep 17 00:00:00 2001 From: natsoni Date: Mon, 26 Aug 2024 17:47:56 +0200 Subject: [PATCH 020/147] Ineligible transaction link to accelerator FAQ --- .../transaction/transaction.component.html | 28 +++++++++--------- .../transaction/transaction.component.scss | 29 ++++++------------- 2 files changed, 23 insertions(+), 34 deletions(-) diff --git a/frontend/src/app/components/transaction/transaction.component.html b/frontend/src/app/components/transaction/transaction.component.html index 715fca4c8..31fa9a6ac 100644 --- a/frontend/src/app/components/transaction/transaction.component.html +++ b/frontend/src/app/components/transaction/transaction.component.html @@ -551,23 +551,23 @@ ETA - @if (eta.blocks >= 7) { - - Not any time soon - @if (!tx?.acceleration && acceleratorAvailable && accelerateCtaType === 'button' && !showAccelerationSummary && eligibleForAcceleration) { - Accelerate - } - - } @else if (network === 'liquid' || network === 'liquidtestnet') { + @if (network === 'liquid' || network === 'liquidtestnet') { } @else { - - - @if (!tx?.acceleration && acceleratorAvailable && accelerateCtaType === 'button' && !showAccelerationSummary && eligibleForAcceleration) { - Accelerate + + @if (eta.blocks >= 7) { + Not any time soon + } @else { + + } + @if (!tx?.acceleration && acceleratorAvailable && accelerateCtaType === 'button' && !showAccelerationSummary) { + } - - } diff --git a/frontend/src/app/components/transaction/transaction.component.scss b/frontend/src/app/components/transaction/transaction.component.scss index 232a2cacb..1706dfcab 100644 --- a/frontend/src/app/components/transaction/transaction.component.scss +++ b/frontend/src/app/components/transaction/transaction.component.scss @@ -287,37 +287,21 @@ } .accelerate { - display: flex !important; - align-self: auto; - margin-left: auto; - background-color: var(--tertiary); - @media (max-width: 849px) { - margin-left: 5px; - } + @media (min-width: 850px) { + margin-left: auto; + } } .etaDeepMempool { - justify-content: flex-end; flex-wrap: wrap; - align-content: center; - @media (max-width: 995px) { - justify-content: left !important; - } @media (max-width: 849px) { justify-content: right !important; } } .accelerateDeepMempool { - align-self: auto; - margin-left: auto; background-color: var(--tertiary); - @media (max-width: 995px) { - margin-left: 0px; - } - @media (max-width: 849px) { - margin-left: 5px; - } + margin-left: 5px; } .goggles-icon { @@ -335,4 +319,9 @@ .oobFees { color: #905cf4; +} + +.disabled { + opacity: 0.5; + pointer-events: none; } \ No newline at end of file From dbe774cc64e5b523953fc7ead08c25f8822d2532 Mon Sep 17 00:00:00 2001 From: wiz Date: Mon, 9 Sep 2024 02:45:16 +0900 Subject: [PATCH 021/147] ops: Clear all mempool frontend configs on build env reset --- production/mempool-reset-all | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/production/mempool-reset-all b/production/mempool-reset-all index 22f004610..d7e8ba249 100755 --- a/production/mempool-reset-all +++ b/production/mempool-reset-all @@ -1,3 +1,5 @@ #!/usr/bin/env zsh -rm $HOME/*/backend/mempool-config.json -rm $HOME/*/frontend/mempool-frontend-config.json +rm -f $HOME/*/backend/mempool-config.json +rm -f $HOME/*/frontend/mempool-frontend-config.json +rm -f $HOME/*/frontend/projects/mempool/mempool-frontend-config.json +exit 0 From be17e45785503c024230d1c9228986780daf681d Mon Sep 17 00:00:00 2001 From: Mononaut Date: Sun, 8 Sep 2024 20:16:06 +0000 Subject: [PATCH 022/147] hotfix for axios breaking change to unix sockets --- backend/src/api/bitcoin/esplora-api.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/api/bitcoin/esplora-api.ts b/backend/src/api/bitcoin/esplora-api.ts index b4ae35da9..fc00bf2cc 100644 --- a/backend/src/api/bitcoin/esplora-api.ts +++ b/backend/src/api/bitcoin/esplora-api.ts @@ -89,7 +89,7 @@ class FailoverRouter { for (const host of this.hosts) { try { const result = await (host.socket - ? this.pollConnection.get('/blocks/tip/height', { socketPath: host.host, timeout: config.ESPLORA.FALLBACK_TIMEOUT }) + ? this.pollConnection.get('http://localhost/blocks/tip/height', { socketPath: host.host, timeout: config.ESPLORA.FALLBACK_TIMEOUT }) : this.pollConnection.get(host.host + '/blocks/tip/height', { timeout: config.ESPLORA.FALLBACK_TIMEOUT }) ); if (result) { From b2d4f4078f083663a1919eb4a9ea634853fd2664 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Sun, 8 Sep 2024 20:18:04 +0000 Subject: [PATCH 023/147] alternate hotfix for broken socket support (rollback axios to 1.7.2) --- backend/package-lock.json | 15 ++++++++------- backend/package.json | 2 +- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/backend/package-lock.json b/backend/package-lock.json index 126660166..07cc9ffb3 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -13,7 +13,7 @@ "@babel/core": "^7.25.2", "@mempool/electrum-client": "1.1.9", "@types/node": "^18.15.3", - "axios": "~1.7.4", + "axios": "1.7.2", "bitcoinjs-lib": "~6.1.3", "crypto-js": "~4.2.0", "express": "~4.19.2", @@ -2278,9 +2278,10 @@ } }, "node_modules/axios": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.4.tgz", - "integrity": "sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz", + "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==", + "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", @@ -9439,9 +9440,9 @@ "integrity": "sha512-+H+kuK34PfMaI9PNU/NSjBKL5hh/KDM9J72kwYeYEm0A8B1AC4fuCy3qsjnA7lxklgyXsB68yn8Z2xoZEjgwCQ==" }, "axios": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.4.tgz", - "integrity": "sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz", + "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==", "requires": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", diff --git a/backend/package.json b/backend/package.json index 51abf2f7b..558a1d0b8 100644 --- a/backend/package.json +++ b/backend/package.json @@ -42,7 +42,7 @@ "@babel/core": "^7.25.2", "@mempool/electrum-client": "1.1.9", "@types/node": "^18.15.3", - "axios": "~1.7.4", + "axios": "1.7.2", "bitcoinjs-lib": "~6.1.3", "crypto-js": "~4.2.0", "express": "~4.19.2", From 893c3cd87d383701528f4f4400b28763dfe757ed Mon Sep 17 00:00:00 2001 From: wiz Date: Mon, 9 Sep 2024 16:53:56 +0900 Subject: [PATCH 024/147] Revert "hotfix option 1 for axios breaking change to unix sockets" --- backend/src/api/bitcoin/esplora-api.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/api/bitcoin/esplora-api.ts b/backend/src/api/bitcoin/esplora-api.ts index fc00bf2cc..b4ae35da9 100644 --- a/backend/src/api/bitcoin/esplora-api.ts +++ b/backend/src/api/bitcoin/esplora-api.ts @@ -89,7 +89,7 @@ class FailoverRouter { for (const host of this.hosts) { try { const result = await (host.socket - ? this.pollConnection.get('http://localhost/blocks/tip/height', { socketPath: host.host, timeout: config.ESPLORA.FALLBACK_TIMEOUT }) + ? this.pollConnection.get('/blocks/tip/height', { socketPath: host.host, timeout: config.ESPLORA.FALLBACK_TIMEOUT }) : this.pollConnection.get(host.host + '/blocks/tip/height', { timeout: config.ESPLORA.FALLBACK_TIMEOUT }) ); if (result) { From a133ddf062609f3ced6291e267072e01d7dc09e3 Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Tue, 10 Sep 2024 12:07:46 +0200 Subject: [PATCH 025/147] [faucet] show unverified warning if no email provided --- .../components/faucet/faucet.component.html | 8 ++++++ .../app/components/faucet/faucet.component.ts | 26 +++++++++---------- 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/frontend/src/app/components/faucet/faucet.component.html b/frontend/src/app/components/faucet/faucet.component.html index 0f0307e54..3165ae9a7 100644 --- a/frontend/src/app/components/faucet/faucet.component.html +++ b/frontend/src/app/components/faucet/faucet.component.html @@ -27,6 +27,14 @@
} + @else if (user && user.status === 'pending' && !user.email && user.snsId) { +
+ + + Please verify your account by providing a valid email address. To mitigate spam, we delete unverified accounts at regular intervals. + +
+ } @else if (error === 'not_available') {
diff --git a/frontend/src/app/components/faucet/faucet.component.ts b/frontend/src/app/components/faucet/faucet.component.ts index 566a3b970..3e299b4fa 100644 --- a/frontend/src/app/components/faucet/faucet.component.ts +++ b/frontend/src/app/components/faucet/faucet.component.ts @@ -1,7 +1,6 @@ import { Component, OnDestroy, OnInit, ChangeDetectorRef } from "@angular/core"; import { FormBuilder, FormGroup, Validators, ValidatorFn, AbstractControl, ValidationErrors } from "@angular/forms"; import { Subscription } from "rxjs"; -import { StorageService } from "../../services/storage.service"; import { ServicesApiServices } from "../../services/services-api.service"; import { getRegex } from "../../shared/regex.utils"; import { StateService } from "../../services/state.service"; @@ -34,7 +33,6 @@ export class FaucetComponent implements OnInit, OnDestroy { constructor( private cd: ChangeDetectorRef, - private storageService: StorageService, private servicesApiService: ServicesApiServices, private formBuilder: FormBuilder, private stateService: StateService, @@ -56,14 +54,17 @@ export class FaucetComponent implements OnInit, OnDestroy { } ngOnInit() { - this.user = this.storageService.getAuth()?.user ?? null; - if (!this.user) { - this.loading = false; - return; - } - - // Setup form - this.updateFaucetStatus(); + this.servicesApiService.userSubject$.subscribe(user => { + this.user = user; + if (!user) { + this.loading = false; + this.cd.markForCheck(); + return; + } + // Setup form + this.updateFaucetStatus(); + this.cd.markForCheck(); + }); // Track transaction this.websocketService.want(['blocks', 'mempool-blocks']); @@ -145,9 +146,6 @@ export class FaucetComponent implements OnInit, OnDestroy { 'address': ['', [Validators.required, Validators.pattern(getRegex('address', 'testnet4')), this.getNotFaucetAddressValidator(faucetAddress)]], 'satoshis': [min, [Validators.required, Validators.min(min), Validators.max(max)]] }); - - this.loading = false; - this.cd.markForCheck(); } updateForm(min, max, faucetAddress: string): void { @@ -160,6 +158,8 @@ export class FaucetComponent implements OnInit, OnDestroy { this.faucetForm.get('satoshis').updateValueAndValidity(); this.faucetForm.get('satoshis').markAsDirty(); } + this.loading = false; + this.cd.markForCheck(); } setAmount(value: number): void { From 3e78b636d6935cba639bf1694c8dc0e47f0768c9 Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Thu, 12 Sep 2024 16:02:11 +0200 Subject: [PATCH 026/147] [accelerator] avoid duplicated accel request with double click --- .../accelerate-checkout.component.ts | 33 +++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts b/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts index 6b1eadf7d..5c150212d 100644 --- a/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts +++ b/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts @@ -75,6 +75,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { @Output() changeMode = new EventEmitter(); calculating = true; + processing = false; selectedOption: 'wait' | 'accel'; cantPayReason = ''; quoteError = ''; // error fetching estimate or initial data @@ -378,9 +379,10 @@ export class AccelerateCheckout implements OnInit, OnDestroy { * Account-based acceleration request */ accelerateWithMempoolAccount(): void { - if (!this.canPay || this.calculating) { + if (!this.canPay || this.calculating || this.processing) { return; } + this.processing = true; if (this.accelerationSubscription) { this.accelerationSubscription.unsubscribe(); } @@ -390,6 +392,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { this.accelerationUUID ).subscribe({ next: () => { + this.processing = false; this.apiService.logAccelerationRequest$(this.tx.txid).subscribe(); this.audioService.playSound('ascend-chime-cartoon'); this.showSuccess = true; @@ -397,6 +400,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { this.moveToStep('paid'); }, error: (response) => { + this.processing = false; this.accelerateError = response.error; } }); @@ -466,10 +470,14 @@ export class AccelerateCheckout implements OnInit, OnDestroy { * APPLE PAY */ async requestApplePayPayment(): Promise { + if (this.processing) { + return; + } if (this.conversionsSubscription) { this.conversionsSubscription.unsubscribe(); } + this.processing = true; this.conversionsSubscription = this.stateService.conversions$.subscribe( async (conversions) => { this.conversions = conversions; @@ -494,6 +502,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { console.error(`Unable to find apple pay button id='apple-pay-button'`); // Try again setTimeout(this.requestApplePayPayment.bind(this), 500); + this.processing = false; return; } this.loadingApplePay = false; @@ -505,6 +514,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { if (!card || !card.brand || !card.expMonth || !card.expYear || !card.last4) { console.error(`Cannot retreive payment card details`); this.accelerateError = 'apple_pay_no_card_details'; + this.processing = false; return; } const cardTag = md5(`${card.brand}${card.expMonth}${card.expYear}${card.last4}`.toLowerCase()); @@ -516,6 +526,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { this.accelerationUUID ).subscribe({ next: () => { + this.processing = false; this.apiService.logAccelerationRequest$(this.tx.txid).subscribe(); this.audioService.playSound('ascend-chime-cartoon'); if (this.applePay) { @@ -526,6 +537,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { }, 1000); }, error: (response) => { + this.processing = false; this.accelerateError = response.error; if (!(response.status === 403 && response.error === 'not_available')) { setTimeout(() => { @@ -537,6 +549,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { } }); } else { + this.processing = false; let errorMessage = `Tokenization failed with status: ${tokenResult.status}`; if (tokenResult.errors) { errorMessage += ` and errors: ${JSON.stringify( @@ -547,6 +560,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { } }); } catch (e) { + this.processing = false; console.error(e); } } @@ -557,10 +571,14 @@ export class AccelerateCheckout implements OnInit, OnDestroy { * GOOGLE PAY */ async requestGooglePayPayment(): Promise { + if (this.processing) { + return; + } if (this.conversionsSubscription) { this.conversionsSubscription.unsubscribe(); } - + + this.processing = true; this.conversionsSubscription = this.stateService.conversions$.subscribe( async (conversions) => { this.conversions = conversions; @@ -595,6 +613,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { if (!card || !card.brand || !card.expMonth || !card.expYear || !card.last4) { console.error(`Cannot retreive payment card details`); this.accelerateError = 'apple_pay_no_card_details'; + this.processing = false; return; } const cardTag = md5(`${card.brand}${card.expMonth}${card.expYear}${card.last4}`.toLowerCase()); @@ -606,6 +625,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { this.accelerationUUID ).subscribe({ next: () => { + this.processing = false; this.apiService.logAccelerationRequest$(this.tx.txid).subscribe(); this.audioService.playSound('ascend-chime-cartoon'); if (this.googlePay) { @@ -616,6 +636,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { }, 1000); }, error: (response) => { + this.processing = false; this.accelerateError = response.error; if (!(response.status === 403 && response.error === 'not_available')) { setTimeout(() => { @@ -627,6 +648,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { } }); } else { + this.processing = false; let errorMessage = `Tokenization failed with status: ${tokenResult.status}`; if (tokenResult.errors) { errorMessage += ` and errors: ${JSON.stringify( @@ -644,10 +666,14 @@ export class AccelerateCheckout implements OnInit, OnDestroy { * CASHAPP */ async requestCashAppPayment(): Promise { + if (this.processing) { + return; + } if (this.conversionsSubscription) { this.conversionsSubscription.unsubscribe(); } + this.processing = true; this.conversionsSubscription = this.stateService.conversions$.subscribe( async (conversions) => { this.conversions = conversions; @@ -678,6 +704,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { this.cashAppPay.addEventListener('ontokenization', event => { const { tokenResult, error } = event.detail; if (error) { + this.processing = false; this.accelerateError = error; } else if (tokenResult.status === 'OK') { this.servicesApiService.accelerateWithCashApp$( @@ -688,6 +715,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { this.accelerationUUID ).subscribe({ next: () => { + this.processing = false; this.apiService.logAccelerationRequest$(this.tx.txid).subscribe(); this.audioService.playSound('ascend-chime-cartoon'); if (this.cashAppPay) { @@ -702,6 +730,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { }, 1000); }, error: (response) => { + this.processing = false; this.accelerateError = response.error; if (!(response.status === 403 && response.error === 'not_available')) { setTimeout(() => { From 4ccd3c8525b69a406f5b81293101185989a67d34 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 13 Sep 2024 09:10:33 +0000 Subject: [PATCH 027/147] Bump serve-static and express in /backend Bumps [serve-static](https://github.com/expressjs/serve-static) to 1.16.2 and updates ancestor dependency [express](https://github.com/expressjs/express). These dependencies need to be updated together. Updates `serve-static` from 1.15.0 to 1.16.2 - [Release notes](https://github.com/expressjs/serve-static/releases) - [Changelog](https://github.com/expressjs/serve-static/blob/v1.16.2/HISTORY.md) - [Commits](https://github.com/expressjs/serve-static/compare/v1.15.0...v1.16.2) Updates `express` from 4.19.2 to 4.21.0 - [Release notes](https://github.com/expressjs/express/releases) - [Changelog](https://github.com/expressjs/express/blob/4.21.0/History.md) - [Commits](https://github.com/expressjs/express/compare/4.19.2...4.21.0) --- updated-dependencies: - dependency-name: serve-static dependency-type: indirect - dependency-name: express dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- backend/package-lock.json | 193 +++++++++++++++++++++----------------- backend/package.json | 2 +- 2 files changed, 107 insertions(+), 88 deletions(-) diff --git a/backend/package-lock.json b/backend/package-lock.json index 07cc9ffb3..7696eddd6 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -16,7 +16,7 @@ "axios": "1.7.2", "bitcoinjs-lib": "~6.1.3", "crypto-js": "~4.2.0", - "express": "~4.19.2", + "express": "~4.21.0", "maxmind": "~4.3.11", "mysql2": "~3.11.0", "redis": "^4.7.0", @@ -2490,9 +2490,9 @@ } }, "node_modules/body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.5", @@ -2502,7 +2502,7 @@ "http-errors": "2.0.0", "iconv-lite": "0.4.24", "on-finished": "2.4.1", - "qs": "6.11.0", + "qs": "6.13.0", "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" @@ -3031,9 +3031,9 @@ "dev": true }, "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "engines": { "node": ">= 0.8" } @@ -3461,36 +3461,36 @@ } }, "node_modules/express": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", - "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz", + "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.2", + "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", "cookie": "0.6.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.2.0", + "finalhandler": "1.3.1", "fresh": "0.5.2", "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", + "merge-descriptors": "1.0.3", "methods": "~1.1.2", "on-finished": "2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", + "path-to-regexp": "0.1.10", "proxy-addr": "~2.0.7", - "qs": "6.11.0", + "qs": "6.13.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", + "send": "0.19.0", + "serve-static": "1.16.2", "setprototypeof": "1.2.0", "statuses": "2.0.1", "type-is": "~1.6.18", @@ -3603,12 +3603,12 @@ } }, "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", "dependencies": { "debug": "2.6.9", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "on-finished": "2.4.1", "parseurl": "~1.3.3", @@ -6052,9 +6052,12 @@ } }, "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/merge-stream": { "version": "2.0.0", @@ -6268,9 +6271,12 @@ } }, "node_modules/object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -6438,9 +6444,9 @@ "dev": true }, "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", + "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==" }, "node_modules/path-type": { "version": "4.0.0", @@ -6648,11 +6654,11 @@ ] }, "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "dependencies": { - "side-channel": "^1.0.4" + "side-channel": "^1.0.6" }, "engines": { "node": ">=0.6" @@ -6873,9 +6879,9 @@ } }, "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "dependencies": { "debug": "2.6.9", "depd": "2.0.0", @@ -6908,6 +6914,14 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/send/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -6919,14 +6933,14 @@ "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==" }, "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", "dependencies": { - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.18.0" + "send": "0.19.0" }, "engines": { "node": ">= 0.8.0" @@ -9605,9 +9619,9 @@ } }, "body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", "requires": { "bytes": "3.1.2", "content-type": "~1.0.5", @@ -9617,7 +9631,7 @@ "http-errors": "2.0.0", "iconv-lite": "0.4.24", "on-finished": "2.4.1", - "qs": "6.11.0", + "qs": "6.13.0", "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" @@ -9998,9 +10012,9 @@ "dev": true }, "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==" }, "error-ex": { "version": "1.3.2", @@ -10305,36 +10319,36 @@ } }, "express": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", - "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz", + "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==", "requires": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.2", + "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", "cookie": "0.6.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.2.0", + "finalhandler": "1.3.1", "fresh": "0.5.2", "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", + "merge-descriptors": "1.0.3", "methods": "~1.1.2", "on-finished": "2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", + "path-to-regexp": "0.1.10", "proxy-addr": "~2.0.7", - "qs": "6.11.0", + "qs": "6.13.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", + "send": "0.19.0", + "serve-static": "1.16.2", "setprototypeof": "1.2.0", "statuses": "2.0.1", "type-is": "~1.6.18", @@ -10436,12 +10450,12 @@ } }, "finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", "requires": { "debug": "2.6.9", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "on-finished": "2.4.1", "parseurl": "~1.3.3", @@ -12238,9 +12252,9 @@ "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" }, "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==" }, "merge-stream": { "version": "2.0.0", @@ -12403,9 +12417,9 @@ } }, "object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==" + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==" }, "on-finished": { "version": "2.4.1", @@ -12522,9 +12536,9 @@ "dev": true }, "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", + "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==" }, "path-type": { "version": "4.0.0", @@ -12666,11 +12680,11 @@ "dev": true }, "qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "requires": { - "side-channel": "^1.0.4" + "side-channel": "^1.0.6" } }, "queue-microtask": { @@ -12804,9 +12818,9 @@ "dev": true }, "send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "requires": { "debug": "2.6.9", "depd": "2.0.0", @@ -12838,6 +12852,11 @@ } } }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" + }, "ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -12851,14 +12870,14 @@ "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==" }, "serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", "requires": { - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.18.0" + "send": "0.19.0" } }, "set-function-length": { diff --git a/backend/package.json b/backend/package.json index 558a1d0b8..c18974021 100644 --- a/backend/package.json +++ b/backend/package.json @@ -45,7 +45,7 @@ "axios": "1.7.2", "bitcoinjs-lib": "~6.1.3", "crypto-js": "~4.2.0", - "express": "~4.19.2", + "express": "~4.21.0", "maxmind": "~4.3.11", "mysql2": "~3.11.0", "rust-gbt": "file:./rust-gbt", From 67eb815992f3b417592d9a4530ec6bd29178fc1c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 13 Sep 2024 09:10:42 +0000 Subject: [PATCH 028/147] Bump body-parser and express in /frontend Bumps [body-parser](https://github.com/expressjs/body-parser) and [express](https://github.com/expressjs/express). These dependencies needed to be updated together. Updates `body-parser` from 1.20.2 to 1.20.3 - [Release notes](https://github.com/expressjs/body-parser/releases) - [Changelog](https://github.com/expressjs/body-parser/blob/master/HISTORY.md) - [Commits](https://github.com/expressjs/body-parser/compare/1.20.2...1.20.3) Updates `express` from 4.19.2 to 4.21.0 - [Release notes](https://github.com/expressjs/express/releases) - [Changelog](https://github.com/expressjs/express/blob/4.21.0/History.md) - [Commits](https://github.com/expressjs/express/compare/4.19.2...4.21.0) --- updated-dependencies: - dependency-name: body-parser dependency-type: indirect - dependency-name: express dependency-type: indirect ... Signed-off-by: dependabot[bot] --- frontend/package-lock.json | 252 ++++++++++++++++++++++--------------- 1 file changed, 152 insertions(+), 100 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 16400db7c..b53f80c88 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -6019,9 +6019,9 @@ "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" }, "node_modules/body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.5", @@ -6031,7 +6031,7 @@ "http-errors": "2.0.0", "iconv-lite": "0.4.24", "on-finished": "2.4.1", - "qs": "6.11.0", + "qs": "6.13.0", "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" @@ -6066,11 +6066,11 @@ } }, "node_modules/body-parser/node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "dependencies": { - "side-channel": "^1.0.4" + "side-channel": "^1.0.6" }, "engines": { "node": ">=0.6" @@ -9875,36 +9875,36 @@ "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==" }, "node_modules/express": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", - "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz", + "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.2", + "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", "cookie": "0.6.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.2.0", + "finalhandler": "1.3.1", "fresh": "0.5.2", "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", + "merge-descriptors": "1.0.3", "methods": "~1.1.2", "on-finished": "2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", + "path-to-regexp": "0.1.10", "proxy-addr": "~2.0.7", - "qs": "6.11.0", + "qs": "6.13.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", + "send": "0.19.0", + "serve-static": "1.16.2", "setprototypeof": "1.2.0", "statuses": "2.0.1", "type-is": "~1.6.18", @@ -9923,6 +9923,14 @@ "ms": "2.0.0" } }, + "node_modules/express/node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/express/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -9940,11 +9948,11 @@ } }, "node_modules/express/node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "dependencies": { - "side-channel": "^1.0.4" + "side-channel": "^1.0.6" }, "engines": { "node": ">=0.6" @@ -10177,12 +10185,12 @@ } }, "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", "dependencies": { "debug": "2.6.9", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "on-finished": "2.4.1", "parseurl": "~1.3.3", @@ -10201,6 +10209,14 @@ "ms": "2.0.0" } }, + "node_modules/finalhandler/node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/finalhandler/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -12667,9 +12683,12 @@ } }, "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/merge-stream": { "version": "2.0.0", @@ -13674,9 +13693,12 @@ } }, "node_modules/object-inspect": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", - "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -14190,9 +14212,9 @@ } }, "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", + "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==" }, "node_modules/path-type": { "version": "4.0.0", @@ -15477,9 +15499,9 @@ } }, "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "dependencies": { "debug": "2.6.9", "depd": "2.0.0", @@ -15618,19 +15640,27 @@ "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" }, "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", "dependencies": { - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.18.0" + "send": "0.19.0" }, "engines": { "node": ">= 0.8.0" } }, + "node_modules/serve-static/node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/server-destroy": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", @@ -15722,13 +15752,17 @@ } }, "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -22582,9 +22616,9 @@ "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" }, "body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", "requires": { "bytes": "3.1.2", "content-type": "~1.0.5", @@ -22594,7 +22628,7 @@ "http-errors": "2.0.0", "iconv-lite": "0.4.24", "on-finished": "2.4.1", - "qs": "6.11.0", + "qs": "6.13.0", "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" @@ -22622,11 +22656,11 @@ } }, "qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "requires": { - "side-channel": "^1.0.4" + "side-channel": "^1.0.6" } } } @@ -25550,36 +25584,36 @@ "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==" }, "express": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", - "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz", + "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==", "requires": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.2", + "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", "cookie": "0.6.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.2.0", + "finalhandler": "1.3.1", "fresh": "0.5.2", "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", + "merge-descriptors": "1.0.3", "methods": "~1.1.2", "on-finished": "2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", + "path-to-regexp": "0.1.10", "proxy-addr": "~2.0.7", - "qs": "6.11.0", + "qs": "6.13.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", + "send": "0.19.0", + "serve-static": "1.16.2", "setprototypeof": "1.2.0", "statuses": "2.0.1", "type-is": "~1.6.18", @@ -25595,6 +25629,11 @@ "ms": "2.0.0" } }, + "encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==" + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -25609,11 +25648,11 @@ } }, "qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "requires": { - "side-channel": "^1.0.4" + "side-channel": "^1.0.6" } }, "safe-buffer": { @@ -25788,12 +25827,12 @@ } }, "finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", "requires": { "debug": "2.6.9", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "on-finished": "2.4.1", "parseurl": "~1.3.3", @@ -25809,6 +25848,11 @@ "ms": "2.0.0" } }, + "encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==" + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -27601,9 +27645,9 @@ } }, "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==" }, "merge-stream": { "version": "2.0.0", @@ -28374,9 +28418,9 @@ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, "object-inspect": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", - "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==" + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==" }, "object-keys": { "version": "1.1.1", @@ -28750,9 +28794,9 @@ } }, "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", + "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==" }, "path-type": { "version": "4.0.0", @@ -29673,9 +29717,9 @@ } }, "send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "requires": { "debug": "2.6.9", "depd": "2.0.0", @@ -29796,14 +29840,21 @@ } }, "serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", "requires": { - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.18.0" + "send": "0.19.0" + }, + "dependencies": { + "encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==" + } } }, "server-destroy": { @@ -29879,13 +29930,14 @@ "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==" }, "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" } }, "signal-exit": { From c7ab6b03fb8fcdf3c37f2025c032d3a96c2e7ccc Mon Sep 17 00:00:00 2001 From: softsimon Date: Fri, 13 Sep 2024 23:23:22 +0800 Subject: [PATCH 029/147] Fix critical calculator inputmode --- .../src/app/components/calculator/calculator.component.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/frontend/src/app/components/calculator/calculator.component.html b/frontend/src/app/components/calculator/calculator.component.html index e4ade67d2..e205479ee 100644 --- a/frontend/src/app/components/calculator/calculator.component.html +++ b/frontend/src/app/components/calculator/calculator.component.html @@ -12,7 +12,7 @@
{{ currency$ | async }}
- +
@@ -20,7 +20,7 @@
BTC
- +
@@ -28,7 +28,7 @@
sats
- + From a1968e01e56fc79eaa3717e139e89edd30aa317e Mon Sep 17 00:00:00 2001 From: Mononaut Date: Fri, 13 Sep 2024 17:49:29 +0000 Subject: [PATCH 030/147] Add utxo chart to address page --- .../components/address/address.component.html | 14 + .../components/address/address.component.ts | 57 +++- .../utxo-graph/utxo-graph.component.html | 21 ++ .../utxo-graph/utxo-graph.component.scss | 59 ++++ .../utxo-graph/utxo-graph.component.ts | 285 ++++++++++++++++++ frontend/src/app/graphs/echarts.ts | 5 +- frontend/src/app/graphs/graphs.module.ts | 2 + .../src/app/interfaces/electrs.interface.ts | 7 + .../src/app/services/electrs-api.service.ts | 12 +- frontend/src/app/shared/common.utils.ts | 29 ++ 10 files changed, 483 insertions(+), 8 deletions(-) create mode 100644 frontend/src/app/components/utxo-graph/utxo-graph.component.html create mode 100644 frontend/src/app/components/utxo-graph/utxo-graph.component.scss create mode 100644 frontend/src/app/components/utxo-graph/utxo-graph.component.ts diff --git a/frontend/src/app/components/address/address.component.html b/frontend/src/app/components/address/address.component.html index 31dff2fa5..b893d7e22 100644 --- a/frontend/src/app/components/address/address.component.html +++ b/frontend/src/app/components/address/address.component.html @@ -94,6 +94,20 @@ + +
+
+

Unspent Outputs

+
+
+
+
+ +
+
+
+
+

diff --git a/frontend/src/app/components/address/address.component.ts b/frontend/src/app/components/address/address.component.ts index 105863a4e..5ce82ef8c 100644 --- a/frontend/src/app/components/address/address.component.ts +++ b/frontend/src/app/components/address/address.component.ts @@ -2,12 +2,12 @@ import { Component, OnInit, OnDestroy, HostListener } from '@angular/core'; import { ActivatedRoute, ParamMap } from '@angular/router'; import { ElectrsApiService } from '../../services/electrs-api.service'; import { switchMap, filter, catchError, map, tap } from 'rxjs/operators'; -import { Address, ChainStats, Transaction, Vin } from '../../interfaces/electrs.interface'; +import { Address, ChainStats, Transaction, Utxo, Vin } from '../../interfaces/electrs.interface'; import { WebsocketService } from '../../services/websocket.service'; import { StateService } from '../../services/state.service'; import { AudioService } from '../../services/audio.service'; import { ApiService } from '../../services/api.service'; -import { of, merge, Subscription, Observable } from 'rxjs'; +import { of, merge, Subscription, Observable, forkJoin } from 'rxjs'; import { SeoService } from '../../services/seo.service'; import { seoDescriptionNetwork } from '../../shared/common.utils'; import { AddressInformation } from '../../interfaces/node-api.interface'; @@ -104,6 +104,7 @@ export class AddressComponent implements OnInit, OnDestroy { addressString: string; isLoadingAddress = true; transactions: Transaction[]; + utxos: Utxo[]; isLoadingTransactions = true; retryLoadMore = false; error: any; @@ -159,6 +160,7 @@ export class AddressComponent implements OnInit, OnDestroy { this.address = null; this.isLoadingTransactions = true; this.transactions = null; + this.utxos = null; this.addressInfo = null; this.exampleChannel = null; document.body.scrollTo(0, 0); @@ -212,11 +214,19 @@ export class AddressComponent implements OnInit, OnDestroy { this.updateChainStats(); this.isLoadingAddress = false; this.isLoadingTransactions = true; - return address.is_pubkey + const utxoCount = this.chainStats.utxos + this.mempoolStats.utxos; + return forkJoin([ + address.is_pubkey ? this.electrsApiService.getScriptHashTransactions$((address.address.length === 66 ? '21' : '41') + address.address + 'ac') - : this.electrsApiService.getAddressTransactions$(address.address); + : this.electrsApiService.getAddressTransactions$(address.address), + utxoCount >= 2 && utxoCount <= 500 ? (address.is_pubkey + ? this.electrsApiService.getScriptHashUtxos$((address.address.length === 66 ? '21' : '41') + address.address + 'ac') + : this.electrsApiService.getAddressUtxos$(address.address)) : of([]) + ]); }), - switchMap((transactions) => { + switchMap(([transactions, utxos]) => { + this.utxos = utxos; + this.tempTransactions = transactions; if (transactions.length) { this.lastTransactionTxId = transactions[transactions.length - 1].txid; @@ -334,6 +344,23 @@ export class AddressComponent implements OnInit, OnDestroy { } } + // update utxos in-place + for (const vin of transaction.vin) { + const utxoIndex = this.utxos.findIndex((utxo) => utxo.txid === vin.txid && utxo.vout === vin.vout); + if (utxoIndex !== -1) { + this.utxos.splice(utxoIndex, 1); + } + } + for (const [index, vout] of transaction.vout.entries()) { + if (vout.scriptpubkey_address === this.address.address) { + this.utxos.push({ + txid: transaction.txid, + vout: index, + value: vout.value, + status: JSON.parse(JSON.stringify(transaction.status)), + }); + } + } return true; } @@ -346,6 +373,26 @@ export class AddressComponent implements OnInit, OnDestroy { this.transactions.splice(index, 1); this.transactions = this.transactions.slice(); + // update utxos in-place + for (const vin of transaction.vin) { + if (vin.prevout?.scriptpubkey_address === this.address.address) { + this.utxos.push({ + txid: vin.txid, + vout: vin.vout, + value: vin.prevout.value, + status: { confirmed: true }, // Assuming the input was confirmed + }); + } + } + for (const [index, vout] of transaction.vout.entries()) { + if (vout.scriptpubkey_address === this.address.address) { + const utxoIndex = this.utxos.findIndex((utxo) => utxo.txid === transaction.txid && utxo.vout === index); + if (utxoIndex !== -1) { + this.utxos.splice(utxoIndex, 1); + } + } + } + return true; } diff --git a/frontend/src/app/components/utxo-graph/utxo-graph.component.html b/frontend/src/app/components/utxo-graph/utxo-graph.component.html new file mode 100644 index 000000000..462e4328e --- /dev/null +++ b/frontend/src/app/components/utxo-graph/utxo-graph.component.html @@ -0,0 +1,21 @@ + + +
+ +
+
+
+
+
+
+ +
+

{{ error }}

+
+
+ +
+
+
+
diff --git a/frontend/src/app/components/utxo-graph/utxo-graph.component.scss b/frontend/src/app/components/utxo-graph/utxo-graph.component.scss new file mode 100644 index 000000000..1b5e0320d --- /dev/null +++ b/frontend/src/app/components/utxo-graph/utxo-graph.component.scss @@ -0,0 +1,59 @@ +.card-header { + border-bottom: 0; + font-size: 18px; + @media (min-width: 465px) { + font-size: 20px; + } + @media (min-width: 992px) { + height: 40px; + } +} + +.main-title { + position: relative; + color: var(--fg); + opacity: var(--opacity); + margin-top: -13px; + font-size: 10px; + text-transform: uppercase; + font-weight: 500; + text-align: center; + padding-bottom: 3px; +} + +.full-container { + display: flex; + flex-direction: column; + padding: 0px; + width: 100%; + height: 400px; +} + +.error-wrapper { + display: flex; + flex-direction: column; + width: 100%; + height: 100%; + align-items: center; + justify-content: center; + + font-size: 15px; + color: grey; + font-weight: bold; +} + +.chart { + display: flex; + flex: 1; + width: 100%; + padding-right: 10px; +} +.chart-widget { + width: 100%; + height: 100%; +} + +.disabled { + pointer-events: none; + opacity: 0.5; +} \ No newline at end of file diff --git a/frontend/src/app/components/utxo-graph/utxo-graph.component.ts b/frontend/src/app/components/utxo-graph/utxo-graph.component.ts new file mode 100644 index 000000000..5e034a700 --- /dev/null +++ b/frontend/src/app/components/utxo-graph/utxo-graph.component.ts @@ -0,0 +1,285 @@ +import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, NgZone, OnChanges, OnDestroy, SimpleChanges } from '@angular/core'; +import { EChartsOption } from '../../graphs/echarts'; +import { BehaviorSubject, Subscription } from 'rxjs'; +import { Utxo } from '../../interfaces/electrs.interface'; +import { StateService } from '../../services/state.service'; +import { Router } from '@angular/router'; +import { RelativeUrlPipe } from '../../shared/pipes/relative-url/relative-url.pipe'; +import { renderSats } from '../../shared/common.utils'; + +@Component({ + selector: 'app-utxo-graph', + templateUrl: './utxo-graph.component.html', + styleUrls: ['./utxo-graph.component.scss'], + styles: [` + .loadingGraphs { + position: absolute; + top: 50%; + left: calc(50% - 15px); + z-index: 99; + } + `], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class UtxoGraphComponent implements OnChanges, OnDestroy { + @Input() utxos: Utxo[]; + @Input() height: number = 200; + @Input() right: number | string = 10; + @Input() left: number | string = 70; + @Input() widget: boolean = false; + + subscription: Subscription; + redraw$: BehaviorSubject = new BehaviorSubject(false); + + chartOptions: EChartsOption = {}; + chartInitOptions = { + renderer: 'svg', + }; + + error: any; + isLoading = true; + chartInstance: any = undefined; + + constructor( + public stateService: StateService, + private cd: ChangeDetectorRef, + private zone: NgZone, + private router: Router, + private relativeUrlPipe: RelativeUrlPipe, + ) {} + + ngOnChanges(changes: SimpleChanges): void { + this.isLoading = true; + if (!this.utxos) { + return; + } + if (changes.utxos) { + this.prepareChartOptions(this.utxos); + } + } + + prepareChartOptions(utxos: Utxo[]) { + if (!utxos || utxos.length === 0) { + return; + } + + this.isLoading = false; + + // Helper functions + const distance = (x1: number, y1: number, x2: number, y2: number): number => Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2); + const intersectionPoints = (x1: number, y1: number, r1: number, x2: number, y2: number, r2: number): [number, number][] => { + const d = distance(x1, y1, x2, y2); + const a = (r1 * r1 - r2 * r2 + d * d) / (2 * d); + const h = Math.sqrt(r1 * r1 - a * a); + const x3 = x1 + a * (x2 - x1) / d; + const y3 = y1 + a * (y2 - y1) / d; + return [ + [x3 + h * (y2 - y1) / d, y3 - h * (x2 - x1) / d], + [x3 - h * (y2 - y1) / d, y3 + h * (x2 - x1) / d] + ]; + }; + + // Naive algorithm to pack circles as tightly as possible without overlaps + const placedCircles: { x: number, y: number, r: number, utxo: Utxo, distances: number[] }[] = []; + // Pack in descending order of value, and limit to the top 500 to preserve performance + const sortedUtxos = utxos.sort((a, b) => b.value - a.value).slice(0, 500); + let centerOfMass = { x: 0, y: 0 }; + let weightOfMass = 0; + sortedUtxos.forEach((utxo, index) => { + // area proportional to value + const r = Math.sqrt(utxo.value); + + // special cases for the first two utxos + if (index === 0) { + placedCircles.push({ x: 0, y: 0, r, utxo, distances: [0] }); + return; + } + if (index === 1) { + const c = placedCircles[0]; + placedCircles.push({ x: c.r + r, y: 0, r, utxo, distances: [c.r + r, 0] }); + c.distances.push(c.r + r); + return; + } + + // The best position will be touching two other circles + // generate a list of candidate points by finding all such positions + // where the circle can be placed without overlapping other circles + const candidates: [number, number, number[]][] = []; + const numCircles = placedCircles.length; + for (let i = 0; i < numCircles; i++) { + for (let j = i + 1; j < numCircles; j++) { + const c1 = placedCircles[i]; + const c2 = placedCircles[j]; + if (c1.distances[j] > (c1.r + c2.r + r + r)) { + // too far apart for new circle to touch both + continue; + } + const points = intersectionPoints(c1.x, c1.y, c1.r + r, c2.x, c2.y, c2.r + r); + points.forEach(([x, y]) => { + const distances: number[] = []; + let valid = true; + for (let k = 0; k < numCircles; k++) { + const c = placedCircles[k]; + const d = distance(x, y, c.x, c.y); + if (k !== i && k !== j && d < (r + c.r)) { + valid = false; + break; + } else { + distances.push(d); + } + } + if (valid) { + candidates.push([x, y, distances]); + } + }); + } + } + + // Pick the candidate closest to the center of mass + const [x, y, distances] = candidates.length ? candidates.reduce((closest, candidate) => + distance(candidate[0], candidate[1], centerOfMass[0], centerOfMass[1]) < + distance(closest[0], closest[1], centerOfMass[0], centerOfMass[1]) + ? candidate + : closest + ) : [0, 0, []]; + + placedCircles.push({ x, y, r, utxo, distances }); + for (let i = 0; i < distances.length; i++) { + placedCircles[i].distances.push(distances[i]); + } + distances.push(0); + + // Update center of mass + centerOfMass = { + x: (centerOfMass.x * weightOfMass + x) / (weightOfMass + r), + y: (centerOfMass.y * weightOfMass + y) / (weightOfMass + r), + }; + weightOfMass += r; + }); + + // Precompute the bounding box of the graph + const minX = Math.min(...placedCircles.map(d => d.x - d.r)); + const maxX = Math.max(...placedCircles.map(d => d.x + d.r)); + const minY = Math.min(...placedCircles.map(d => d.y - d.r)); + const maxY = Math.max(...placedCircles.map(d => d.y + d.r)); + const width = maxX - minX; + const height = maxY - minY; + + const data = placedCircles.map((circle, index) => [ + circle.utxo, + index, + circle.x, + circle.y, + circle.r + ]); + + this.chartOptions = { + series: [{ + type: 'custom', + coordinateSystem: undefined, + data, + renderItem: (params, api) => { + const idx = params.dataIndex; + const datum = data[idx]; + const utxo = datum[0] as Utxo; + const chartWidth = api.getWidth(); + const chartHeight = api.getHeight(); + const scale = Math.min(chartWidth / width, chartHeight / height); + const scaledWidth = width * scale; + const scaledHeight = height * scale; + const offsetX = (chartWidth - scaledWidth) / 2 - minX * scale; + const offsetY = (chartHeight - scaledHeight) / 2 - minY * scale; + const x = datum[2] as number; + const y = datum[3] as number; + const r = datum[4] as number; + if (r * scale < 3) { + // skip items too small to render cleanly + return; + } + const valueStr = renderSats(utxo.value, this.stateService.network); + const elements: any[] = [ + { + type: 'circle', + autoBatch: true, + shape: { + cx: (x * scale) + offsetX, + cy: (y * scale) + offsetY, + r: (r * scale) - 1, + }, + style: { + fill: '#5470c6', + } + }, + ]; + const labelFontSize = Math.min(36, r * scale * 0.25); + if (labelFontSize > 8) { + elements.push({ + type: 'text', + x: (x * scale) + offsetX, + y: (y * scale) + offsetY, + style: { + text: valueStr, + fontSize: labelFontSize, + fill: '#fff', + align: 'center', + verticalAlign: 'middle', + }, + }); + } + return { + type: 'group', + children: elements, + }; + } + }], + tooltip: { + backgroundColor: 'rgba(17, 19, 31, 1)', + borderRadius: 4, + shadowColor: 'rgba(0, 0, 0, 0.5)', + textStyle: { + color: 'var(--tooltip-grey)', + align: 'left', + }, + borderColor: '#000', + formatter: (params: any): string => { + const utxo = params.data[0] as Utxo; + const valueStr = renderSats(utxo.value, this.stateService.network); + return ` + ${utxo.txid.slice(0, 6)}...${utxo.txid.slice(-6)}:${utxo.vout} +
+ ${valueStr}`; + }, + } + }; + + this.cd.markForCheck(); + } + + onChartClick(e): void { + if (e.data?.[0]?.txid) { + this.zone.run(() => { + const url = this.relativeUrlPipe.transform(`/tx/${e.data[0].txid}`); + if (e.event.event.shiftKey || e.event.event.ctrlKey || e.event.event.metaKey) { + window.open(url + '?mode=details#vout=' + e.data[0].vout); + } else { + this.router.navigate([url], { fragment: `vout=${e.data[0].vout}` }); + } + }); + } + } + + onChartInit(ec): void { + this.chartInstance = ec; + this.chartInstance.on('click', 'series', this.onChartClick.bind(this)); + } + + ngOnDestroy(): void { + if (this.subscription) { + this.subscription.unsubscribe(); + } + } + + isMobile(): boolean { + return (window.innerWidth <= 767.98); + } +} diff --git a/frontend/src/app/graphs/echarts.ts b/frontend/src/app/graphs/echarts.ts index 74fec1e71..67ed7e3b8 100644 --- a/frontend/src/app/graphs/echarts.ts +++ b/frontend/src/app/graphs/echarts.ts @@ -1,6 +1,6 @@ // Import tree-shakeable echarts import * as echarts from 'echarts/core'; -import { LineChart, LinesChart, BarChart, TreemapChart, PieChart, ScatterChart, GaugeChart } from 'echarts/charts'; +import { LineChart, LinesChart, BarChart, TreemapChart, PieChart, ScatterChart, GaugeChart, CustomChart } from 'echarts/charts'; import { TitleComponent, TooltipComponent, GridComponent, LegendComponent, GeoComponent, DataZoomComponent, VisualMapComponent, MarkLineComponent } from 'echarts/components'; import { SVGRenderer, CanvasRenderer } from 'echarts/renderers'; // Typescript interfaces @@ -12,6 +12,7 @@ echarts.use([ TitleComponent, TooltipComponent, GridComponent, LegendComponent, GeoComponent, DataZoomComponent, VisualMapComponent, MarkLineComponent, - LineChart, LinesChart, BarChart, TreemapChart, PieChart, ScatterChart, GaugeChart + LineChart, LinesChart, BarChart, TreemapChart, PieChart, ScatterChart, GaugeChart, + CustomChart, ]); export { echarts, EChartsOption, TreemapSeriesOption, LineSeriesOption, PieSeriesOption }; \ No newline at end of file diff --git a/frontend/src/app/graphs/graphs.module.ts b/frontend/src/app/graphs/graphs.module.ts index de048fd2d..ee51069c5 100644 --- a/frontend/src/app/graphs/graphs.module.ts +++ b/frontend/src/app/graphs/graphs.module.ts @@ -36,6 +36,7 @@ import { HashrateChartPoolsComponent } from '../components/hashrates-chart-pools import { BlockHealthGraphComponent } from '../components/block-health-graph/block-health-graph.component'; import { AddressComponent } from '../components/address/address.component'; import { AddressGraphComponent } from '../components/address-graph/address-graph.component'; +import { UtxoGraphComponent } from '../components/utxo-graph/utxo-graph.component'; import { ActiveAccelerationBox } from '../components/acceleration/active-acceleration-box/active-acceleration-box.component'; import { CommonModule } from '@angular/common'; @@ -76,6 +77,7 @@ import { CommonModule } from '@angular/common'; HashrateChartPoolsComponent, BlockHealthGraphComponent, AddressGraphComponent, + UtxoGraphComponent, ActiveAccelerationBox, ], imports: [ diff --git a/frontend/src/app/interfaces/electrs.interface.ts b/frontend/src/app/interfaces/electrs.interface.ts index b32a2aae6..5bc5bfc1d 100644 --- a/frontend/src/app/interfaces/electrs.interface.ts +++ b/frontend/src/app/interfaces/electrs.interface.ts @@ -233,3 +233,10 @@ interface AssetStats { peg_out_amount: number; burn_count: number; } + +export interface Utxo { + txid: string; + vout: number; + value: number; + status: Status; +} \ No newline at end of file diff --git a/frontend/src/app/services/electrs-api.service.ts b/frontend/src/app/services/electrs-api.service.ts index 7faaea87c..8e991782b 100644 --- a/frontend/src/app/services/electrs-api.service.ts +++ b/frontend/src/app/services/electrs-api.service.ts @@ -1,7 +1,7 @@ import { Injectable } from '@angular/core'; import { HttpClient, HttpParams } from '@angular/common/http'; import { BehaviorSubject, Observable, catchError, filter, from, of, shareReplay, switchMap, take, tap } from 'rxjs'; -import { Transaction, Address, Outspend, Recent, Asset, ScriptHash, AddressTxSummary } from '../interfaces/electrs.interface'; +import { Transaction, Address, Outspend, Recent, Asset, ScriptHash, AddressTxSummary, Utxo } from '../interfaces/electrs.interface'; import { StateService } from './state.service'; import { BlockExtended } from '../interfaces/node-api.interface'; import { calcScriptHash$ } from '../bitcoin.utils'; @@ -166,6 +166,16 @@ export class ElectrsApiService { ); } + getAddressUtxos$(address: string): Observable { + return this.httpClient.get(this.apiBaseUrl + this.apiBasePath + '/api/address/' + address + '/utxo'); + } + + getScriptHashUtxos$(script: string): Observable { + return from(calcScriptHash$(script)).pipe( + switchMap(scriptHash => this.httpClient.get(this.apiBaseUrl + this.apiBasePath + '/api/scripthash/' + scriptHash + '/utxo')), + ); + } + getAsset$(assetId: string): Observable { return this.httpClient.get(this.apiBaseUrl + this.apiBasePath + '/api/asset/' + assetId); } diff --git a/frontend/src/app/shared/common.utils.ts b/frontend/src/app/shared/common.utils.ts index 8c69c2319..6bdc3262b 100644 --- a/frontend/src/app/shared/common.utils.ts +++ b/frontend/src/app/shared/common.utils.ts @@ -1,5 +1,7 @@ import { MempoolBlockDelta, MempoolBlockDeltaCompressed, MempoolDeltaChange, TransactionCompressed } from "../interfaces/websocket.interface"; import { TransactionStripped } from "../interfaces/node-api.interface"; +import { AmountShortenerPipe } from "./pipes/amount-shortener.pipe"; +const amountShortenerPipe = new AmountShortenerPipe(); export function isMobile(): boolean { return (window.innerWidth <= 767.98); @@ -184,6 +186,33 @@ export function uncompressDeltaChange(block: number, delta: MempoolBlockDeltaCom }; } +export function renderSats(value: number, network: string, mode: 'sats' | 'btc' | 'auto' = 'auto'): string { + let prefix = ''; + switch (network) { + case 'liquid': + prefix = 'L'; + break; + case 'liquidtestnet': + prefix = 'tL'; + break; + case 'testnet': + case 'testnet4': + prefix = 't'; + break; + case 'signet': + prefix = 's'; + break; + } + if (mode === 'btc' || (mode === 'auto' && value >= 1000000)) { + return `${amountShortenerPipe.transform(value / 100000000)} ${prefix}BTC`; + } else { + if (prefix.length) { + prefix += '-'; + } + return `${amountShortenerPipe.transform(value)} ${prefix}sats`; + } +} + export function insecureRandomUUID(): string { const hexDigits = '0123456789abcdef'; const uuidLengths = [8, 4, 4, 4, 12]; From a76d6c2949cb1e59741bb8ee5f6572626f4c8f0f Mon Sep 17 00:00:00 2001 From: natsoni Date: Tue, 17 Sep 2024 14:47:42 +0200 Subject: [PATCH 031/147] Fix mobile routing to tx push and test pages --- frontend/src/app/route-guards.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/frontend/src/app/route-guards.ts b/frontend/src/app/route-guards.ts index 4808713c1..7ed44176a 100644 --- a/frontend/src/app/route-guards.ts +++ b/frontend/src/app/route-guards.ts @@ -13,7 +13,8 @@ class GuardService { trackerGuard(route: Route, segments: UrlSegment[]): boolean { const preferredRoute = this.router.getCurrentNavigation()?.extractedUrl.queryParams?.mode; - return (preferredRoute === 'status' || (preferredRoute !== 'details' && this.navigationService.isInitialLoad())) && window.innerWidth <= 767.98; + const path = this.router.getCurrentNavigation()?.extractedUrl.root.children.primary.segments; + return (preferredRoute === 'status' || (preferredRoute !== 'details' && this.navigationService.isInitialLoad())) && window.innerWidth <= 767.98 && !(path.length === 2 && ['push', 'test'].includes(path[1].path)); } } From 2d9709a42707903d4667eacdbf2e0ed311dc0e2b Mon Sep 17 00:00:00 2001 From: natsoni Date: Tue, 17 Sep 2024 12:15:18 +0200 Subject: [PATCH 032/147] Pizza tracker: hide ETA on replaced tx --- .../components/tracker/tracker.component.html | 36 ++++++++++--------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/frontend/src/app/components/tracker/tracker.component.html b/frontend/src/app/components/tracker/tracker.component.html index d467aae80..252c1189e 100644 --- a/frontend/src/app/components/tracker/tracker.component.html +++ b/frontend/src/app/components/tracker/tracker.component.html @@ -65,23 +65,25 @@ }

-
-
ETA
-
- - - @if (eta.blocks >= 7) { - Not any time soon - } @else { - - } - - - - - -
-
+ @if (!replaced) { +
+
ETA
+
+ + + @if (eta.blocks >= 7) { + Not any time soon + } @else { + + } + + + + + +
+
+ } } @else if (tx && tx.status?.confirmed) {
Confirmed at
From 99290a7946b96a11dcf519ddcafee4a777d9d782 Mon Sep 17 00:00:00 2001 From: natsoni Date: Tue, 17 Sep 2024 14:34:18 +0200 Subject: [PATCH 033/147] Show http error in pizza tracker --- .../src/app/components/tracker/tracker.component.html | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/frontend/src/app/components/tracker/tracker.component.html b/frontend/src/app/components/tracker/tracker.component.html index d467aae80..7cb100cf7 100644 --- a/frontend/src/app/components/tracker/tracker.component.html +++ b/frontend/src/app/components/tracker/tracker.component.html @@ -42,7 +42,7 @@
-
+
@if (replaced) {
-
+
@if (isLoading) {
@@ -184,6 +184,12 @@
}
+ +
+ + Error loading transaction data. + +
diff --git a/frontend/src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html b/frontend/src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html index 07bcdc2f1..0f436f9ac 100644 --- a/frontend/src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html +++ b/frontend/src/app/components/acceleration-timeline/acceleration-timeline-tooltip.component.html @@ -21,14 +21,14 @@ Fee - {{ accelerationInfo.fee | number }} sat + {{ accelerationInfo.fee | number }} sats Out-of-band fees @if (accelerationInfo.status === 'accelerated') { - {{ accelerationInfo.feeDelta | number }} sat + {{ accelerationInfo.feeDelta | number }} sats } @else { - {{ accelerationInfo.bidBoost | number }} sat + {{ accelerationInfo.bidBoost | number }} sats } diff --git a/frontend/src/app/components/acceleration/accelerations-list/accelerations-list.component.html b/frontend/src/app/components/acceleration/accelerations-list/accelerations-list.component.html index 8bdd4f14d..ffd8e9c3d 100644 --- a/frontend/src/app/components/acceleration/accelerations-list/accelerations-list.component.html +++ b/frontend/src/app/components/acceleration/accelerations-list/accelerations-list.component.html @@ -33,7 +33,7 @@ - {{ (acceleration.feeDelta) | number }} sat + {{ (acceleration.feeDelta) | number }} sats @@ -41,7 +41,7 @@ - {{ acceleration.boost | number }} sat + {{ acceleration.boost | number }} sats ~ diff --git a/frontend/src/app/components/block-overview-tooltip/block-overview-tooltip.component.html b/frontend/src/app/components/block-overview-tooltip/block-overview-tooltip.component.html index f1f5bb3d4..f8fb3c89d 100644 --- a/frontend/src/app/components/block-overview-tooltip/block-overview-tooltip.component.html +++ b/frontend/src/app/components/block-overview-tooltip/block-overview-tooltip.component.html @@ -40,7 +40,7 @@ Fee - {{ fee | number }} sat   + {{ fee | number }} sats   Fee rate diff --git a/frontend/src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html b/frontend/src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html index 46cda0488..19c08bad9 100644 --- a/frontend/src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html +++ b/frontend/src/app/components/rbf-timeline/rbf-timeline-tooltip.component.html @@ -19,7 +19,7 @@ Fee - {{ rbfInfo.tx.fee | number }} sat + {{ rbfInfo.tx.fee | number }} sats Virtual size diff --git a/frontend/src/app/components/transaction/transaction-preview.component.html b/frontend/src/app/components/transaction/transaction-preview.component.html index 63a11a8f0..066e0d442 100644 --- a/frontend/src/app/components/transaction/transaction-preview.component.html +++ b/frontend/src/app/components/transaction/transaction-preview.component.html @@ -21,7 +21,7 @@ ‎{{ transactionTime * 1000 | date:'yyyy-MM-dd HH:mm' }} - Fee {{ tx.fee | number }} sat + Fee {{ tx.fee | number }} sats
diff --git a/frontend/src/app/components/transaction/transaction.component.html b/frontend/src/app/components/transaction/transaction.component.html index b2e55a3b0..c0f5c6103 100644 --- a/frontend/src/app/components/transaction/transaction.component.html +++ b/frontend/src/app/components/transaction/transaction.component.html @@ -606,9 +606,9 @@ @if (!isLoadingTx) { Fee - {{ tx.fee | number }} sat + {{ tx.fee | number }} sats @if (accelerationInfo?.bidBoost ?? tx.feeDelta > 0) { - +{{ accelerationInfo?.bidBoost ?? tx.feeDelta | number }} sat + +{{ accelerationInfo?.bidBoost ?? tx.feeDelta | number }} sats } diff --git a/frontend/src/app/components/transactions-list/transactions-list.component.html b/frontend/src/app/components/transactions-list/transactions-list.component.html index 8954e4ecb..9b88678b4 100644 --- a/frontend/src/app/components/transactions-list/transactions-list.component.html +++ b/frontend/src/app/components/transactions-list/transactions-list.component.html @@ -321,7 +321,7 @@
 – {{ tx.fee | number }} sat + i18n="shared.sats">sats
Show more inputs to reveal fee data
From 72a5f4a521177c9cc60cb4f7b779708b5e791215 Mon Sep 17 00:00:00 2001 From: softsimon Date: Mon, 23 Sep 2024 00:18:59 +0800 Subject: [PATCH 047/147] amount selector sat -> sats --- .../components/amount-selector/amount-selector.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/app/components/amount-selector/amount-selector.component.html b/frontend/src/app/components/amount-selector/amount-selector.component.html index b509d6fe3..a16a24d4f 100644 --- a/frontend/src/app/components/amount-selector/amount-selector.component.html +++ b/frontend/src/app/components/amount-selector/amount-selector.component.html @@ -1,7 +1,7 @@
From 06e699e52b38b051712a2f4775d37887c808bb3a Mon Sep 17 00:00:00 2001 From: Mononaut Date: Sun, 22 Sep 2024 16:49:08 +0000 Subject: [PATCH 048/147] address utxo chart color by age & updates --- .../components/address/address.component.ts | 39 +++++ .../components/block-overview-graph/utils.ts | 13 ++ .../src/app/components/time/time.component.ts | 161 +++++++++++------- .../utxo-graph/utxo-graph.component.ts | 68 +++++++- frontend/src/app/shared/common.utils.ts | 4 +- 5 files changed, 211 insertions(+), 74 deletions(-) diff --git a/frontend/src/app/components/address/address.component.ts b/frontend/src/app/components/address/address.component.ts index 5ce82ef8c..aaf480d8e 100644 --- a/frontend/src/app/components/address/address.component.ts +++ b/frontend/src/app/components/address/address.component.ts @@ -319,6 +319,7 @@ export class AddressComponent implements OnInit, OnDestroy { this.transactions = this.transactions.slice(); this.mempoolStats.removeTx(transaction); this.audioService.playSound('magic'); + this.confirmTransaction(tx); } else { if (this.addTransaction(transaction, false)) { this.audioService.playSound('magic'); @@ -345,10 +346,12 @@ export class AddressComponent implements OnInit, OnDestroy { } // update utxos in-place + let utxosChanged = false; for (const vin of transaction.vin) { const utxoIndex = this.utxos.findIndex((utxo) => utxo.txid === vin.txid && utxo.vout === vin.vout); if (utxoIndex !== -1) { this.utxos.splice(utxoIndex, 1); + utxosChanged = true; } } for (const [index, vout] of transaction.vout.entries()) { @@ -359,8 +362,12 @@ export class AddressComponent implements OnInit, OnDestroy { value: vout.value, status: JSON.parse(JSON.stringify(transaction.status)), }); + utxosChanged = true; } } + if (utxosChanged) { + this.utxos = this.utxos.slice(); + } return true; } @@ -374,6 +381,7 @@ export class AddressComponent implements OnInit, OnDestroy { this.transactions = this.transactions.slice(); // update utxos in-place + let utxosChanged = false; for (const vin of transaction.vin) { if (vin.prevout?.scriptpubkey_address === this.address.address) { this.utxos.push({ @@ -382,6 +390,7 @@ export class AddressComponent implements OnInit, OnDestroy { value: vin.prevout.value, status: { confirmed: true }, // Assuming the input was confirmed }); + utxosChanged = true; } } for (const [index, vout] of transaction.vout.entries()) { @@ -389,13 +398,43 @@ export class AddressComponent implements OnInit, OnDestroy { const utxoIndex = this.utxos.findIndex((utxo) => utxo.txid === transaction.txid && utxo.vout === index); if (utxoIndex !== -1) { this.utxos.splice(utxoIndex, 1); + utxosChanged = true; } } } + if (utxosChanged) { + this.utxos = this.utxos.slice(); + } return true; } + confirmTransaction(transaction: Transaction): void { + // update utxos in-place + let utxosChanged = false; + for (const vin of transaction.vin) { + if (vin.prevout?.scriptpubkey_address === this.address.address) { + const utxoIndex = this.utxos.findIndex((utxo) => utxo.txid === vin.txid && utxo.vout === vin.vout); + if (utxoIndex !== -1) { + this.utxos[utxoIndex].status = JSON.parse(JSON.stringify(transaction.status)); + utxosChanged = true; + } + } + } + for (const [index, vout] of transaction.vout.entries()) { + if (vout.scriptpubkey_address === this.address.address) { + const utxoIndex = this.utxos.findIndex((utxo) => utxo.txid === transaction.txid && utxo.vout === index); + if (utxoIndex !== -1) { + this.utxos[utxoIndex].status = JSON.parse(JSON.stringify(transaction.status)); + utxosChanged = true; + } + } + } + if (utxosChanged) { + this.utxos = this.utxos.slice(); + } + } + loadMore(): void { if (this.isLoadingTransactions || this.fullyLoaded) { return; diff --git a/frontend/src/app/components/block-overview-graph/utils.ts b/frontend/src/app/components/block-overview-graph/utils.ts index 625029db0..287c4bf34 100644 --- a/frontend/src/app/components/block-overview-graph/utils.ts +++ b/frontend/src/app/components/block-overview-graph/utils.ts @@ -11,6 +11,10 @@ export function hexToColor(hex: string): Color { }; } +export function colorToHex(color: Color): string { + return [color.r, color.g, color.b].map(c => Math.round(c * 255).toString(16)).join(''); +} + export function desaturate(color: Color, amount: number): Color { const gray = (color.r + color.g + color.b) / 6; return { @@ -30,6 +34,15 @@ export function darken(color: Color, amount: number): Color { }; } +export function mix(color1: Color, color2: Color, amount: number): Color { + return { + r: color1.r * (1 - amount) + color2.r * amount, + g: color1.g * (1 - amount) + color2.g * amount, + b: color1.b * (1 - amount) + color2.b * amount, + a: color1.a * (1 - amount) + color2.a * amount, + }; +} + export function setOpacity(color: Color, opacity: number): Color { return { ...color, diff --git a/frontend/src/app/components/time/time.component.ts b/frontend/src/app/components/time/time.component.ts index 3015007b2..f0c73c80b 100644 --- a/frontend/src/app/components/time/time.component.ts +++ b/frontend/src/app/components/time/time.component.ts @@ -3,6 +3,28 @@ import { StateService } from '../../services/state.service'; import { dates } from '../../shared/i18n/dates'; import { DatePipe } from '@angular/common'; +const datePipe = new DatePipe(navigator.language || 'en-US'); + +const intervals = { + year: 31536000, + month: 2592000, + week: 604800, + day: 86400, + hour: 3600, + minute: 60, + second: 1 +}; + +const precisionThresholds = { + year: 100, + month: 18, + week: 12, + day: 31, + hour: 48, + minute: 90, + second: 90 +}; + @Component({ selector: 'app-time', templateUrl: './time.component.html', @@ -12,19 +34,9 @@ export class TimeComponent implements OnInit, OnChanges, OnDestroy { interval: number; text: string; tooltip: string; - precisionThresholds = { - year: 100, - month: 18, - week: 12, - day: 31, - hour: 48, - minute: 90, - second: 90 - }; - intervals = {}; @Input() time: number; - @Input() dateString: number; + @Input() dateString: string; @Input() kind: 'plain' | 'since' | 'until' | 'span' | 'before' | 'within' = 'plain'; @Input() fastRender = false; @Input() fixedRender = false; @@ -40,37 +52,25 @@ export class TimeComponent implements OnInit, OnChanges, OnDestroy { constructor( private ref: ChangeDetectorRef, private stateService: StateService, - private datePipe: DatePipe, - ) { - this.intervals = { - year: 31536000, - month: 2592000, - week: 604800, - day: 86400, - hour: 3600, - minute: 60, - second: 1 - }; - } + ) {} ngOnInit() { + this.calculateTime(); if(this.fixedRender){ - this.text = this.calculate(); return; } if (!this.stateService.isBrowser) { - this.text = this.calculate(); this.ref.markForCheck(); return; } this.interval = window.setInterval(() => { - this.text = this.calculate(); + this.calculateTime(); this.ref.markForCheck(); }, 1000 * (this.fastRender ? 1 : 60)); } ngOnChanges() { - this.text = this.calculate(); + this.calculateTime(); this.ref.markForCheck(); } @@ -78,40 +78,71 @@ export class TimeComponent implements OnInit, OnChanges, OnDestroy { clearInterval(this.interval); } - calculate() { - if (this.time == null) { - return; + calculateTime(): void { + const { text, tooltip } = TimeComponent.calculate( + this.time, + this.kind, + this.relative, + this.precision, + this.minUnit, + this.showTooltip, + this.units, + this.dateString, + this.lowercaseStart, + this.numUnits, + this.fractionDigits, + ); + this.text = text; + this.tooltip = tooltip; + } + + static calculate( + time: number, + kind: 'plain' | 'since' | 'until' | 'span' | 'before' | 'within', + relative: boolean = false, + precision: number = 0, + minUnit: 'year' | 'month' | 'week' | 'day' | 'hour' | 'minute' | 'second' = 'second', + showTooltip: boolean = false, + units: string[] = ['year', 'month', 'week', 'day', 'hour', 'minute', 'second'], + dateString?: string, + lowercaseStart: boolean = false, + numUnits: number = 1, + fractionDigits: number = 0, + ): { text: string, tooltip: string } { + if (time == null) { + return { text: '', tooltip: '' }; } let seconds: number; - switch (this.kind) { + let tooltip: string = ''; + switch (kind) { case 'since': - seconds = Math.floor((+new Date() - +new Date(this.dateString || this.time * 1000)) / 1000); - this.tooltip = this.datePipe.transform(new Date(this.dateString || this.time * 1000), 'yyyy-MM-dd HH:mm'); + seconds = Math.floor((+new Date() - +new Date(dateString || time * 1000)) / 1000); + tooltip = datePipe.transform(new Date(dateString || time * 1000), 'yyyy-MM-dd HH:mm'); break; case 'until': case 'within': - seconds = (+new Date(this.time) - +new Date()) / 1000; - this.tooltip = this.datePipe.transform(new Date(this.time), 'yyyy-MM-dd HH:mm'); + seconds = (+new Date(time) - +new Date()) / 1000; + tooltip = datePipe.transform(new Date(time), 'yyyy-MM-dd HH:mm'); break; default: - seconds = Math.floor(this.time); - this.tooltip = ''; + seconds = Math.floor(time); + tooltip = ''; } - if (!this.showTooltip || this.relative) { - this.tooltip = ''; + if (!showTooltip || relative) { + tooltip = ''; } - if (seconds < 1 && this.kind === 'span') { - return $localize`:@@date-base.immediately:Immediately`; + if (seconds < 1 && kind === 'span') { + return { tooltip, text: $localize`:@@date-base.immediately:Immediately` }; } else if (seconds < 60) { - if (this.relative || this.kind === 'since') { - if (this.lowercaseStart) { - return $localize`:@@date-base.just-now:Just now`.charAt(0).toLowerCase() + $localize`:@@date-base.just-now:Just now`.slice(1); + if (relative || kind === 'since') { + if (lowercaseStart) { + return { tooltip, text: $localize`:@@date-base.just-now:Just now`.charAt(0).toLowerCase() + $localize`:@@date-base.just-now:Just now`.slice(1) }; } - return $localize`:@@date-base.just-now:Just now`; - } else if (this.kind === 'until' || this.kind === 'within') { + return { tooltip, text: $localize`:@@date-base.just-now:Just now` }; + } else if (kind === 'until' || kind === 'within') { seconds = 60; } } @@ -119,44 +150,44 @@ export class TimeComponent implements OnInit, OnChanges, OnDestroy { let counter: number; const result = []; let usedUnits = 0; - for (const [index, unit] of this.units.entries()) { - let precisionUnit = this.units[Math.min(this.units.length - 1, index + this.precision)]; - counter = Math.floor(seconds / this.intervals[unit]); - const precisionCounter = Math.round(seconds / this.intervals[precisionUnit]); - if (precisionCounter > this.precisionThresholds[precisionUnit]) { + for (const [index, unit] of units.entries()) { + let precisionUnit = units[Math.min(units.length - 1, index + precision)]; + counter = Math.floor(seconds / intervals[unit]); + const precisionCounter = Math.round(seconds / intervals[precisionUnit]); + if (precisionCounter > precisionThresholds[precisionUnit]) { precisionUnit = unit; } - if (this.units.indexOf(precisionUnit) === this.units.indexOf(this.minUnit)) { + if (units.indexOf(precisionUnit) === units.indexOf(minUnit)) { counter = Math.max(1, counter); } if (counter > 0) { let rounded; - const roundFactor = Math.pow(10,this.fractionDigits || 0); - if ((this.kind === 'until' || this.kind === 'within') && usedUnits < this.numUnits) { - rounded = Math.floor((seconds / this.intervals[precisionUnit]) * roundFactor) / roundFactor; + const roundFactor = Math.pow(10,fractionDigits || 0); + if ((kind === 'until' || kind === 'within') && usedUnits < numUnits) { + rounded = Math.floor((seconds / intervals[precisionUnit]) * roundFactor) / roundFactor; } else { - rounded = Math.round((seconds / this.intervals[precisionUnit]) * roundFactor) / roundFactor; + rounded = Math.round((seconds / intervals[precisionUnit]) * roundFactor) / roundFactor; } - if ((this.kind !== 'until' && this.kind !== 'within')|| this.numUnits === 1) { - return this.formatTime(this.kind, precisionUnit, rounded); + if ((kind !== 'until' && kind !== 'within')|| numUnits === 1) { + return { tooltip, text: TimeComponent.formatTime(kind, precisionUnit, rounded) }; } else { if (!usedUnits) { - result.push(this.formatTime(this.kind, precisionUnit, rounded)); + result.push(TimeComponent.formatTime(kind, precisionUnit, rounded)); } else { - result.push(this.formatTime('', precisionUnit, rounded)); + result.push(TimeComponent.formatTime('', precisionUnit, rounded)); } - seconds -= (rounded * this.intervals[precisionUnit]); + seconds -= (rounded * intervals[precisionUnit]); usedUnits++; - if (usedUnits >= this.numUnits) { - return result.join(', '); + if (usedUnits >= numUnits) { + return { tooltip, text: result.join(', ') }; } } } } - return result.join(', '); + return { tooltip, text: result.join(', ') }; } - private formatTime(kind, unit, number): string { + static formatTime(kind, unit, number): string { const dateStrings = dates(number); switch (kind) { case 'since': diff --git a/frontend/src/app/components/utxo-graph/utxo-graph.component.ts b/frontend/src/app/components/utxo-graph/utxo-graph.component.ts index 5e034a700..91dc70240 100644 --- a/frontend/src/app/components/utxo-graph/utxo-graph.component.ts +++ b/frontend/src/app/components/utxo-graph/utxo-graph.component.ts @@ -6,6 +6,14 @@ import { StateService } from '../../services/state.service'; import { Router } from '@angular/router'; import { RelativeUrlPipe } from '../../shared/pipes/relative-url/relative-url.pipe'; import { renderSats } from '../../shared/common.utils'; +import { colorToHex, hexToColor, mix } from '../block-overview-graph/utils'; +import { TimeComponent } from '../time/time.component'; + +const newColorHex = '1bd8f4'; +const oldColorHex = '9339f4'; +const pendingColorHex = 'eba814'; +const newColor = hexToColor(newColorHex); +const oldColor = hexToColor(oldColorHex); @Component({ selector: 'app-utxo-graph', @@ -29,7 +37,8 @@ export class UtxoGraphComponent implements OnChanges, OnDestroy { @Input() widget: boolean = false; subscription: Subscription; - redraw$: BehaviorSubject = new BehaviorSubject(false); + lastUpdate: number = 0; + updateInterval; chartOptions: EChartsOption = {}; chartInitOptions = { @@ -46,7 +55,14 @@ export class UtxoGraphComponent implements OnChanges, OnDestroy { private zone: NgZone, private router: Router, private relativeUrlPipe: RelativeUrlPipe, - ) {} + ) { + // re-render the chart every 10 seconds, to keep the age colors up to date + this.updateInterval = setInterval(() => { + if (this.lastUpdate < Date.now() - 10000 && this.utxos) { + this.prepareChartOptions(this.utxos); + } + }, 10000); + } ngOnChanges(changes: SimpleChanges): void { this.isLoading = true; @@ -82,7 +98,18 @@ export class UtxoGraphComponent implements OnChanges, OnDestroy { // Naive algorithm to pack circles as tightly as possible without overlaps const placedCircles: { x: number, y: number, r: number, utxo: Utxo, distances: number[] }[] = []; // Pack in descending order of value, and limit to the top 500 to preserve performance - const sortedUtxos = utxos.sort((a, b) => b.value - a.value).slice(0, 500); + const sortedUtxos = utxos.sort((a, b) => { + if (a.value === b.value) { + if (a.status.confirmed && !b.status.confirmed) { + return -1; + } else if (!a.status.confirmed && b.status.confirmed) { + return 1; + } else { + return a.status.block_height - b.status.block_height; + } + } + return b.value - a.value; + }).slice(0, 500); let centerOfMass = { x: 0, y: 0 }; let weightOfMass = 0; sortedUtxos.forEach((utxo, index) => { @@ -192,7 +219,7 @@ export class UtxoGraphComponent implements OnChanges, OnDestroy { const x = datum[2] as number; const y = datum[3] as number; const r = datum[4] as number; - if (r * scale < 3) { + if (r * scale < 2) { // skip items too small to render cleanly return; } @@ -207,7 +234,7 @@ export class UtxoGraphComponent implements OnChanges, OnDestroy { r: (r * scale) - 1, }, style: { - fill: '#5470c6', + fill: '#' + this.getColor(utxo), } }, ]; @@ -230,7 +257,7 @@ export class UtxoGraphComponent implements OnChanges, OnDestroy { type: 'group', children: elements, }; - } + }, }], tooltip: { backgroundColor: 'rgba(17, 19, 31, 1)', @@ -247,14 +274,40 @@ export class UtxoGraphComponent implements OnChanges, OnDestroy { return ` ${utxo.txid.slice(0, 6)}...${utxo.txid.slice(-6)}:${utxo.vout}
- ${valueStr}`; + ${valueStr} +
+ ${utxo.status.confirmed ? 'Confirmed ' + TimeComponent.calculate(utxo.status.block_time, 'since', true, 1, 'minute').text : 'Pending'} + `; }, } }; + this.lastUpdate = Date.now(); this.cd.markForCheck(); } + getColor(utxo: Utxo): string { + if (utxo.status.confirmed) { + const age = Date.now() / 1000 - utxo.status.block_time; + const oneHour = 60 * 60; + const fourYears = 4 * 365 * 24 * 60 * 60; + + if (age < oneHour) { + return newColorHex; + } else if (age >= fourYears) { + return oldColorHex; + } else { + // Logarithmic scale between 1 hour and 4 years + const logAge = Math.log(age / oneHour); + const logMax = Math.log(fourYears / oneHour); + const t = logAge / logMax; + return colorToHex(mix(newColor, oldColor, t)); + } + } else { + return pendingColorHex; + } + } + onChartClick(e): void { if (e.data?.[0]?.txid) { this.zone.run(() => { @@ -277,6 +330,7 @@ export class UtxoGraphComponent implements OnChanges, OnDestroy { if (this.subscription) { this.subscription.unsubscribe(); } + clearInterval(this.updateInterval); } isMobile(): boolean { diff --git a/frontend/src/app/shared/common.utils.ts b/frontend/src/app/shared/common.utils.ts index 6bdc3262b..5ccb369f6 100644 --- a/frontend/src/app/shared/common.utils.ts +++ b/frontend/src/app/shared/common.utils.ts @@ -204,12 +204,12 @@ export function renderSats(value: number, network: string, mode: 'sats' | 'btc' break; } if (mode === 'btc' || (mode === 'auto' && value >= 1000000)) { - return `${amountShortenerPipe.transform(value / 100000000)} ${prefix}BTC`; + return `${amountShortenerPipe.transform(value / 100000000, 2)} ${prefix}BTC`; } else { if (prefix.length) { prefix += '-'; } - return `${amountShortenerPipe.transform(value)} ${prefix}sats`; + return `${amountShortenerPipe.transform(value, 2)} ${prefix}sats`; } } From e144e139b70bec3af496725a88706d41179912d6 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Sun, 22 Sep 2024 18:06:55 +0000 Subject: [PATCH 049/147] Update accelerating pie chart in real time --- .../active-acceleration-box.component.html | 4 ++-- .../active-acceleration-box.component.ts | 12 ++++++++---- .../transaction/transaction.component.html | 2 +- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/frontend/src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.html b/frontend/src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.html index 13d38443e..dbc79fb95 100644 --- a/frontend/src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.html +++ b/frontend/src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.html @@ -10,10 +10,10 @@
- @if (accelerationInfo?.acceleratedFeeRate && (!tx.effectiveFeePerVsize || accelerationInfo.acceleratedFeeRate >= tx.effectiveFeePerVsize)) { + @if (accelerationInfo?.acceleratedFeeRate && (!effectiveFeeRate || accelerationInfo.acceleratedFeeRate >= effectiveFeeRate)) { } @else { - + }
diff --git a/frontend/src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.ts b/frontend/src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.ts index f95bb71c8..fb727c1a4 100644 --- a/frontend/src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.ts +++ b/frontend/src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.ts @@ -1,4 +1,4 @@ -import { Component, ChangeDetectionStrategy, Input, Output, OnChanges, SimpleChanges, EventEmitter } from '@angular/core'; +import { Component, ChangeDetectionStrategy, Input, Output, OnChanges, SimpleChanges, EventEmitter, ChangeDetectorRef } from '@angular/core'; import { Transaction } from '../../../interfaces/electrs.interface'; import { Acceleration, SinglePoolStats } from '../../../interfaces/node-api.interface'; import { EChartsOption, PieSeriesOption } from '../../../graphs/echarts'; @@ -23,7 +23,8 @@ function toRGB({r,g,b}): string { changeDetection: ChangeDetectionStrategy.OnPush, }) export class ActiveAccelerationBox implements OnChanges { - @Input() tx: Transaction; + @Input() acceleratedBy?: number[]; + @Input() effectiveFeeRate?: number; @Input() accelerationInfo: Acceleration; @Input() miningStats: MiningStats; @Input() pools: number[]; @@ -41,10 +42,12 @@ export class ActiveAccelerationBox implements OnChanges { timespan = ''; chartInstance: any = undefined; - constructor() {} + constructor( + private cd: ChangeDetectorRef, + ) {} ngOnChanges(changes: SimpleChanges): void { - const pools = this.pools || this.accelerationInfo?.pools || this.tx.acceleratedBy; + const pools = this.pools || this.accelerationInfo?.pools || this.acceleratedBy; if (pools && this.miningStats) { this.prepareChartOptions(pools); } @@ -132,6 +135,7 @@ export class ActiveAccelerationBox implements OnChanges { } ] }; + this.cd.markForCheck(); } onChartInit(ec) { diff --git a/frontend/src/app/components/transaction/transaction.component.html b/frontend/src/app/components/transaction/transaction.component.html index c0f5c6103..9d3c0d678 100644 --- a/frontend/src/app/components/transaction/transaction.component.html +++ b/frontend/src/app/components/transaction/transaction.component.html @@ -670,7 +670,7 @@ - + From 4220f99477f8e337478e68c5f647dd3c6228f083 Mon Sep 17 00:00:00 2001 From: BitcoinMechanic Date: Sun, 22 Sep 2024 14:46:53 -0700 Subject: [PATCH 050/147] remove 'on'/UI changes per feedback --- backend/src/utils/bitcoin-script.ts | 3 ++- .../app/components/block/block.component.html | 1 - .../app/components/block/block.component.scss | 6 ------ .../blockchain-blocks.component.html | 21 +++++++++++-------- .../blockchain-blocks.component.scss | 17 ++++++++------- .../blockchain/blockchain.component.scss | 2 +- .../transaction/transaction.component.html | 1 - .../transaction/transaction.component.scss | 6 ------ .../app/dashboard/dashboard.component.scss | 2 +- 9 files changed, 25 insertions(+), 34 deletions(-) diff --git a/backend/src/utils/bitcoin-script.ts b/backend/src/utils/bitcoin-script.ts index 619f1876d..b43b7a72d 100644 --- a/backend/src/utils/bitcoin-script.ts +++ b/backend/src/utils/bitcoin-script.ts @@ -220,7 +220,8 @@ export function parseDATUMTemplateCreator(coinbaseRaw: string): string[] | null const tagStart = tagLengthByte + 1; const tags = bytes.slice(tagStart, tagStart + tagsLength); - const tagString = String.fromCharCode(...tags); + let tagString = String.fromCharCode(...tags); + tagString = tagString.replace('\x00', ''); return tagString.split('\x0f'); } \ No newline at end of file diff --git a/frontend/src/app/components/block/block.component.html b/frontend/src/app/components/block/block.component.html index d97ebafc5..46900179b 100644 --- a/frontend/src/app/components/block/block.component.html +++ b/frontend/src/app/components/block/block.component.html @@ -185,7 +185,6 @@
{{ block.extras.pool.minerNames[1] }}
- on {{ block.extras.pool.name }}
diff --git a/frontend/src/app/components/block/block.component.scss b/frontend/src/app/components/block/block.component.scss index 887d7281f..6eae3fe3a 100644 --- a/frontend/src/app/components/block/block.component.scss +++ b/frontend/src/app/components/block/block.component.scss @@ -94,12 +94,6 @@ h1 { border-radius: .25rem; } -.on-pool-text { - font-weight: normal; - color: gray; - padding-inline-end: 4px; -} - .pool-logo { width: 25px; height: 25px; diff --git a/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.html b/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.html index 3fdafb540..79b9cea62 100644 --- a/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.html +++ b/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -61,18 +61,21 @@
-
- {{ block.extras.pool.minerNames[1] }} - diff --git a/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.scss b/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.scss index b03b3d3cb..a0111215a 100644 --- a/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.scss +++ b/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.scss @@ -19,12 +19,6 @@ pointer-events: none; } -.on-pool-text { - font-weight: normal; - color: gray; - padding-inline-end: 4px; -} - .on-pool-name-text { display: inline-block; padding-top: 2px; @@ -42,10 +36,17 @@ } .on-pool-container { + align-items: center; + position: relative; + top: -8px; display: flex; flex-direction: column; } +.on-pool-container.selected { + top: 0px; +} + .pool-container { margin-top: 12px; } @@ -156,7 +157,7 @@ #arrow-up { position: relative; left: calc(var(--block-size) * 0.6); - top: calc(var(--block-size) * 1.38); + top: calc(var(--block-size) * 1.28); width: 0; height: 0; border-left: calc(var(--block-size) * 0.2) solid transparent; @@ -186,7 +187,7 @@ .badge { position: relative; - top: 8px; + top: 15px; z-index: 101; color: #FFF; } diff --git a/frontend/src/app/components/blockchain/blockchain.component.scss b/frontend/src/app/components/blockchain/blockchain.component.scss index 7f98f5ed1..32225598a 100644 --- a/frontend/src/app/components/blockchain/blockchain.component.scss +++ b/frontend/src/app/components/blockchain/blockchain.component.scss @@ -14,7 +14,7 @@ } .blockchain-wrapper { - height: 272px; + height: 260px; -webkit-user-select: none; /* Safari */ -moz-user-select: none; /* Firefox */ -ms-user-select: none; /* IE10+/Edge */ diff --git a/frontend/src/app/components/transaction/transaction.component.html b/frontend/src/app/components/transaction/transaction.component.html index d00ab0e02..32eb10f8e 100644 --- a/frontend/src/app/components/transaction/transaction.component.html +++ b/frontend/src/app/components/transaction/transaction.component.html @@ -687,7 +687,6 @@
{{ pool.minerNames[1] }}
- on {{ pool.name }}
diff --git a/frontend/src/app/components/transaction/transaction.component.scss b/frontend/src/app/components/transaction/transaction.component.scss index 43cece726..40b813cae 100644 --- a/frontend/src/app/components/transaction/transaction.component.scss +++ b/frontend/src/app/components/transaction/transaction.component.scss @@ -73,12 +73,6 @@ border-radius: .25rem; } -.on-pool-text { - font-weight: normal; - color: gray; - padding-inline-end: 4px; -} - .pool-logo { width: 25px; height: 25px; diff --git a/frontend/src/app/dashboard/dashboard.component.scss b/frontend/src/app/dashboard/dashboard.component.scss index 0864f0096..9ad09981f 100644 --- a/frontend/src/app/dashboard/dashboard.component.scss +++ b/frontend/src/app/dashboard/dashboard.component.scss @@ -1,6 +1,6 @@ .dashboard-container { text-align: center; - margin-top: 1.0rem; + margin-top: 0.5rem; .col { margin-bottom: 1.5rem; } From 0e5698955fef808b8e66e86176abefcfff3842b4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Sep 2024 02:09:59 +0000 Subject: [PATCH 051/147] Bump esbuild from 0.23.0 to 0.24.0 in /frontend Bumps [esbuild](https://github.com/evanw/esbuild) from 0.23.0 to 0.24.0. - [Release notes](https://github.com/evanw/esbuild/releases) - [Changelog](https://github.com/evanw/esbuild/blob/main/CHANGELOG.md) - [Commits](https://github.com/evanw/esbuild/compare/v0.23.0...v0.24.0) --- updated-dependencies: - dependency-name: esbuild dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- frontend/package-lock.json | 398 ++++++++++++++++++------------------- frontend/package.json | 2 +- 2 files changed, 200 insertions(+), 200 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index b53f80c88..2b10d398a 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -34,7 +34,7 @@ "clipboard": "^2.0.11", "domino": "^2.1.6", "echarts": "~5.5.0", - "esbuild": "^0.23.0", + "esbuild": "^0.24.0", "lightweight-charts": "~3.8.0", "ngx-echarts": "~17.2.0", "ngx-infinite-scroll": "^17.0.0", @@ -3201,9 +3201,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.0.tgz", - "integrity": "sha512-3sG8Zwa5fMcA9bgqB8AfWPQ+HFke6uD3h1s3RIwUNK8EG7a4buxvuFTs3j1IMs2NXAk9F30C/FF4vxRgQCcmoQ==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.0.tgz", + "integrity": "sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==", "cpu": [ "ppc64" ], @@ -3216,9 +3216,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.0.tgz", - "integrity": "sha512-+KuOHTKKyIKgEEqKbGTK8W7mPp+hKinbMBeEnNzjJGyFcWsfrXjSTNluJHCY1RqhxFurdD8uNXQDei7qDlR6+g==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.0.tgz", + "integrity": "sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==", "cpu": [ "arm" ], @@ -3231,9 +3231,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.0.tgz", - "integrity": "sha512-EuHFUYkAVfU4qBdyivULuu03FhJO4IJN9PGuABGrFy4vUuzk91P2d+npxHcFdpUnfYKy0PuV+n6bKIpHOB3prQ==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.0.tgz", + "integrity": "sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==", "cpu": [ "arm64" ], @@ -3246,9 +3246,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.0.tgz", - "integrity": "sha512-WRrmKidLoKDl56LsbBMhzTTBxrsVwTKdNbKDalbEZr0tcsBgCLbEtoNthOW6PX942YiYq8HzEnb4yWQMLQuipQ==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.0.tgz", + "integrity": "sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==", "cpu": [ "x64" ], @@ -3261,9 +3261,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.0.tgz", - "integrity": "sha512-YLntie/IdS31H54Ogdn+v50NuoWF5BDkEUFpiOChVa9UnKpftgwzZRrI4J132ETIi+D8n6xh9IviFV3eXdxfow==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.0.tgz", + "integrity": "sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==", "cpu": [ "arm64" ], @@ -3276,9 +3276,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.0.tgz", - "integrity": "sha512-IMQ6eme4AfznElesHUPDZ+teuGwoRmVuuixu7sv92ZkdQcPbsNHzutd+rAfaBKo8YK3IrBEi9SLLKWJdEvJniQ==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.0.tgz", + "integrity": "sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==", "cpu": [ "x64" ], @@ -3291,9 +3291,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.0.tgz", - "integrity": "sha512-0muYWCng5vqaxobq6LB3YNtevDFSAZGlgtLoAc81PjUfiFz36n4KMpwhtAd4he8ToSI3TGyuhyx5xmiWNYZFyw==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.0.tgz", + "integrity": "sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==", "cpu": [ "arm64" ], @@ -3306,9 +3306,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.0.tgz", - "integrity": "sha512-XKDVu8IsD0/q3foBzsXGt/KjD/yTKBCIwOHE1XwiXmrRwrX6Hbnd5Eqn/WvDekddK21tfszBSrE/WMaZh+1buQ==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.0.tgz", + "integrity": "sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==", "cpu": [ "x64" ], @@ -3321,9 +3321,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.0.tgz", - "integrity": "sha512-SEELSTEtOFu5LPykzA395Mc+54RMg1EUgXP+iw2SJ72+ooMwVsgfuwXo5Fn0wXNgWZsTVHwY2cg4Vi/bOD88qw==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.0.tgz", + "integrity": "sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==", "cpu": [ "arm" ], @@ -3336,9 +3336,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.0.tgz", - "integrity": "sha512-j1t5iG8jE7BhonbsEg5d9qOYcVZv/Rv6tghaXM/Ug9xahM0nX/H2gfu6X6z11QRTMT6+aywOMA8TDkhPo8aCGw==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.0.tgz", + "integrity": "sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==", "cpu": [ "arm64" ], @@ -3351,9 +3351,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.0.tgz", - "integrity": "sha512-P7O5Tkh2NbgIm2R6x1zGJJsnacDzTFcRWZyTTMgFdVit6E98LTxO+v8LCCLWRvPrjdzXHx9FEOA8oAZPyApWUA==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.0.tgz", + "integrity": "sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==", "cpu": [ "ia32" ], @@ -3366,9 +3366,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.0.tgz", - "integrity": "sha512-InQwepswq6urikQiIC/kkx412fqUZudBO4SYKu0N+tGhXRWUqAx+Q+341tFV6QdBifpjYgUndV1hhMq3WeJi7A==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.0.tgz", + "integrity": "sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==", "cpu": [ "loong64" ], @@ -3381,9 +3381,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.0.tgz", - "integrity": "sha512-J9rflLtqdYrxHv2FqXE2i1ELgNjT+JFURt/uDMoPQLcjWQA5wDKgQA4t/dTqGa88ZVECKaD0TctwsUfHbVoi4w==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.0.tgz", + "integrity": "sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==", "cpu": [ "mips64el" ], @@ -3396,9 +3396,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.0.tgz", - "integrity": "sha512-cShCXtEOVc5GxU0fM+dsFD10qZ5UpcQ8AM22bYj0u/yaAykWnqXJDpd77ublcX6vdDsWLuweeuSNZk4yUxZwtw==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.0.tgz", + "integrity": "sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==", "cpu": [ "ppc64" ], @@ -3411,9 +3411,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.0.tgz", - "integrity": "sha512-HEtaN7Y5UB4tZPeQmgz/UhzoEyYftbMXrBCUjINGjh3uil+rB/QzzpMshz3cNUxqXN7Vr93zzVtpIDL99t9aRw==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.0.tgz", + "integrity": "sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==", "cpu": [ "riscv64" ], @@ -3426,9 +3426,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.0.tgz", - "integrity": "sha512-WDi3+NVAuyjg/Wxi+o5KPqRbZY0QhI9TjrEEm+8dmpY9Xir8+HE/HNx2JoLckhKbFopW0RdO2D72w8trZOV+Wg==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.0.tgz", + "integrity": "sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==", "cpu": [ "s390x" ], @@ -3441,9 +3441,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.0.tgz", - "integrity": "sha512-a3pMQhUEJkITgAw6e0bWA+F+vFtCciMjW/LPtoj99MhVt+Mfb6bbL9hu2wmTZgNd994qTAEw+U/r6k3qHWWaOQ==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.0.tgz", + "integrity": "sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==", "cpu": [ "x64" ], @@ -3456,9 +3456,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.0.tgz", - "integrity": "sha512-cRK+YDem7lFTs2Q5nEv/HHc4LnrfBCbH5+JHu6wm2eP+d8OZNoSMYgPZJq78vqQ9g+9+nMuIsAO7skzphRXHyw==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.0.tgz", + "integrity": "sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==", "cpu": [ "x64" ], @@ -3471,9 +3471,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.0.tgz", - "integrity": "sha512-suXjq53gERueVWu0OKxzWqk7NxiUWSUlrxoZK7usiF50C6ipColGR5qie2496iKGYNLhDZkPxBI3erbnYkU0rQ==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.0.tgz", + "integrity": "sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==", "cpu": [ "arm64" ], @@ -3486,9 +3486,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.0.tgz", - "integrity": "sha512-6p3nHpby0DM/v15IFKMjAaayFhqnXV52aEmv1whZHX56pdkK+MEaLoQWj+H42ssFarP1PcomVhbsR4pkz09qBg==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.0.tgz", + "integrity": "sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==", "cpu": [ "x64" ], @@ -3501,9 +3501,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.0.tgz", - "integrity": "sha512-BFelBGfrBwk6LVrmFzCq1u1dZbG4zy/Kp93w2+y83Q5UGYF1d8sCzeLI9NXjKyujjBBniQa8R8PzLFAUrSM9OA==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.0.tgz", + "integrity": "sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==", "cpu": [ "x64" ], @@ -3516,9 +3516,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.0.tgz", - "integrity": "sha512-lY6AC8p4Cnb7xYHuIxQ6iYPe6MfO2CC43XXKo9nBXDb35krYt7KGhQnOkRGar5psxYkircpCqfbNDB4uJbS2jQ==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.0.tgz", + "integrity": "sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==", "cpu": [ "arm64" ], @@ -3531,9 +3531,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.0.tgz", - "integrity": "sha512-7L1bHlOTcO4ByvI7OXVI5pNN6HSu6pUQq9yodga8izeuB1KcT2UkHaH6118QJwopExPn0rMHIseCTx1CRo/uNA==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.0.tgz", + "integrity": "sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==", "cpu": [ "ia32" ], @@ -3546,9 +3546,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.0.tgz", - "integrity": "sha512-Arm+WgUFLUATuoxCJcahGuk6Yj9Pzxd6l11Zb/2aAuv5kWWvvfhLFo2fni4uSK5vzlUdCGZ/BdV5tH8klj8p8g==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.0.tgz", + "integrity": "sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==", "cpu": [ "x64" ], @@ -9210,9 +9210,9 @@ } }, "node_modules/esbuild": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.0.tgz", - "integrity": "sha512-1lvV17H2bMYda/WaFb2jLPeHU3zml2k4/yagNMG8Q/YtfMjCwEUZa2eXXMgZTVSL5q1n4H7sQ0X6CdJDqqeCFA==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.0.tgz", + "integrity": "sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==", "hasInstallScript": true, "bin": { "esbuild": "bin/esbuild" @@ -9221,30 +9221,30 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.23.0", - "@esbuild/android-arm": "0.23.0", - "@esbuild/android-arm64": "0.23.0", - "@esbuild/android-x64": "0.23.0", - "@esbuild/darwin-arm64": "0.23.0", - "@esbuild/darwin-x64": "0.23.0", - "@esbuild/freebsd-arm64": "0.23.0", - "@esbuild/freebsd-x64": "0.23.0", - "@esbuild/linux-arm": "0.23.0", - "@esbuild/linux-arm64": "0.23.0", - "@esbuild/linux-ia32": "0.23.0", - "@esbuild/linux-loong64": "0.23.0", - "@esbuild/linux-mips64el": "0.23.0", - "@esbuild/linux-ppc64": "0.23.0", - "@esbuild/linux-riscv64": "0.23.0", - "@esbuild/linux-s390x": "0.23.0", - "@esbuild/linux-x64": "0.23.0", - "@esbuild/netbsd-x64": "0.23.0", - "@esbuild/openbsd-arm64": "0.23.0", - "@esbuild/openbsd-x64": "0.23.0", - "@esbuild/sunos-x64": "0.23.0", - "@esbuild/win32-arm64": "0.23.0", - "@esbuild/win32-ia32": "0.23.0", - "@esbuild/win32-x64": "0.23.0" + "@esbuild/aix-ppc64": "0.24.0", + "@esbuild/android-arm": "0.24.0", + "@esbuild/android-arm64": "0.24.0", + "@esbuild/android-x64": "0.24.0", + "@esbuild/darwin-arm64": "0.24.0", + "@esbuild/darwin-x64": "0.24.0", + "@esbuild/freebsd-arm64": "0.24.0", + "@esbuild/freebsd-x64": "0.24.0", + "@esbuild/linux-arm": "0.24.0", + "@esbuild/linux-arm64": "0.24.0", + "@esbuild/linux-ia32": "0.24.0", + "@esbuild/linux-loong64": "0.24.0", + "@esbuild/linux-mips64el": "0.24.0", + "@esbuild/linux-ppc64": "0.24.0", + "@esbuild/linux-riscv64": "0.24.0", + "@esbuild/linux-s390x": "0.24.0", + "@esbuild/linux-x64": "0.24.0", + "@esbuild/netbsd-x64": "0.24.0", + "@esbuild/openbsd-arm64": "0.24.0", + "@esbuild/openbsd-x64": "0.24.0", + "@esbuild/sunos-x64": "0.24.0", + "@esbuild/win32-arm64": "0.24.0", + "@esbuild/win32-ia32": "0.24.0", + "@esbuild/win32-x64": "0.24.0" } }, "node_modules/esbuild-wasm": { @@ -20616,147 +20616,147 @@ "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==" }, "@esbuild/aix-ppc64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.0.tgz", - "integrity": "sha512-3sG8Zwa5fMcA9bgqB8AfWPQ+HFke6uD3h1s3RIwUNK8EG7a4buxvuFTs3j1IMs2NXAk9F30C/FF4vxRgQCcmoQ==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.0.tgz", + "integrity": "sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==", "optional": true }, "@esbuild/android-arm": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.0.tgz", - "integrity": "sha512-+KuOHTKKyIKgEEqKbGTK8W7mPp+hKinbMBeEnNzjJGyFcWsfrXjSTNluJHCY1RqhxFurdD8uNXQDei7qDlR6+g==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.0.tgz", + "integrity": "sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==", "optional": true }, "@esbuild/android-arm64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.0.tgz", - "integrity": "sha512-EuHFUYkAVfU4qBdyivULuu03FhJO4IJN9PGuABGrFy4vUuzk91P2d+npxHcFdpUnfYKy0PuV+n6bKIpHOB3prQ==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.0.tgz", + "integrity": "sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==", "optional": true }, "@esbuild/android-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.0.tgz", - "integrity": "sha512-WRrmKidLoKDl56LsbBMhzTTBxrsVwTKdNbKDalbEZr0tcsBgCLbEtoNthOW6PX942YiYq8HzEnb4yWQMLQuipQ==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.0.tgz", + "integrity": "sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==", "optional": true }, "@esbuild/darwin-arm64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.0.tgz", - "integrity": "sha512-YLntie/IdS31H54Ogdn+v50NuoWF5BDkEUFpiOChVa9UnKpftgwzZRrI4J132ETIi+D8n6xh9IviFV3eXdxfow==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.0.tgz", + "integrity": "sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==", "optional": true }, "@esbuild/darwin-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.0.tgz", - "integrity": "sha512-IMQ6eme4AfznElesHUPDZ+teuGwoRmVuuixu7sv92ZkdQcPbsNHzutd+rAfaBKo8YK3IrBEi9SLLKWJdEvJniQ==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.0.tgz", + "integrity": "sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==", "optional": true }, "@esbuild/freebsd-arm64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.0.tgz", - "integrity": "sha512-0muYWCng5vqaxobq6LB3YNtevDFSAZGlgtLoAc81PjUfiFz36n4KMpwhtAd4he8ToSI3TGyuhyx5xmiWNYZFyw==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.0.tgz", + "integrity": "sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==", "optional": true }, "@esbuild/freebsd-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.0.tgz", - "integrity": "sha512-XKDVu8IsD0/q3foBzsXGt/KjD/yTKBCIwOHE1XwiXmrRwrX6Hbnd5Eqn/WvDekddK21tfszBSrE/WMaZh+1buQ==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.0.tgz", + "integrity": "sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==", "optional": true }, "@esbuild/linux-arm": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.0.tgz", - "integrity": "sha512-SEELSTEtOFu5LPykzA395Mc+54RMg1EUgXP+iw2SJ72+ooMwVsgfuwXo5Fn0wXNgWZsTVHwY2cg4Vi/bOD88qw==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.0.tgz", + "integrity": "sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==", "optional": true }, "@esbuild/linux-arm64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.0.tgz", - "integrity": "sha512-j1t5iG8jE7BhonbsEg5d9qOYcVZv/Rv6tghaXM/Ug9xahM0nX/H2gfu6X6z11QRTMT6+aywOMA8TDkhPo8aCGw==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.0.tgz", + "integrity": "sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==", "optional": true }, "@esbuild/linux-ia32": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.0.tgz", - "integrity": "sha512-P7O5Tkh2NbgIm2R6x1zGJJsnacDzTFcRWZyTTMgFdVit6E98LTxO+v8LCCLWRvPrjdzXHx9FEOA8oAZPyApWUA==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.0.tgz", + "integrity": "sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==", "optional": true }, "@esbuild/linux-loong64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.0.tgz", - "integrity": "sha512-InQwepswq6urikQiIC/kkx412fqUZudBO4SYKu0N+tGhXRWUqAx+Q+341tFV6QdBifpjYgUndV1hhMq3WeJi7A==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.0.tgz", + "integrity": "sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==", "optional": true }, "@esbuild/linux-mips64el": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.0.tgz", - "integrity": "sha512-J9rflLtqdYrxHv2FqXE2i1ELgNjT+JFURt/uDMoPQLcjWQA5wDKgQA4t/dTqGa88ZVECKaD0TctwsUfHbVoi4w==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.0.tgz", + "integrity": "sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==", "optional": true }, "@esbuild/linux-ppc64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.0.tgz", - "integrity": "sha512-cShCXtEOVc5GxU0fM+dsFD10qZ5UpcQ8AM22bYj0u/yaAykWnqXJDpd77ublcX6vdDsWLuweeuSNZk4yUxZwtw==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.0.tgz", + "integrity": "sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==", "optional": true }, "@esbuild/linux-riscv64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.0.tgz", - "integrity": "sha512-HEtaN7Y5UB4tZPeQmgz/UhzoEyYftbMXrBCUjINGjh3uil+rB/QzzpMshz3cNUxqXN7Vr93zzVtpIDL99t9aRw==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.0.tgz", + "integrity": "sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==", "optional": true }, "@esbuild/linux-s390x": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.0.tgz", - "integrity": "sha512-WDi3+NVAuyjg/Wxi+o5KPqRbZY0QhI9TjrEEm+8dmpY9Xir8+HE/HNx2JoLckhKbFopW0RdO2D72w8trZOV+Wg==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.0.tgz", + "integrity": "sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==", "optional": true }, "@esbuild/linux-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.0.tgz", - "integrity": "sha512-a3pMQhUEJkITgAw6e0bWA+F+vFtCciMjW/LPtoj99MhVt+Mfb6bbL9hu2wmTZgNd994qTAEw+U/r6k3qHWWaOQ==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.0.tgz", + "integrity": "sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==", "optional": true }, "@esbuild/netbsd-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.0.tgz", - "integrity": "sha512-cRK+YDem7lFTs2Q5nEv/HHc4LnrfBCbH5+JHu6wm2eP+d8OZNoSMYgPZJq78vqQ9g+9+nMuIsAO7skzphRXHyw==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.0.tgz", + "integrity": "sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==", "optional": true }, "@esbuild/openbsd-arm64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.0.tgz", - "integrity": "sha512-suXjq53gERueVWu0OKxzWqk7NxiUWSUlrxoZK7usiF50C6ipColGR5qie2496iKGYNLhDZkPxBI3erbnYkU0rQ==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.0.tgz", + "integrity": "sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==", "optional": true }, "@esbuild/openbsd-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.0.tgz", - "integrity": "sha512-6p3nHpby0DM/v15IFKMjAaayFhqnXV52aEmv1whZHX56pdkK+MEaLoQWj+H42ssFarP1PcomVhbsR4pkz09qBg==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.0.tgz", + "integrity": "sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==", "optional": true }, "@esbuild/sunos-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.0.tgz", - "integrity": "sha512-BFelBGfrBwk6LVrmFzCq1u1dZbG4zy/Kp93w2+y83Q5UGYF1d8sCzeLI9NXjKyujjBBniQa8R8PzLFAUrSM9OA==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.0.tgz", + "integrity": "sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==", "optional": true }, "@esbuild/win32-arm64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.0.tgz", - "integrity": "sha512-lY6AC8p4Cnb7xYHuIxQ6iYPe6MfO2CC43XXKo9nBXDb35krYt7KGhQnOkRGar5psxYkircpCqfbNDB4uJbS2jQ==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.0.tgz", + "integrity": "sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==", "optional": true }, "@esbuild/win32-ia32": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.0.tgz", - "integrity": "sha512-7L1bHlOTcO4ByvI7OXVI5pNN6HSu6pUQq9yodga8izeuB1KcT2UkHaH6118QJwopExPn0rMHIseCTx1CRo/uNA==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.0.tgz", + "integrity": "sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==", "optional": true }, "@esbuild/win32-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.0.tgz", - "integrity": "sha512-Arm+WgUFLUATuoxCJcahGuk6Yj9Pzxd6l11Zb/2aAuv5kWWvvfhLFo2fni4uSK5vzlUdCGZ/BdV5tH8klj8p8g==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.0.tgz", + "integrity": "sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==", "optional": true }, "@eslint-community/eslint-utils": { @@ -25088,34 +25088,34 @@ } }, "esbuild": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.0.tgz", - "integrity": "sha512-1lvV17H2bMYda/WaFb2jLPeHU3zml2k4/yagNMG8Q/YtfMjCwEUZa2eXXMgZTVSL5q1n4H7sQ0X6CdJDqqeCFA==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.0.tgz", + "integrity": "sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==", "requires": { - "@esbuild/aix-ppc64": "0.23.0", - "@esbuild/android-arm": "0.23.0", - "@esbuild/android-arm64": "0.23.0", - "@esbuild/android-x64": "0.23.0", - "@esbuild/darwin-arm64": "0.23.0", - "@esbuild/darwin-x64": "0.23.0", - "@esbuild/freebsd-arm64": "0.23.0", - "@esbuild/freebsd-x64": "0.23.0", - "@esbuild/linux-arm": "0.23.0", - "@esbuild/linux-arm64": "0.23.0", - "@esbuild/linux-ia32": "0.23.0", - "@esbuild/linux-loong64": "0.23.0", - "@esbuild/linux-mips64el": "0.23.0", - "@esbuild/linux-ppc64": "0.23.0", - "@esbuild/linux-riscv64": "0.23.0", - "@esbuild/linux-s390x": "0.23.0", - "@esbuild/linux-x64": "0.23.0", - "@esbuild/netbsd-x64": "0.23.0", - "@esbuild/openbsd-arm64": "0.23.0", - "@esbuild/openbsd-x64": "0.23.0", - "@esbuild/sunos-x64": "0.23.0", - "@esbuild/win32-arm64": "0.23.0", - "@esbuild/win32-ia32": "0.23.0", - "@esbuild/win32-x64": "0.23.0" + "@esbuild/aix-ppc64": "0.24.0", + "@esbuild/android-arm": "0.24.0", + "@esbuild/android-arm64": "0.24.0", + "@esbuild/android-x64": "0.24.0", + "@esbuild/darwin-arm64": "0.24.0", + "@esbuild/darwin-x64": "0.24.0", + "@esbuild/freebsd-arm64": "0.24.0", + "@esbuild/freebsd-x64": "0.24.0", + "@esbuild/linux-arm": "0.24.0", + "@esbuild/linux-arm64": "0.24.0", + "@esbuild/linux-ia32": "0.24.0", + "@esbuild/linux-loong64": "0.24.0", + "@esbuild/linux-mips64el": "0.24.0", + "@esbuild/linux-ppc64": "0.24.0", + "@esbuild/linux-riscv64": "0.24.0", + "@esbuild/linux-s390x": "0.24.0", + "@esbuild/linux-x64": "0.24.0", + "@esbuild/netbsd-x64": "0.24.0", + "@esbuild/openbsd-arm64": "0.24.0", + "@esbuild/openbsd-x64": "0.24.0", + "@esbuild/sunos-x64": "0.24.0", + "@esbuild/win32-arm64": "0.24.0", + "@esbuild/win32-ia32": "0.24.0", + "@esbuild/win32-x64": "0.24.0" } }, "esbuild-wasm": { diff --git a/frontend/package.json b/frontend/package.json index 3b5d61be0..415ac74fe 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -92,7 +92,7 @@ "ngx-infinite-scroll": "^17.0.0", "qrcode": "1.5.1", "rxjs": "~7.8.1", - "esbuild": "^0.23.0", + "esbuild": "^0.24.0", "tinyify": "^4.0.0", "tlite": "^0.1.9", "tslib": "~2.7.0", From 05e88a25be1f4ce4a1bba9f2229cdaed0af64506 Mon Sep 17 00:00:00 2001 From: softsimon Date: Mon, 23 Sep 2024 14:15:00 +0800 Subject: [PATCH 052/147] npm audit fix --- frontend/package-lock.json | 211 ++++++++++--------------------------- 1 file changed, 55 insertions(+), 156 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 2b10d398a..9d4e018ef 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -8884,9 +8884,9 @@ } }, "node_modules/engine.io": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.1.tgz", - "integrity": "sha512-mGqhI+D7YxS9KJMppR6Iuo37Ed3abhU8NdfgSvJSDUafQutrN+sPTncJYTyM9+tkhSmWodKtVYGPPHyXJEwEQA==", + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.5.tgz", + "integrity": "sha512-C5Pn8Wk+1vKBoHghJODM63yk8MvrO9EWZUfkAt5HAqIgPE4/8FF0PEGHXtEd40l223+cE5ABWuPzm38PHFXfMA==", "devOptional": true, "dependencies": { "@types/cookie": "^0.4.1", @@ -8897,60 +8897,30 @@ "cookie": "~0.4.1", "cors": "~2.8.5", "debug": "~4.3.1", - "engine.io-parser": "~5.1.0", - "ws": "~8.11.0" + "engine.io-parser": "~5.2.1", + "ws": "~8.17.1" }, "engines": { - "node": ">=10.0.0" + "node": ">=10.2.0" } }, "node_modules/engine.io-client": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.5.3.tgz", - "integrity": "sha512-9Z0qLB0NIisTRt1DZ/8U2k12RJn8yls/nXMZLn+/N8hANT3TcYjKFKcwbw5zFQiN4NTde3TSY9zb79e1ij6j9Q==", + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.5.4.tgz", + "integrity": "sha512-GeZeeRjpD2qf49cZQ0Wvh/8NJNfeXkXXcoGh+F77oEAgo9gUHwT1fCRxSNU+YEEaysOJTnsFHmM5oAcPy4ntvQ==", "devOptional": true, "dependencies": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.1", "engine.io-parser": "~5.2.1", - "ws": "~8.11.0", + "ws": "~8.17.1", "xmlhttprequest-ssl": "~2.0.0" } }, - "node_modules/engine.io-client/node_modules/engine.io-parser": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.2.tgz", - "integrity": "sha512-RcyUFKA93/CXH20l4SoVvzZfrSDMOTUS3bWVpTt2FuFP+XYrL8i8oonHP7WInRyVHXh0n/ORtoeiE1os+8qkSw==", - "devOptional": true, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/engine.io-client/node_modules/ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", - "devOptional": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, "node_modules/engine.io-parser": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.1.0.tgz", - "integrity": "sha512-enySgNiK5tyZFynt3z7iqBR+Bto9EVVVvDFuTT0ioHCGbzirZVGDGiQjZzEp8hWl6hd5FSVytJGuScX1C1C35w==", + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", + "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", "devOptional": true, "engines": { "node": ">=10.0.0" @@ -8965,27 +8935,6 @@ "node": ">= 0.6" } }, - "node_modules/engine.io/node_modules/ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", - "devOptional": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, "node_modules/enhanced-resolve": { "version": "5.15.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", @@ -13406,9 +13355,9 @@ "optional": true }, "node_modules/nise/node_modules/path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.9.0.tgz", + "integrity": "sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==", "optional": true, "dependencies": { "isarray": "0.0.1" @@ -15952,33 +15901,13 @@ } }, "node_modules/socket.io-adapter": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz", - "integrity": "sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==", + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz", + "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==", "devOptional": true, "dependencies": { - "ws": "~8.11.0" - } - }, - "node_modules/socket.io-adapter/node_modules/ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", - "devOptional": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "debug": "~4.3.4", + "ws": "~8.17.1" } }, "node_modules/socket.io-client": { @@ -17860,12 +17789,12 @@ } }, "node_modules/wait-on/node_modules/axios": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz", - "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==", + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", + "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", "optional": true, "dependencies": { - "follow-redirects": "^1.15.0", + "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } @@ -18337,9 +18266,9 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "node_modules/ws": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", - "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", "engines": { "node": ">=10.0.0" }, @@ -24836,9 +24765,9 @@ } }, "engine.io": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.1.tgz", - "integrity": "sha512-mGqhI+D7YxS9KJMppR6Iuo37Ed3abhU8NdfgSvJSDUafQutrN+sPTncJYTyM9+tkhSmWodKtVYGPPHyXJEwEQA==", + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.5.tgz", + "integrity": "sha512-C5Pn8Wk+1vKBoHghJODM63yk8MvrO9EWZUfkAt5HAqIgPE4/8FF0PEGHXtEd40l223+cE5ABWuPzm38PHFXfMA==", "devOptional": true, "requires": { "@types/cookie": "^0.4.1", @@ -24849,8 +24778,8 @@ "cookie": "~0.4.1", "cors": "~2.8.5", "debug": "~4.3.1", - "engine.io-parser": "~5.1.0", - "ws": "~8.11.0" + "engine.io-parser": "~5.2.1", + "ws": "~8.17.1" }, "dependencies": { "cookie": { @@ -24858,48 +24787,26 @@ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", "devOptional": true - }, - "ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", - "devOptional": true, - "requires": {} } } }, "engine.io-client": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.5.3.tgz", - "integrity": "sha512-9Z0qLB0NIisTRt1DZ/8U2k12RJn8yls/nXMZLn+/N8hANT3TcYjKFKcwbw5zFQiN4NTde3TSY9zb79e1ij6j9Q==", + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.5.4.tgz", + "integrity": "sha512-GeZeeRjpD2qf49cZQ0Wvh/8NJNfeXkXXcoGh+F77oEAgo9gUHwT1fCRxSNU+YEEaysOJTnsFHmM5oAcPy4ntvQ==", "devOptional": true, "requires": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.1", "engine.io-parser": "~5.2.1", - "ws": "~8.11.0", + "ws": "~8.17.1", "xmlhttprequest-ssl": "~2.0.0" - }, - "dependencies": { - "engine.io-parser": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.2.tgz", - "integrity": "sha512-RcyUFKA93/CXH20l4SoVvzZfrSDMOTUS3bWVpTt2FuFP+XYrL8i8oonHP7WInRyVHXh0n/ORtoeiE1os+8qkSw==", - "devOptional": true - }, - "ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", - "devOptional": true, - "requires": {} - } } }, "engine.io-parser": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.1.0.tgz", - "integrity": "sha512-enySgNiK5tyZFynt3z7iqBR+Bto9EVVVvDFuTT0ioHCGbzirZVGDGiQjZzEp8hWl6hd5FSVytJGuScX1C1C35w==", + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", + "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", "devOptional": true }, "enhanced-resolve": { @@ -28210,9 +28117,9 @@ "optional": true }, "path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.9.0.tgz", + "integrity": "sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==", "optional": true, "requires": { "isarray": "0.0.1" @@ -30070,21 +29977,13 @@ } }, "socket.io-adapter": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz", - "integrity": "sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==", + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz", + "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==", "devOptional": true, "requires": { - "ws": "~8.11.0" - }, - "dependencies": { - "ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", - "devOptional": true, - "requires": {} - } + "debug": "~4.3.4", + "ws": "~8.17.1" } }, "socket.io-client": { @@ -31339,12 +31238,12 @@ }, "dependencies": { "axios": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz", - "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==", + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", + "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", "optional": true, "requires": { - "follow-redirects": "^1.15.0", + "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } @@ -31674,9 +31573,9 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "ws": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", - "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", "requires": {} }, "xhr2": { From 2a9346f695ea52608edb6cda26f9b331281248ef Mon Sep 17 00:00:00 2001 From: natsoni Date: Mon, 23 Sep 2024 14:47:57 +0200 Subject: [PATCH 053/147] Don't show negative timespans on timeline --- .../acceleration-timeline.component.html | 4 ++-- .../acceleration-timeline.component.ts | 17 +++++++++++------ 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/frontend/src/app/components/acceleration-timeline/acceleration-timeline.component.html b/frontend/src/app/components/acceleration-timeline/acceleration-timeline.component.html index 560e54629..ba0d44884 100644 --- a/frontend/src/app/components/acceleration-timeline/acceleration-timeline.component.html +++ b/frontend/src/app/components/acceleration-timeline/acceleration-timeline.component.html @@ -38,7 +38,7 @@
- +
@@ -46,7 +46,7 @@
@if (tx.status.confirmed) {
- +
} @else if (standardETA && !tx.status.confirmed) { diff --git a/frontend/src/app/components/acceleration-timeline/acceleration-timeline.component.ts b/frontend/src/app/components/acceleration-timeline/acceleration-timeline.component.ts index da0eee4a3..16fd24c7f 100644 --- a/frontend/src/app/components/acceleration-timeline/acceleration-timeline.component.ts +++ b/frontend/src/app/components/acceleration-timeline/acceleration-timeline.component.ts @@ -24,6 +24,8 @@ export class AccelerationTimelineComponent implements OnInit, OnChanges { accelerateRatio: number; useAbsoluteTime: boolean = false; interval: number; + firstSeenToAccelerated: number; + acceleratedToMined: number; tooltipPosition = null; hoverInfo: any = null; @@ -35,8 +37,6 @@ export class AccelerationTimelineComponent implements OnInit, OnChanges { ngOnInit(): void { this.acceleratedAt = this.tx.acceleratedAt ?? new Date().getTime() / 1000; - this.now = Math.floor(new Date().getTime() / 1000); - this.useAbsoluteTime = this.tx.status.block_time < this.now - 7 * 24 * 3600; this.miningService.getPools().subscribe(pools => { for (const pool of pools) { @@ -44,10 +44,8 @@ export class AccelerationTimelineComponent implements OnInit, OnChanges { } }); - this.interval = window.setInterval(() => { - this.now = Math.floor(new Date().getTime() / 1000); - this.useAbsoluteTime = this.tx.status.block_time < this.now - 7 * 24 * 3600; - }, 60000); + this.updateTimes(); + this.interval = window.setInterval(this.updateTimes.bind(this), 60000); } ngOnChanges(changes): void { @@ -64,6 +62,13 @@ export class AccelerationTimelineComponent implements OnInit, OnChanges { // } } + updateTimes(): void { + this.now = Math.floor(new Date().getTime() / 1000); + this.useAbsoluteTime = this.tx.status.block_time < this.now - 7 * 24 * 3600; + this.firstSeenToAccelerated = Math.max(0, this.acceleratedAt - this.transactionTime); + this.acceleratedToMined = Math.max(0, this.tx.status.block_time - this.acceleratedAt); + } + ngOnDestroy(): void { clearInterval(this.interval); } From be49f70b09436884dc8b67528c5a48adc1406b0b Mon Sep 17 00:00:00 2001 From: Mononaut Date: Thu, 1 Aug 2024 18:19:13 +0000 Subject: [PATCH 054/147] [accelerator] get acceleration updates over websocket --- backend/src/api/mempool.ts | 58 +--------- backend/src/api/mining/mining-routes.ts | 2 +- backend/src/api/services/acceleration.ts | 136 ++++++++++++++++++++++- backend/src/api/websocket-handler.ts | 48 +++++++- backend/src/index.ts | 8 +- 5 files changed, 187 insertions(+), 65 deletions(-) diff --git a/backend/src/api/mempool.ts b/backend/src/api/mempool.ts index 1442b05fa..87e7f10cd 100644 --- a/backend/src/api/mempool.ts +++ b/backend/src/api/mempool.ts @@ -10,6 +10,7 @@ import bitcoinClient from './bitcoin/bitcoin-client'; import bitcoinSecondClient from './bitcoin/bitcoin-second-client'; import rbfCache from './rbf-cache'; import { Acceleration } from './services/acceleration'; +import accelerationApi from './services/acceleration'; import redisCache from './redis-cache'; import blocks from './blocks'; @@ -207,7 +208,7 @@ class Mempool { return txTimes; } - public async $updateMempool(transactions: string[], accelerations: Acceleration[] | null, minFeeMempool: string[], minFeeTip: number, pollRate: number): Promise { + public async $updateMempool(transactions: string[], accelerations: Record | null, minFeeMempool: string[], minFeeTip: number, pollRate: number): Promise { logger.debug(`Updating mempool...`); // warn if this run stalls the main loop for more than 2 minutes @@ -354,7 +355,7 @@ class Mempool { const newTransactionsStripped = newTransactions.map((tx) => Common.stripTransaction(tx)); this.latestTransactions = newTransactionsStripped.concat(this.latestTransactions).slice(0, 6); - const accelerationDelta = accelerations != null ? await this.$updateAccelerations(accelerations) : []; + const accelerationDelta = accelerations != null ? await this.updateAccelerations(accelerations) : []; if (accelerationDelta.length) { hasChange = true; } @@ -399,58 +400,11 @@ class Mempool { return this.accelerations; } - public $updateAccelerations(newAccelerations: Acceleration[]): string[] { + public updateAccelerations(newAccelerationMap: Record): string[] { try { - const changed: string[] = []; - - const newAccelerationMap: { [txid: string]: Acceleration } = {}; - for (const acceleration of newAccelerations) { - // skip transactions we don't know about - if (!this.mempoolCache[acceleration.txid]) { - continue; - } - newAccelerationMap[acceleration.txid] = acceleration; - if (this.accelerations[acceleration.txid] == null) { - // new acceleration - changed.push(acceleration.txid); - } else { - if (this.accelerations[acceleration.txid].feeDelta !== acceleration.feeDelta) { - // feeDelta changed - changed.push(acceleration.txid); - } else if (this.accelerations[acceleration.txid].pools?.length) { - let poolsChanged = false; - const pools = new Set(); - this.accelerations[acceleration.txid].pools.forEach(pool => { - pools.add(pool); - }); - acceleration.pools.forEach(pool => { - if (!pools.has(pool)) { - poolsChanged = true; - } else { - pools.delete(pool); - } - }); - if (pools.size > 0) { - poolsChanged = true; - } - if (poolsChanged) { - // pools changed - changed.push(acceleration.txid); - } - } - } - } - - for (const oldTxid of Object.keys(this.accelerations)) { - if (!newAccelerationMap[oldTxid]) { - // removed - changed.push(oldTxid); - } - } - + const accelerationDelta = accelerationApi.getAccelerationDelta(this.accelerations, newAccelerationMap); this.accelerations = newAccelerationMap; - - return changed; + return accelerationDelta; } catch (e: any) { logger.debug(`Failed to update accelerations: ` + (e instanceof Error ? e.message : e)); return []; diff --git a/backend/src/api/mining/mining-routes.ts b/backend/src/api/mining/mining-routes.ts index 69e6d95d4..80f9f8e79 100644 --- a/backend/src/api/mining/mining-routes.ts +++ b/backend/src/api/mining/mining-routes.ts @@ -459,7 +459,7 @@ class MiningRoutes { handleError(req, res, 400, 'Acceleration data is not available.'); return; } - res.status(200).send(accelerationApi.accelerations || []); + res.status(200).send(Object.values(accelerationApi.getAccelerations() || {})); } catch (e) { handleError(req, res, 500, e instanceof Error ? e.message : e); } diff --git a/backend/src/api/services/acceleration.ts b/backend/src/api/services/acceleration.ts index 88289382b..f625b7f15 100644 --- a/backend/src/api/services/acceleration.ts +++ b/backend/src/api/services/acceleration.ts @@ -1,7 +1,10 @@ +import { WebSocket } from 'ws'; import config from '../../config'; import logger from '../../logger'; import { BlockExtended } from '../../mempool.interfaces'; import axios from 'axios'; +import mempool from '../mempool'; +import websocketHandler from '../websocket-handler'; type MyAccelerationStatus = 'requested' | 'accelerating' | 'done'; @@ -37,14 +40,20 @@ export interface AccelerationHistory { }; class AccelerationApi { + private ws: WebSocket | null = null; + private useWebsocket: boolean = config.MEMPOOL.OFFICIAL && config.MEMPOOL_SERVICES.ACCELERATIONS; + private startedWebsocketLoop: boolean = false; + private websocketConnected: boolean = false; private onDemandPollingEnabled = !config.MEMPOOL_SERVICES.ACCELERATIONS; private apiPath = config.MEMPOOL.OFFICIAL ? (config.MEMPOOL_SERVICES.API + '/accelerator/accelerations') : (config.EXTERNAL_DATA_SERVER.MEMPOOL_API + '/accelerations'); - private _accelerations: Acceleration[] | null = null; + private _accelerations: Record = {}; private lastPoll = 0; private forcePoll = false; private myAccelerations: Record = {}; - public get accelerations(): Acceleration[] | null { + public constructor() {} + + public getAccelerations(): Record { return this._accelerations; } @@ -72,11 +81,18 @@ class AccelerationApi { } } - public async $updateAccelerations(): Promise { + public async $updateAccelerations(): Promise | null> { + if (this.useWebsocket && this.websocketConnected) { + return this._accelerations; + } if (!this.onDemandPollingEnabled) { const accelerations = await this.$fetchAccelerations(); if (accelerations) { - this._accelerations = accelerations; + const latestAccelerations = {}; + for (const acc of accelerations) { + latestAccelerations[acc.txid] = acc; + } + this._accelerations = latestAccelerations; return this._accelerations; } } else { @@ -85,7 +101,7 @@ class AccelerationApi { return null; } - private async $updateAccelerationsOnDemand(): Promise { + private async $updateAccelerationsOnDemand(): Promise | null> { const shouldUpdate = this.forcePoll || this.countMyAccelerationsWithStatus('requested') > 0 || (this.countMyAccelerationsWithStatus('accelerating') > 0 && this.lastPoll < (Date.now() - (10 * 60 * 1000))); @@ -120,7 +136,11 @@ class AccelerationApi { } } - this._accelerations = Object.values(this.myAccelerations).map(({ acceleration }) => acceleration).filter(acc => acc) as Acceleration[]; + const latestAccelerations = {}; + for (const acc of Object.values(this.myAccelerations).map(({ acceleration }) => acceleration).filter(acc => acc) as Acceleration[]) { + latestAccelerations[acc.txid] = acc; + } + this._accelerations = latestAccelerations; return this._accelerations; } @@ -152,6 +172,110 @@ class AccelerationApi { } return anyAccelerated; } + + // get a list of accelerations that have changed between two sets of accelerations + public getAccelerationDelta(oldAccelerationMap: Record, newAccelerationMap: Record): string[] { + const changed: string[] = []; + const mempoolCache = mempool.getMempool(); + + for (const acceleration of Object.values(newAccelerationMap)) { + // skip transactions we don't know about + if (!mempoolCache[acceleration.txid]) { + continue; + } + if (oldAccelerationMap[acceleration.txid] == null) { + // new acceleration + changed.push(acceleration.txid); + } else { + if (oldAccelerationMap[acceleration.txid].feeDelta !== acceleration.feeDelta) { + // feeDelta changed + changed.push(acceleration.txid); + } else if (oldAccelerationMap[acceleration.txid].pools?.length) { + let poolsChanged = false; + const pools = new Set(); + oldAccelerationMap[acceleration.txid].pools.forEach(pool => { + pools.add(pool); + }); + acceleration.pools.forEach(pool => { + if (!pools.has(pool)) { + poolsChanged = true; + } else { + pools.delete(pool); + } + }); + if (pools.size > 0) { + poolsChanged = true; + } + if (poolsChanged) { + // pools changed + changed.push(acceleration.txid); + } + } + } + } + + for (const oldTxid of Object.keys(oldAccelerationMap)) { + if (!newAccelerationMap[oldTxid]) { + // removed + changed.push(oldTxid); + } + } + + return changed; + } + + private handleWebsocketMessage(msg: any): void { + if (msg?.accelerations !== null) { + const latestAccelerations = {}; + for (const acc of msg?.accelerations || []) { + latestAccelerations[acc.txid] = acc; + } + this._accelerations = latestAccelerations; + websocketHandler.handleAccelerationsChanged(this._accelerations); + } + } + + public async connectWebsocket(): Promise { + if (this.startedWebsocketLoop) { + return; + } + while (this.useWebsocket) { + this.startedWebsocketLoop = true; + if (!this.ws) { + this.ws = new WebSocket(`${config.MEMPOOL_SERVICES.API.replace('https://', 'ws://').replace('http://', 'ws://')}/accelerator/ws`); + this.websocketConnected = true; + + this.ws.on('open', () => { + logger.info('Acceleration websocket opened'); + this.ws?.send(JSON.stringify({ + 'watch-accelerations': true + })); + }); + + this.ws.on('error', (error) => { + logger.err('Acceleration websocket error: ' + error); + this.ws = null; + this.websocketConnected = false; + }); + + this.ws.on('close', () => { + logger.info('Acceleration websocket closed'); + this.ws = null; + this.websocketConnected = false; + }); + + this.ws.on('message', (data, isBinary) => { + try { + const parsedMsg = JSON.parse((isBinary ? data : data.toString()) as string); + this.handleWebsocketMessage(parsedMsg); + } catch (e) { + logger.warn('Failed to parse acceleration websocket message: ' + (e instanceof Error ? e.message : e)); + } + }); + } + await new Promise(resolve => setTimeout(resolve, 5000)); + } + } } export default new AccelerationApi(); \ No newline at end of file diff --git a/backend/src/api/websocket-handler.ts b/backend/src/api/websocket-handler.ts index 2a047472e..634596bb9 100644 --- a/backend/src/api/websocket-handler.ts +++ b/backend/src/api/websocket-handler.ts @@ -21,6 +21,7 @@ import BlocksSummariesRepository from '../repositories/BlocksSummariesRepository import Audit from './audit'; import priceUpdater from '../tasks/price-updater'; import { ApiPrice } from '../repositories/PricesRepository'; +import { Acceleration } from './services/acceleration'; import accelerationApi from './services/acceleration'; import mempool from './mempool'; import statistics from './statistics/statistics'; @@ -57,6 +58,8 @@ class WebsocketHandler { private lastRbfSummary: ReplacementInfo[] | null = null; private mempoolSequence: number = 0; + private accelerations: Record = {}; + constructor() { } addWebsocketServer(wss: WebSocket.Server) { @@ -484,6 +487,42 @@ class WebsocketHandler { } } + handleAccelerationsChanged(accelerations: Record): void { + if (!this.webSocketServers.length) { + throw new Error('No WebSocket.Server has been set'); + } + + const websocketAccelerationDelta = accelerationApi.getAccelerationDelta(this.accelerations, accelerations); + this.accelerations = accelerations; + + if (!websocketAccelerationDelta.length) { + return; + } + + // pre-compute acceleration delta + const accelerationUpdate = { + added: websocketAccelerationDelta.map(txid => accelerations[txid]).filter(acc => acc != null), + removed: websocketAccelerationDelta.filter(txid => !accelerations[txid]), + }; + + try { + const response = JSON.stringify({ + accelerations: accelerationUpdate, + }); + + for (const server of this.webSocketServers) { + server.clients.forEach((client) => { + if (client.readyState !== WebSocket.OPEN) { + return; + } + client.send(response); + }); + } + } catch (e) { + logger.debug(`Error sending acceleration update to websocket clients: ${e}`); + } + } + handleReorg(): void { if (!this.webSocketServers.length) { throw new Error('No WebSocket.Server have been set'); @@ -560,7 +599,7 @@ class WebsocketHandler { const vBytesPerSecond = memPool.getVBytesPerSecond(); const rbfTransactions = Common.findRbfTransactions(newTransactions, recentlyDeletedTransactions.flat()); const da = difficultyAdjustment.getDifficultyAdjustment(); - const accelerations = memPool.getAccelerations(); + const accelerations = accelerationApi.getAccelerations(); memPool.handleRbfTransactions(rbfTransactions); const rbfChanges = rbfCache.getRbfChanges(); let rbfReplacements; @@ -668,10 +707,13 @@ class WebsocketHandler { const addressCache = this.makeAddressCache(newTransactions); const removedAddressCache = this.makeAddressCache(deletedTransactions); + const websocketAccelerationDelta = accelerationApi.getAccelerationDelta(this.accelerations, accelerations); + this.accelerations = accelerations; + // pre-compute acceleration delta const accelerationUpdate = { - added: accelerationDelta.map(txid => accelerations[txid]).filter(acc => acc != null), - removed: accelerationDelta.filter(txid => !accelerations[txid]), + added: websocketAccelerationDelta.map(txid => accelerations[txid]).filter(acc => acc != null), + removed: websocketAccelerationDelta.filter(txid => !accelerations[txid]), }; // TODO - Fix indentation after PR is merged diff --git a/backend/src/index.ts b/backend/src/index.ts index 1d83c56a3..84a7e5705 100644 --- a/backend/src/index.ts +++ b/backend/src/index.ts @@ -229,11 +229,11 @@ class Server { const newMempool = await bitcoinApi.$getRawMempool(); const minFeeMempool = memPool.limitGBT ? await bitcoinSecondClient.getRawMemPool() : null; const minFeeTip = memPool.limitGBT ? await bitcoinSecondClient.getBlockCount() : -1; - const newAccelerations = await accelerationApi.$updateAccelerations(); + const latestAccelerations = await accelerationApi.$updateAccelerations(); const numHandledBlocks = await blocks.$updateBlocks(); const pollRate = config.MEMPOOL.POLL_RATE_MS * (indexer.indexerIsRunning() ? 10 : 1); if (numHandledBlocks === 0) { - await memPool.$updateMempool(newMempool, newAccelerations, minFeeMempool, minFeeTip, pollRate); + await memPool.$updateMempool(newMempool, latestAccelerations, minFeeMempool, minFeeTip, pollRate); } indexer.$run(); if (config.FIAT_PRICE.ENABLED) { @@ -310,8 +310,10 @@ class Server { priceUpdater.setRatesChangedCallback(websocketHandler.handleNewConversionRates.bind(websocketHandler)); } loadingIndicators.setProgressChangedCallback(websocketHandler.handleLoadingChanged.bind(websocketHandler)); + + accelerationApi.connectWebsocket(); } - + setUpHttpApiRoutes(): void { bitcoinRoutes.initRoutes(this.app); bitcoinCoreRoutes.initRoutes(this.app); From e6dbde952eaa19685007e14261bdf44e80f872cc Mon Sep 17 00:00:00 2001 From: BitcoinMechanic Date: Mon, 23 Sep 2024 12:36:10 -0700 Subject: [PATCH 055/147] Strip non-alphanumeric chars from miner names --- .../blockchain-blocks.component.html | 13 ++----------- .../blockchain-blocks.component.ts | 1 + 2 files changed, 3 insertions(+), 11 deletions(-) diff --git a/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.html b/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.html index 79b9cea62..128d18774 100644 --- a/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.html +++ b/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -62,17 +62,8 @@
-
- {{ block.extras.pool.minerNames[1] }} -
- - {{ block.extras.pool.name }} -
-
- - - {{ block.extras.pool.minerNames[1] }} - + + {{ block.extras.pool.minerNames[1] }}
{{ block.extras.pool.name }} diff --git a/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.ts b/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.ts index 512886f23..7846b66a2 100644 --- a/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.ts +++ b/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.ts @@ -283,6 +283,7 @@ export class BlockchainBlocksComponent implements OnInit, OnChanges, OnDestroy { block.extras.maxFee = this.getMaxBlockFee(block); if (block.extras.pool?.minerNames) { block.extras.pool.minerNames = block.extras.pool.minerNames.map((name) => { + name = name.replace(/[^a-zA-Z0-9 ]/g, ''); if (name.length > 16) { return name.slice(0, 16) + '…'; } From 9984621e5e3f8cede57c8d862d6b3b37122cac91 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Tue, 24 Sep 2024 15:33:08 +0000 Subject: [PATCH 056/147] refactor static time formatting into new service --- frontend/src/app/app.module.ts | 2 + .../src/app/components/time/time.component.ts | 262 +----------------- .../utxo-graph/utxo-graph.component.ts | 6 +- 3 files changed, 9 insertions(+), 261 deletions(-) diff --git a/frontend/src/app/app.module.ts b/frontend/src/app/app.module.ts index 50bbd88b9..d1129a602 100644 --- a/frontend/src/app/app.module.ts +++ b/frontend/src/app/app.module.ts @@ -21,6 +21,7 @@ import { StorageService } from './services/storage.service'; import { HttpCacheInterceptor } from './services/http-cache.interceptor'; import { LanguageService } from './services/language.service'; import { ThemeService } from './services/theme.service'; +import { TimeService } from './services/time.service'; import { FiatShortenerPipe } from './shared/pipes/fiat-shortener.pipe'; import { FiatCurrencyPipe } from './shared/pipes/fiat-currency.pipe'; import { ShortenStringPipe } from './shared/pipes/shorten-string-pipe/shorten-string.pipe'; @@ -42,6 +43,7 @@ const providers = [ EnterpriseService, LanguageService, ThemeService, + TimeService, ShortenStringPipe, FiatShortenerPipe, FiatCurrencyPipe, diff --git a/frontend/src/app/components/time/time.component.ts b/frontend/src/app/components/time/time.component.ts index f0c73c80b..6360bca4a 100644 --- a/frontend/src/app/components/time/time.component.ts +++ b/frontend/src/app/components/time/time.component.ts @@ -1,29 +1,6 @@ import { Component, OnInit, OnDestroy, ChangeDetectionStrategy, Input, ChangeDetectorRef, OnChanges } from '@angular/core'; import { StateService } from '../../services/state.service'; -import { dates } from '../../shared/i18n/dates'; -import { DatePipe } from '@angular/common'; - -const datePipe = new DatePipe(navigator.language || 'en-US'); - -const intervals = { - year: 31536000, - month: 2592000, - week: 604800, - day: 86400, - hour: 3600, - minute: 60, - second: 1 -}; - -const precisionThresholds = { - year: 100, - month: 18, - week: 12, - day: 31, - hour: 48, - minute: 90, - second: 90 -}; +import { TimeService } from '../../services/time.service'; @Component({ selector: 'app-time', @@ -52,6 +29,7 @@ export class TimeComponent implements OnInit, OnChanges, OnDestroy { constructor( private ref: ChangeDetectorRef, private stateService: StateService, + private timeService: TimeService, ) {} ngOnInit() { @@ -79,7 +57,7 @@ export class TimeComponent implements OnInit, OnChanges, OnDestroy { } calculateTime(): void { - const { text, tooltip } = TimeComponent.calculate( + const { text, tooltip } = this.timeService.calculate( this.time, this.kind, this.relative, @@ -95,238 +73,4 @@ export class TimeComponent implements OnInit, OnChanges, OnDestroy { this.text = text; this.tooltip = tooltip; } - - static calculate( - time: number, - kind: 'plain' | 'since' | 'until' | 'span' | 'before' | 'within', - relative: boolean = false, - precision: number = 0, - minUnit: 'year' | 'month' | 'week' | 'day' | 'hour' | 'minute' | 'second' = 'second', - showTooltip: boolean = false, - units: string[] = ['year', 'month', 'week', 'day', 'hour', 'minute', 'second'], - dateString?: string, - lowercaseStart: boolean = false, - numUnits: number = 1, - fractionDigits: number = 0, - ): { text: string, tooltip: string } { - if (time == null) { - return { text: '', tooltip: '' }; - } - - let seconds: number; - let tooltip: string = ''; - switch (kind) { - case 'since': - seconds = Math.floor((+new Date() - +new Date(dateString || time * 1000)) / 1000); - tooltip = datePipe.transform(new Date(dateString || time * 1000), 'yyyy-MM-dd HH:mm'); - break; - case 'until': - case 'within': - seconds = (+new Date(time) - +new Date()) / 1000; - tooltip = datePipe.transform(new Date(time), 'yyyy-MM-dd HH:mm'); - break; - default: - seconds = Math.floor(time); - tooltip = ''; - } - - if (!showTooltip || relative) { - tooltip = ''; - } - - if (seconds < 1 && kind === 'span') { - return { tooltip, text: $localize`:@@date-base.immediately:Immediately` }; - } else if (seconds < 60) { - if (relative || kind === 'since') { - if (lowercaseStart) { - return { tooltip, text: $localize`:@@date-base.just-now:Just now`.charAt(0).toLowerCase() + $localize`:@@date-base.just-now:Just now`.slice(1) }; - } - return { tooltip, text: $localize`:@@date-base.just-now:Just now` }; - } else if (kind === 'until' || kind === 'within') { - seconds = 60; - } - } - - let counter: number; - const result = []; - let usedUnits = 0; - for (const [index, unit] of units.entries()) { - let precisionUnit = units[Math.min(units.length - 1, index + precision)]; - counter = Math.floor(seconds / intervals[unit]); - const precisionCounter = Math.round(seconds / intervals[precisionUnit]); - if (precisionCounter > precisionThresholds[precisionUnit]) { - precisionUnit = unit; - } - if (units.indexOf(precisionUnit) === units.indexOf(minUnit)) { - counter = Math.max(1, counter); - } - if (counter > 0) { - let rounded; - const roundFactor = Math.pow(10,fractionDigits || 0); - if ((kind === 'until' || kind === 'within') && usedUnits < numUnits) { - rounded = Math.floor((seconds / intervals[precisionUnit]) * roundFactor) / roundFactor; - } else { - rounded = Math.round((seconds / intervals[precisionUnit]) * roundFactor) / roundFactor; - } - if ((kind !== 'until' && kind !== 'within')|| numUnits === 1) { - return { tooltip, text: TimeComponent.formatTime(kind, precisionUnit, rounded) }; - } else { - if (!usedUnits) { - result.push(TimeComponent.formatTime(kind, precisionUnit, rounded)); - } else { - result.push(TimeComponent.formatTime('', precisionUnit, rounded)); - } - seconds -= (rounded * intervals[precisionUnit]); - usedUnits++; - if (usedUnits >= numUnits) { - return { tooltip, text: result.join(', ') }; - } - } - } - } - return { tooltip, text: result.join(', ') }; - } - - static formatTime(kind, unit, number): string { - const dateStrings = dates(number); - switch (kind) { - case 'since': - if (number === 1) { - switch (unit) { // singular (1 day) - case 'year': return $localize`:@@time-since:${dateStrings.i18nYear}:DATE: ago`; break; - case 'month': return $localize`:@@time-since:${dateStrings.i18nMonth}:DATE: ago`; break; - case 'week': return $localize`:@@time-since:${dateStrings.i18nWeek}:DATE: ago`; break; - case 'day': return $localize`:@@time-since:${dateStrings.i18nDay}:DATE: ago`; break; - case 'hour': return $localize`:@@time-since:${dateStrings.i18nHour}:DATE: ago`; break; - case 'minute': return $localize`:@@time-since:${dateStrings.i18nMinute}:DATE: ago`; break; - case 'second': return $localize`:@@time-since:${dateStrings.i18nSecond}:DATE: ago`; break; - } - } else { - switch (unit) { // plural (2 days) - case 'year': return $localize`:@@time-since:${dateStrings.i18nYears}:DATE: ago`; break; - case 'month': return $localize`:@@time-since:${dateStrings.i18nMonths}:DATE: ago`; break; - case 'week': return $localize`:@@time-since:${dateStrings.i18nWeeks}:DATE: ago`; break; - case 'day': return $localize`:@@time-since:${dateStrings.i18nDays}:DATE: ago`; break; - case 'hour': return $localize`:@@time-since:${dateStrings.i18nHours}:DATE: ago`; break; - case 'minute': return $localize`:@@time-since:${dateStrings.i18nMinutes}:DATE: ago`; break; - case 'second': return $localize`:@@time-since:${dateStrings.i18nSeconds}:DATE: ago`; break; - } - } - break; - case 'until': - if (number === 1) { - switch (unit) { // singular (In ~1 day) - case 'year': return $localize`:@@time-until:In ~${dateStrings.i18nYear}:DATE:`; break; - case 'month': return $localize`:@@time-until:In ~${dateStrings.i18nMonth}:DATE:`; break; - case 'week': return $localize`:@@time-until:In ~${dateStrings.i18nWeek}:DATE:`; break; - case 'day': return $localize`:@@time-until:In ~${dateStrings.i18nDay}:DATE:`; break; - case 'hour': return $localize`:@@time-until:In ~${dateStrings.i18nHour}:DATE:`; break; - case 'minute': return $localize`:@@time-until:In ~${dateStrings.i18nMinute}:DATE:`; - case 'second': return $localize`:@@time-until:In ~${dateStrings.i18nSecond}:DATE:`; - } - } else { - switch (unit) { // plural (In ~2 days) - case 'year': return $localize`:@@time-until:In ~${dateStrings.i18nYears}:DATE:`; break; - case 'month': return $localize`:@@time-until:In ~${dateStrings.i18nMonths}:DATE:`; break; - case 'week': return $localize`:@@time-until:In ~${dateStrings.i18nWeeks}:DATE:`; break; - case 'day': return $localize`:@@time-until:In ~${dateStrings.i18nDays}:DATE:`; break; - case 'hour': return $localize`:@@time-until:In ~${dateStrings.i18nHours}:DATE:`; break; - case 'minute': return $localize`:@@time-until:In ~${dateStrings.i18nMinutes}:DATE:`; break; - case 'second': return $localize`:@@time-until:In ~${dateStrings.i18nSeconds}:DATE:`; break; - } - } - break; - case 'within': - if (number === 1) { - switch (unit) { // singular (In ~1 day) - case 'year': return $localize`:@@time-within:within ~${dateStrings.i18nYear}:DATE:`; break; - case 'month': return $localize`:@@time-within:within ~${dateStrings.i18nMonth}:DATE:`; break; - case 'week': return $localize`:@@time-within:within ~${dateStrings.i18nWeek}:DATE:`; break; - case 'day': return $localize`:@@time-within:within ~${dateStrings.i18nDay}:DATE:`; break; - case 'hour': return $localize`:@@time-within:within ~${dateStrings.i18nHour}:DATE:`; break; - case 'minute': return $localize`:@@time-within:within ~${dateStrings.i18nMinute}:DATE:`; - case 'second': return $localize`:@@time-within:within ~${dateStrings.i18nSecond}:DATE:`; - } - } else { - switch (unit) { // plural (In ~2 days) - case 'year': return $localize`:@@time-within:within ~${dateStrings.i18nYears}:DATE:`; break; - case 'month': return $localize`:@@time-within:within ~${dateStrings.i18nMonths}:DATE:`; break; - case 'week': return $localize`:@@time-within:within ~${dateStrings.i18nWeeks}:DATE:`; break; - case 'day': return $localize`:@@time-within:within ~${dateStrings.i18nDays}:DATE:`; break; - case 'hour': return $localize`:@@time-within:within ~${dateStrings.i18nHours}:DATE:`; break; - case 'minute': return $localize`:@@time-within:within ~${dateStrings.i18nMinutes}:DATE:`; break; - case 'second': return $localize`:@@time-within:within ~${dateStrings.i18nSeconds}:DATE:`; break; - } - } - break; - case 'span': - if (number === 1) { - switch (unit) { // singular (1 day) - case 'year': return $localize`:@@time-span:After ${dateStrings.i18nYear}:DATE:`; break; - case 'month': return $localize`:@@time-span:After ${dateStrings.i18nMonth}:DATE:`; break; - case 'week': return $localize`:@@time-span:After ${dateStrings.i18nWeek}:DATE:`; break; - case 'day': return $localize`:@@time-span:After ${dateStrings.i18nDay}:DATE:`; break; - case 'hour': return $localize`:@@time-span:After ${dateStrings.i18nHour}:DATE:`; break; - case 'minute': return $localize`:@@time-span:After ${dateStrings.i18nMinute}:DATE:`; break; - case 'second': return $localize`:@@time-span:After ${dateStrings.i18nSecond}:DATE:`; break; - } - } else { - switch (unit) { // plural (2 days) - case 'year': return $localize`:@@time-span:After ${dateStrings.i18nYears}:DATE:`; break; - case 'month': return $localize`:@@time-span:After ${dateStrings.i18nMonths}:DATE:`; break; - case 'week': return $localize`:@@time-span:After ${dateStrings.i18nWeeks}:DATE:`; break; - case 'day': return $localize`:@@time-span:After ${dateStrings.i18nDays}:DATE:`; break; - case 'hour': return $localize`:@@time-span:After ${dateStrings.i18nHours}:DATE:`; break; - case 'minute': return $localize`:@@time-span:After ${dateStrings.i18nMinutes}:DATE:`; break; - case 'second': return $localize`:@@time-span:After ${dateStrings.i18nSeconds}:DATE:`; break; - } - } - break; - case 'before': - if (number === 1) { - switch (unit) { // singular (1 day) - case 'year': return $localize`:@@time-before:${dateStrings.i18nYear}:DATE: before`; break; - case 'month': return $localize`:@@time-before:${dateStrings.i18nMonth}:DATE: before`; break; - case 'week': return $localize`:@@time-before:${dateStrings.i18nWeek}:DATE: before`; break; - case 'day': return $localize`:@@time-before:${dateStrings.i18nDay}:DATE: before`; break; - case 'hour': return $localize`:@@time-before:${dateStrings.i18nHour}:DATE: before`; break; - case 'minute': return $localize`:@@time-before:${dateStrings.i18nMinute}:DATE: before`; break; - case 'second': return $localize`:@@time-before:${dateStrings.i18nSecond}:DATE: before`; break; - } - } else { - switch (unit) { // plural (2 days) - case 'year': return $localize`:@@time-before:${dateStrings.i18nYears}:DATE: before`; break; - case 'month': return $localize`:@@time-before:${dateStrings.i18nMonths}:DATE: before`; break; - case 'week': return $localize`:@@time-before:${dateStrings.i18nWeeks}:DATE: before`; break; - case 'day': return $localize`:@@time-before:${dateStrings.i18nDays}:DATE: before`; break; - case 'hour': return $localize`:@@time-before:${dateStrings.i18nHours}:DATE: before`; break; - case 'minute': return $localize`:@@time-before:${dateStrings.i18nMinutes}:DATE: before`; break; - case 'second': return $localize`:@@time-before:${dateStrings.i18nSeconds}:DATE: before`; break; - } - } - break; - default: - if (number === 1) { - switch (unit) { // singular (1 day) - case 'year': return dateStrings.i18nYear; break; - case 'month': return dateStrings.i18nMonth; break; - case 'week': return dateStrings.i18nWeek; break; - case 'day': return dateStrings.i18nDay; break; - case 'hour': return dateStrings.i18nHour; break; - case 'minute': return dateStrings.i18nMinute; break; - case 'second': return dateStrings.i18nSecond; break; - } - } else { - switch (unit) { // plural (2 days) - case 'year': return dateStrings.i18nYears; break; - case 'month': return dateStrings.i18nMonths; break; - case 'week': return dateStrings.i18nWeeks; break; - case 'day': return dateStrings.i18nDays; break; - case 'hour': return dateStrings.i18nHours; break; - case 'minute': return dateStrings.i18nMinutes; break; - case 'second': return dateStrings.i18nSeconds; break; - } - } - } - } } diff --git a/frontend/src/app/components/utxo-graph/utxo-graph.component.ts b/frontend/src/app/components/utxo-graph/utxo-graph.component.ts index 91dc70240..310ff0356 100644 --- a/frontend/src/app/components/utxo-graph/utxo-graph.component.ts +++ b/frontend/src/app/components/utxo-graph/utxo-graph.component.ts @@ -1,6 +1,6 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, NgZone, OnChanges, OnDestroy, SimpleChanges } from '@angular/core'; import { EChartsOption } from '../../graphs/echarts'; -import { BehaviorSubject, Subscription } from 'rxjs'; +import { Subscription } from 'rxjs'; import { Utxo } from '../../interfaces/electrs.interface'; import { StateService } from '../../services/state.service'; import { Router } from '@angular/router'; @@ -8,6 +8,7 @@ import { RelativeUrlPipe } from '../../shared/pipes/relative-url/relative-url.pi import { renderSats } from '../../shared/common.utils'; import { colorToHex, hexToColor, mix } from '../block-overview-graph/utils'; import { TimeComponent } from '../time/time.component'; +import { TimeService } from '../../services/time.service'; const newColorHex = '1bd8f4'; const oldColorHex = '9339f4'; @@ -55,6 +56,7 @@ export class UtxoGraphComponent implements OnChanges, OnDestroy { private zone: NgZone, private router: Router, private relativeUrlPipe: RelativeUrlPipe, + private timeService: TimeService, ) { // re-render the chart every 10 seconds, to keep the age colors up to date this.updateInterval = setInterval(() => { @@ -276,7 +278,7 @@ export class UtxoGraphComponent implements OnChanges, OnDestroy {
${valueStr}
- ${utxo.status.confirmed ? 'Confirmed ' + TimeComponent.calculate(utxo.status.block_time, 'since', true, 1, 'minute').text : 'Pending'} + ${utxo.status.confirmed ? 'Confirmed ' + this.timeService.calculate(utxo.status.block_time, 'since', true, 1, 'minute').text : 'Pending'} `; }, } From 9091fc92101ee5393a4ea0f50ae742ac62e5d268 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Tue, 24 Sep 2024 15:55:23 +0000 Subject: [PATCH 057/147] add missing time.service.ts file --- frontend/src/app/services/time.service.ts | 266 ++++++++++++++++++++++ 1 file changed, 266 insertions(+) create mode 100644 frontend/src/app/services/time.service.ts diff --git a/frontend/src/app/services/time.service.ts b/frontend/src/app/services/time.service.ts new file mode 100644 index 000000000..6f7978774 --- /dev/null +++ b/frontend/src/app/services/time.service.ts @@ -0,0 +1,266 @@ +import { Injectable } from '@angular/core'; +import { DatePipe } from '@angular/common'; +import { dates } from '../shared/i18n/dates'; + +const intervals = { + year: 31536000, + month: 2592000, + week: 604800, + day: 86400, + hour: 3600, + minute: 60, + second: 1 +}; + +const precisionThresholds = { + year: 100, + month: 18, + week: 12, + day: 31, + hour: 48, + minute: 90, + second: 90 +}; + +@Injectable({ + providedIn: 'root' +}) +export class TimeService { + + constructor(private datePipe: DatePipe) {} + + calculate( + time: number, + kind: 'plain' | 'since' | 'until' | 'span' | 'before' | 'within', + relative: boolean = false, + precision: number = 0, + minUnit: 'year' | 'month' | 'week' | 'day' | 'hour' | 'minute' | 'second' = 'second', + showTooltip: boolean = false, + units: string[] = ['year', 'month', 'week', 'day', 'hour', 'minute', 'second'], + dateString?: string, + lowercaseStart: boolean = false, + numUnits: number = 1, + fractionDigits: number = 0, + ): { text: string, tooltip: string } { + if (time == null) { + return { text: '', tooltip: '' }; + } + + let seconds: number; + let tooltip: string = ''; + switch (kind) { + case 'since': + seconds = Math.floor((+new Date() - +new Date(dateString || time * 1000)) / 1000); + tooltip = this.datePipe.transform(new Date(dateString || time * 1000), 'yyyy-MM-dd HH:mm') || ''; + break; + case 'until': + case 'within': + seconds = (+new Date(time) - +new Date()) / 1000; + tooltip = this.datePipe.transform(new Date(time), 'yyyy-MM-dd HH:mm') || ''; + break; + default: + seconds = Math.floor(time); + tooltip = ''; + } + + if (!showTooltip || relative) { + tooltip = ''; + } + + if (seconds < 1 && kind === 'span') { + return { tooltip, text: $localize`:@@date-base.immediately:Immediately` }; + } else if (seconds < 60) { + if (relative || kind === 'since') { + if (lowercaseStart) { + return { tooltip, text: $localize`:@@date-base.just-now:Just now`.charAt(0).toLowerCase() + $localize`:@@date-base.just-now:Just now`.slice(1) }; + } + return { tooltip, text: $localize`:@@date-base.just-now:Just now` }; + } else if (kind === 'until' || kind === 'within') { + seconds = 60; + } + } + + let counter: number; + const result: string[] = []; + let usedUnits = 0; + for (const [index, unit] of units.entries()) { + let precisionUnit = units[Math.min(units.length - 1, index + precision)]; + counter = Math.floor(seconds / intervals[unit]); + const precisionCounter = Math.round(seconds / intervals[precisionUnit]); + if (precisionCounter > precisionThresholds[precisionUnit]) { + precisionUnit = unit; + } + if (units.indexOf(precisionUnit) === units.indexOf(minUnit)) { + counter = Math.max(1, counter); + } + if (counter > 0) { + let rounded; + const roundFactor = Math.pow(10,fractionDigits || 0); + if ((kind === 'until' || kind === 'within') && usedUnits < numUnits) { + rounded = Math.floor((seconds / intervals[precisionUnit]) * roundFactor) / roundFactor; + } else { + rounded = Math.round((seconds / intervals[precisionUnit]) * roundFactor) / roundFactor; + } + if ((kind !== 'until' && kind !== 'within')|| numUnits === 1) { + return { tooltip, text: this.formatTime(kind, precisionUnit, rounded) }; + } else { + if (!usedUnits) { + result.push(this.formatTime(kind, precisionUnit, rounded)); + } else { + result.push(this.formatTime('', precisionUnit, rounded)); + } + seconds -= (rounded * intervals[precisionUnit]); + usedUnits++; + if (usedUnits >= numUnits) { + return { tooltip, text: result.join(', ') }; + } + } + } + } + return { tooltip, text: result.join(', ') }; + } + + private formatTime(kind, unit, number): string { + const dateStrings = dates(number); + switch (kind) { + case 'since': + if (number === 1) { + switch (unit) { // singular (1 day) + case 'year': return $localize`:@@time-since:${dateStrings.i18nYear}:DATE: ago`; break; + case 'month': return $localize`:@@time-since:${dateStrings.i18nMonth}:DATE: ago`; break; + case 'week': return $localize`:@@time-since:${dateStrings.i18nWeek}:DATE: ago`; break; + case 'day': return $localize`:@@time-since:${dateStrings.i18nDay}:DATE: ago`; break; + case 'hour': return $localize`:@@time-since:${dateStrings.i18nHour}:DATE: ago`; break; + case 'minute': return $localize`:@@time-since:${dateStrings.i18nMinute}:DATE: ago`; break; + case 'second': return $localize`:@@time-since:${dateStrings.i18nSecond}:DATE: ago`; break; + } + } else { + switch (unit) { // plural (2 days) + case 'year': return $localize`:@@time-since:${dateStrings.i18nYears}:DATE: ago`; break; + case 'month': return $localize`:@@time-since:${dateStrings.i18nMonths}:DATE: ago`; break; + case 'week': return $localize`:@@time-since:${dateStrings.i18nWeeks}:DATE: ago`; break; + case 'day': return $localize`:@@time-since:${dateStrings.i18nDays}:DATE: ago`; break; + case 'hour': return $localize`:@@time-since:${dateStrings.i18nHours}:DATE: ago`; break; + case 'minute': return $localize`:@@time-since:${dateStrings.i18nMinutes}:DATE: ago`; break; + case 'second': return $localize`:@@time-since:${dateStrings.i18nSeconds}:DATE: ago`; break; + } + } + break; + case 'until': + if (number === 1) { + switch (unit) { // singular (In ~1 day) + case 'year': return $localize`:@@time-until:In ~${dateStrings.i18nYear}:DATE:`; break; + case 'month': return $localize`:@@time-until:In ~${dateStrings.i18nMonth}:DATE:`; break; + case 'week': return $localize`:@@time-until:In ~${dateStrings.i18nWeek}:DATE:`; break; + case 'day': return $localize`:@@time-until:In ~${dateStrings.i18nDay}:DATE:`; break; + case 'hour': return $localize`:@@time-until:In ~${dateStrings.i18nHour}:DATE:`; break; + case 'minute': return $localize`:@@time-until:In ~${dateStrings.i18nMinute}:DATE:`; + case 'second': return $localize`:@@time-until:In ~${dateStrings.i18nSecond}:DATE:`; + } + } else { + switch (unit) { // plural (In ~2 days) + case 'year': return $localize`:@@time-until:In ~${dateStrings.i18nYears}:DATE:`; break; + case 'month': return $localize`:@@time-until:In ~${dateStrings.i18nMonths}:DATE:`; break; + case 'week': return $localize`:@@time-until:In ~${dateStrings.i18nWeeks}:DATE:`; break; + case 'day': return $localize`:@@time-until:In ~${dateStrings.i18nDays}:DATE:`; break; + case 'hour': return $localize`:@@time-until:In ~${dateStrings.i18nHours}:DATE:`; break; + case 'minute': return $localize`:@@time-until:In ~${dateStrings.i18nMinutes}:DATE:`; break; + case 'second': return $localize`:@@time-until:In ~${dateStrings.i18nSeconds}:DATE:`; break; + } + } + break; + case 'within': + if (number === 1) { + switch (unit) { // singular (In ~1 day) + case 'year': return $localize`:@@time-within:within ~${dateStrings.i18nYear}:DATE:`; break; + case 'month': return $localize`:@@time-within:within ~${dateStrings.i18nMonth}:DATE:`; break; + case 'week': return $localize`:@@time-within:within ~${dateStrings.i18nWeek}:DATE:`; break; + case 'day': return $localize`:@@time-within:within ~${dateStrings.i18nDay}:DATE:`; break; + case 'hour': return $localize`:@@time-within:within ~${dateStrings.i18nHour}:DATE:`; break; + case 'minute': return $localize`:@@time-within:within ~${dateStrings.i18nMinute}:DATE:`; + case 'second': return $localize`:@@time-within:within ~${dateStrings.i18nSecond}:DATE:`; + } + } else { + switch (unit) { // plural (In ~2 days) + case 'year': return $localize`:@@time-within:within ~${dateStrings.i18nYears}:DATE:`; break; + case 'month': return $localize`:@@time-within:within ~${dateStrings.i18nMonths}:DATE:`; break; + case 'week': return $localize`:@@time-within:within ~${dateStrings.i18nWeeks}:DATE:`; break; + case 'day': return $localize`:@@time-within:within ~${dateStrings.i18nDays}:DATE:`; break; + case 'hour': return $localize`:@@time-within:within ~${dateStrings.i18nHours}:DATE:`; break; + case 'minute': return $localize`:@@time-within:within ~${dateStrings.i18nMinutes}:DATE:`; break; + case 'second': return $localize`:@@time-within:within ~${dateStrings.i18nSeconds}:DATE:`; break; + } + } + break; + case 'span': + if (number === 1) { + switch (unit) { // singular (1 day) + case 'year': return $localize`:@@time-span:After ${dateStrings.i18nYear}:DATE:`; break; + case 'month': return $localize`:@@time-span:After ${dateStrings.i18nMonth}:DATE:`; break; + case 'week': return $localize`:@@time-span:After ${dateStrings.i18nWeek}:DATE:`; break; + case 'day': return $localize`:@@time-span:After ${dateStrings.i18nDay}:DATE:`; break; + case 'hour': return $localize`:@@time-span:After ${dateStrings.i18nHour}:DATE:`; break; + case 'minute': return $localize`:@@time-span:After ${dateStrings.i18nMinute}:DATE:`; break; + case 'second': return $localize`:@@time-span:After ${dateStrings.i18nSecond}:DATE:`; break; + } + } else { + switch (unit) { // plural (2 days) + case 'year': return $localize`:@@time-span:After ${dateStrings.i18nYears}:DATE:`; break; + case 'month': return $localize`:@@time-span:After ${dateStrings.i18nMonths}:DATE:`; break; + case 'week': return $localize`:@@time-span:After ${dateStrings.i18nWeeks}:DATE:`; break; + case 'day': return $localize`:@@time-span:After ${dateStrings.i18nDays}:DATE:`; break; + case 'hour': return $localize`:@@time-span:After ${dateStrings.i18nHours}:DATE:`; break; + case 'minute': return $localize`:@@time-span:After ${dateStrings.i18nMinutes}:DATE:`; break; + case 'second': return $localize`:@@time-span:After ${dateStrings.i18nSeconds}:DATE:`; break; + } + } + break; + case 'before': + if (number === 1) { + switch (unit) { // singular (1 day) + case 'year': return $localize`:@@time-before:${dateStrings.i18nYear}:DATE: before`; break; + case 'month': return $localize`:@@time-before:${dateStrings.i18nMonth}:DATE: before`; break; + case 'week': return $localize`:@@time-before:${dateStrings.i18nWeek}:DATE: before`; break; + case 'day': return $localize`:@@time-before:${dateStrings.i18nDay}:DATE: before`; break; + case 'hour': return $localize`:@@time-before:${dateStrings.i18nHour}:DATE: before`; break; + case 'minute': return $localize`:@@time-before:${dateStrings.i18nMinute}:DATE: before`; break; + case 'second': return $localize`:@@time-before:${dateStrings.i18nSecond}:DATE: before`; break; + } + } else { + switch (unit) { // plural (2 days) + case 'year': return $localize`:@@time-before:${dateStrings.i18nYears}:DATE: before`; break; + case 'month': return $localize`:@@time-before:${dateStrings.i18nMonths}:DATE: before`; break; + case 'week': return $localize`:@@time-before:${dateStrings.i18nWeeks}:DATE: before`; break; + case 'day': return $localize`:@@time-before:${dateStrings.i18nDays}:DATE: before`; break; + case 'hour': return $localize`:@@time-before:${dateStrings.i18nHours}:DATE: before`; break; + case 'minute': return $localize`:@@time-before:${dateStrings.i18nMinutes}:DATE: before`; break; + case 'second': return $localize`:@@time-before:${dateStrings.i18nSeconds}:DATE: before`; break; + } + } + break; + default: + if (number === 1) { + switch (unit) { // singular (1 day) + case 'year': return dateStrings.i18nYear; break; + case 'month': return dateStrings.i18nMonth; break; + case 'week': return dateStrings.i18nWeek; break; + case 'day': return dateStrings.i18nDay; break; + case 'hour': return dateStrings.i18nHour; break; + case 'minute': return dateStrings.i18nMinute; break; + case 'second': return dateStrings.i18nSecond; break; + } + } else { + switch (unit) { // plural (2 days) + case 'year': return dateStrings.i18nYears; break; + case 'month': return dateStrings.i18nMonths; break; + case 'week': return dateStrings.i18nWeeks; break; + case 'day': return dateStrings.i18nDays; break; + case 'hour': return dateStrings.i18nHours; break; + case 'minute': return dateStrings.i18nMinutes; break; + case 'second': return dateStrings.i18nSeconds; break; + } + } + } + return ''; + } +} From 7057b31c3cb78ea4cb8b64a6481960f67b0c799e Mon Sep 17 00:00:00 2001 From: Stephan Oeste Date: Tue, 24 Sep 2024 20:04:33 +0200 Subject: [PATCH 058/147] Add testnet4 to install script --- production/bitcoin.crontab | 1 + production/install | 131 ++++++++++++++++++++-- production/linux/bitcoin-testnet4.service | 22 ++++ 3 files changed, 147 insertions(+), 7 deletions(-) create mode 100644 production/linux/bitcoin-testnet4.service diff --git a/production/bitcoin.crontab b/production/bitcoin.crontab index d1e484a0b..a5bc64241 100644 --- a/production/bitcoin.crontab +++ b/production/bitcoin.crontab @@ -1,4 +1,5 @@ @reboot sleep 5 ; /usr/local/bin/bitcoind -testnet >/dev/null 2>&1 +@reboot sleep 5 ; /usr/local/bin/bitcoind -testnet4 >/dev/null 2>&1 @reboot sleep 5 ; /usr/local/bin/bitcoind -signet >/dev/null 2>&1 @reboot sleep 10 ; screen -dmS mainnet /bitcoin/electrs/start mainnet @reboot sleep 10 ; screen -dmS testnet /bitcoin/electrs/start testnet diff --git a/production/install b/production/install index bf7153557..4bd5fe287 100755 --- a/production/install +++ b/production/install @@ -47,6 +47,7 @@ UNFURL_INSTALL=ON BITCOIN_MAINNET_ENABLE=ON BITCOIN_MAINNET_MINFEE_ENABLE=ON BITCOIN_TESTNET_ENABLE=ON +BITCOIN_TESTNET4_ENABLE=ON BITCOIN_SIGNET_ENABLE=ON BITCOIN_MAINNET_LIGHTNING_ENABLE=ON BITCOIN_TESTNET_LIGHTNING_ENABLE=ON @@ -100,6 +101,13 @@ BITCOIN_TESTNET_P2P_PORT=18333 BITCOIN_TESTNET_RPC_HOST=127.0.0.1 BITCOIN_TESTNET_RPC_PORT=18332 +# used for firewall configuration +BITCOIN_TESTNET4_P2P_HOST=127.0.0.1 +BITCOIN_TESTNET4_P2P_PORT=48333 +# used for RPC communication +BITCOIN_TESTNET4_RPC_HOST=127.0.0.1 +BITCOIN_TESTNET4_RPC_PORT=48332 + # used for firewall configuration BITCOIN_SIGNET_P2P_HOST=127.0.0.1 BITCOIN_SIGNET_P2P_PORT=18333 @@ -139,6 +147,11 @@ ELECTRS_LIQUID_HTTP_PORT=3001 ELECTRS_TESTNET_HTTP_HOST=127.0.0.1 ELECTRS_TESTNET_HTTP_PORT=3002 +# set either socket or TCP host/port, not both +#ELECTRS_TESTNET4_HTTP_SOCK=/tmp/bitcoin.testnet4.electrs +ELECTRS_TESTNET4_HTTP_HOST=127.0.0.1 +ELECTRS_TESTNET4_HTTP_PORT=3005 + # set either socket or TCP host/port, not both #ELECTRS_SIGNET_HTTP_SOCK=/tmp/bitcoin.testnet.electrs ELECTRS_SIGNET_HTTP_HOST=127.0.0.1 @@ -164,6 +177,11 @@ MEMPOOL_LIQUID_HTTP_PORT=8998 MEMPOOL_TESTNET_HTTP_HOST=127.0.0.1 MEMPOOL_TESTNET_HTTP_PORT=8997 +# set either socket or TCP host/port, not both +#MEMPOOL_TESTNET4_HTTP_SOCK=/tmp/bitcoin.testnet.mempool +MEMPOOL_TESTNET4_HTTP_HOST=127.0.0.1 +MEMPOOL_TESTNET4_HTTP_PORT=8990 + # set either socket or TCP host/port, not both #MEMPOOL_BISQ_HTTP_SOCK=/tmp/bitcoin.bisq.mempool MEMPOOL_BISQ_HTTP_HOST=127.0.0.1 @@ -231,6 +249,7 @@ MYSQL_GROUP=mysql # mempool mysql user/password MEMPOOL_MAINNET_USER='mempool' MEMPOOL_TESTNET_USER='mempool_testnet' +MEMPOOL_TESTNET4_USER='mempool_testnet4' MEMPOOL_SIGNET_USER='mempool_signet' MEMPOOL_MAINNET_LIGHTNING_USER='mempool_mainnet_lightning' MEMPOOL_TESTNET_LIGHTNING_USER='mempool_testnet_lightning' @@ -241,6 +260,7 @@ MEMPOOL_BISQ_USER='mempool_bisq' # generate random hex string MEMPOOL_MAINNET_PASS=$(head -150 /dev/urandom | ${MD5} | awk '{print $1}') MEMPOOL_TESTNET_PASS=$(head -150 /dev/urandom | ${MD5} | awk '{print $1}') +MEMPOOL_TESTNET4_PASS=$(head -150 /dev/urandom | ${MD5} | awk '{print $1}') MEMPOOL_SIGNET_PASS=$(head -150 /dev/urandom | ${MD5} | awk '{print $1}') MEMPOOL_MAINNET_LIGHTNING_PASS=$(head -150 /dev/urandom | ${MD5} | awk '{print $1}') MEMPOOL_TESTNET_LIGHTNING_PASS=$(head -150 /dev/urandom | ${MD5} | awk '{print $1}') @@ -265,7 +285,9 @@ BITCOIN_HOME=/bitcoin # bitcoin testnet data BITCOIN_TESTNET_DATA=${BITCOIN_HOME}/testnet3 -# bitcoin testnet data +# bitcoin testnet4 data +BITCOIN_TESTNET4_DATA=${BITCOIN_HOME}/testnet4 +# bitcoin signet data BITCOIN_SIGNET_DATA=${BITCOIN_HOME}/signet # bitcoin electrs source/binaries @@ -279,6 +301,9 @@ ELECTRS_MAINNET_DATA=${ELECTRS_DATA_ROOT}/mainnet # bitcoin testnet electrs database, only a few GB ELECTRS_TESTNET_ZPOOL=${ZPOOL} ELECTRS_TESTNET_DATA=${ELECTRS_DATA_ROOT}/testnet +# bitcoin testnet4 electrs database, only a few GB +ELECTRS_TESTNET4_ZPOOL=${ZPOOL} +ELECTRS_TESTNET4_DATA=${ELECTRS_DATA_ROOT}/testnet4 # bitcoin signet electrs database, only a few GB ELECTRS_SIGNET_ZPOOL=${ZPOOL} ELECTRS_SIGNET_DATA=${ELECTRS_DATA_ROOT}/signet @@ -332,7 +357,7 @@ BITCOIN_REPO_URL=https://github.com/bitcoin/bitcoin BITCOIN_REPO_NAME=bitcoin BITCOIN_REPO_BRANCH=master #BITCOIN_LATEST_RELEASE=$(curl -s https://api.github.com/repos/bitcoin/bitcoin/releases/latest|grep tag_name|head -1|cut -d '"' -f4) -BITCOIN_LATEST_RELEASE=v25.1 +BITCOIN_LATEST_RELEASE=v28.0rc2 echo -n '.' BISQ_REPO_URL=https://github.com/bisq-network/bisq @@ -567,6 +592,15 @@ zfsCreateFilesystems() done fi + # Bitcoin Testnet4 + if [ "${BITCOIN_TESTNET4_ENABLE}" = ON ];then + zfs create -o "mountpoint=${BITCOIN_TESTNET4_DATA}" "${ZPOOL}/bitcoin/testnet4" + for folder in chainstate indexes blocks + do + zfs create -o "mountpoint=${BITCOIN_TESTNET4_DATA}/${folder}" "${ZPOOL}/bitcoin/testnet4/${folder}" + done + fi + # Bitcoin Signet if [ "${BITCOIN_SIGNET_ENABLE}" = ON ];then zfs create -o "mountpoint=${BITCOIN_SIGNET_DATA}" "${ZPOOL}/bitcoin/signet" @@ -594,6 +628,15 @@ zfsCreateFilesystems() done fi + # electrs testnet4 data + if [ "${BITCOIN_TESTNET4_ENABLE}" = ON ];then + zfs create -o "mountpoint=${ELECTRS_TESTNET4_DATA}" "${ELECTRS_TESTNET4_ZPOOL}/electrs/testnet4" + for folder in cache history txstore + do + zfs create -o "mountpoint=${ELECTRS_TESTNET4_DATA}/newindex/${folder}" "${ELECTRS_TESTNET4_ZPOOL}/electrs/testnet4/${folder}" + done + fi + # electrs signet data if [ "${BITCOIN_SIGNET_ENABLE}" = ON ];then zfs create -o "mountpoint=${ELECTRS_SIGNET_DATA}" "${ELECTRS_SIGNET_ZPOOL}/electrs/signet" @@ -651,6 +694,15 @@ ext4CreateDir() done fi + # Bitcoin Testnet4 + if [ "${BITCOIN_TESTNET4_ENABLE}" = ON ];then + mkdir -p "${BITCOIN_TESTNET4_DATA}" + for folder in chainstate indexes blocks + do + mkdir -p "${BITCOIN_TESTNET4_DATA}/${folder}" + done + fi + # Bitcoin Signet if [ "${BITCOIN_SIGNET_ENABLE}" = ON ];then mkdir -p "${BITCOIN_SIGNET_DATA}" @@ -678,6 +730,15 @@ ext4CreateDir() done fi + # electrs testnet4 data + if [ "${BITCOIN_TESTNET4_ENABLE}" = ON ];then + mkdir -p "${ELECTRS_TESTNET4_DATA}" + for folder in cache history txstore + do + mkdir -p "${ELECTRS_TESTNET4_DATA}/newindex/${folder}" + done + fi + # electrs signet data if [ "${BITCOIN_SIGNET_ENABLE}" = ON ];then mkdir -p "${ELECTRS_SIGNET_DATA}" @@ -769,6 +830,7 @@ LN-Mainnet:Enable Bitcoin Mainnet Lightning:ON LN-Testnet:Enable Bitcoin Testnet Lightning:ON LN-Signet:Enable Bitcoin Signet Lightning:ON Testnet:Enable Bitcoin Testnet:ON +Testnet4:Enable Bitcoin Testnet4:ON Signet:Enable Bitcoin Signet:ON Liquid:Enable Elements Liquid:ON Liquidtestnet:Enable Elements Liquidtestnet:ON @@ -818,13 +880,19 @@ else BITCOIN_TESTNET_ENABLE=OFF fi +if grep Testnet4 $tempfile >/dev/null 2>&1;then + BITCOIN_TESTNET4_ENABLE=ON +else + BITCOIN_TESTNET4_ENABLE=OFF +fi + if grep Signet $tempfile >/dev/null 2>&1;then BITCOIN_SIGNET_ENABLE=ON else BITCOIN_SIGNET_ENABLE=OFF fi -if [ "${BITCOIN_MAINNET_ENABLE}" = ON -o "${BITCOIN_MAINNET_MINFEE_ENABLE}" = ON -o "${BITCOIN_TESTNET_ENABLE}" = ON -o "${BITCOIN_SIGNET_ENABLE}" = ON ];then +if [ "${BITCOIN_MAINNET_ENABLE}" = ON -o "${BITCOIN_MAINNET_MINFEE_ENABLE}" = ON -o "${BITCOIN_TESTNET_ENABLE}" = ON -o "${BITCOIN_TESTNET4_ENABLE}" = ON -o "${BITCOIN_SIGNET_ENABLE}" = ON ];then BITCOIN_INSTALL=ON else BITCOIN_INSTALL=OFF @@ -872,7 +940,7 @@ else CLN_INSTALL=OFF fi -if [ "${BITCOIN_MAINNET_ENABLE}" = ON -o "${BITCOIN_TESTNET_ENABLE}" = ON -o "${BITCOIN_SIGNET_ENABLE}" = ON ];then +if [ "${BITCOIN_MAINNET_ENABLE}" = ON -o "${BITCOIN_TESTNET_ENABLE}" = ON -o "${BITCOIN_TESTNET4_ENABLE}" = ON -o "${BITCOIN_SIGNET_ENABLE}" = ON ];then BITCOIN_ELECTRS_INSTALL=ON else BITCOIN_ELECTRS_INSTALL=OFF @@ -1216,6 +1284,9 @@ if [ "${BITCOIN_ELECTRS_INSTALL}" = ON ];then if [ "${BITCOIN_TESTNET_ENABLE}" = ON ];then osSudo "${ROOT_USER}" chown -R "${BITCOIN_USER}:${BITCOIN_GROUP}" "${ELECTRS_TESTNET_DATA}" fi + if [ "${BITCOIN_TESTNET4_ENABLE}" = ON ];then + osSudo "${ROOT_USER}" chown -R "${BITCOIN_USER}:${BITCOIN_GROUP}" "${ELECTRS_TESTNET4_DATA}" + fi if [ "${BITCOIN_SIGNET_ENABLE}" = ON ];then osSudo "${ROOT_USER}" chown -R "${BITCOIN_USER}:${BITCOIN_GROUP}" "${ELECTRS_SIGNET_DATA}" fi @@ -1520,7 +1591,7 @@ fi # Bitcoin instance for Mainnet Minfee # ####################################### -if [ "${BITCOIN_TESTNET_ENABLE}" = ON ];then +if [ "${BITCOIN_MAINNET_MINFEE_ENABLE}" = ON ];then echo "[*] Installing Bitcoin Minfee service" case $OS in @@ -1550,6 +1621,23 @@ if [ "${BITCOIN_TESTNET_ENABLE}" = ON ];then esac fi +################################# +# Bitcoin instance for Testnet4 # +################################# + +if [ "${BITCOIN_TESTNET4_ENABLE}" = ON ];then + echo "[*] Installing Bitcoin Testnet service" + case $OS in + + FreeBSD) + ;; + + Debian) + osSudo "${ROOT_USER}" install -c -o "${ROOT_USER}" -g "${ROOT_GROUP}" -m 644 "${MEMPOOL_HOME}/${MEMPOOL_REPO_NAME}/production/linux/bitcoin-testnet4.service" "${DEBIAN_SERVICE_HOME}" + ;; + esac +fi + ############################### # Bitcoin instance for Signet # ############################### @@ -1616,6 +1704,14 @@ if [ "${BITCOIN_TESTNET_ENABLE}" = ON ];then echo "[*] FIXME: must only crontab enabled daemons" fi +######################################### +# Electrs instance for Bitcoin Testnet4 # +######################################### + +if [ "${BITCOIN_TESTNET4_ENABLE}" = ON ];then + echo "[*] FIXME: must only crontab enabled daemons" +fi + ####################################### # Electrs instance for Bitcoin Signet # ####################################### @@ -1668,11 +1764,15 @@ case $OS in echo "[*] Installing Electrs Testnet Cronjob" crontab_bitcoin+="@reboot sleep 70 ; screen -dmS testnet /bitcoin/electrs/start testnet\n" fi + if [ "${BITCOIN_TESTNET4_ENABLE}" = ON ];then + echo "[*] Installing Electrs Testnet4 Cronjob" + crontab_bitcoin+="@reboot sleep 110 ; screen -dmS testnet4 /bitcoin/electrs/start testnet4\n" + fi if [ "${BITCOIN_SIGNET_ENABLE}" = ON ];then echo "[*] Installing Electrs Signet Cronjob" crontab_bitcoin+="@reboot sleep 90 ; screen -dmS signet /bitcoin/electrs/start signet\n" fi - if [ "${BITCOIN_MAINNET_ENABLE}" = ON -o "${BITCOIN_TESTNET_ENABLE}" = ON -o "${BITCOIN_SIGNET_ENABLE}" = ON ];then + if [ "${BITCOIN_MAINNET_ENABLE}" = ON -o "${BITCOIN_TESTNET_ENABLE}" = ON -o "${BITCOIN_TESTNET4_ENABLE}" = ON -o "${BITCOIN_SIGNET_ENABLE}" = ON ];then echo "${crontab_bitcoin}" | crontab -u "${BITCOIN_USER}" - fi @@ -1700,7 +1800,7 @@ fi ##### Mempool -> Bitcoin Mainnet instance -if [ "${BITCOIN_MAINNET_ENABLE}" = ON -o "${BITCOIN_TESTNET_ENABLE}" = ON -o "${BITCOIN_SIGNET_ENABLE}" = ON ];then +if [ "${BITCOIN_MAINNET_ENABLE}" = ON -o "${BITCOIN_TESTNET_ENABLE}" = ON -o "${BITCOIN_TESTNET4_ENABLE}" = ON -o "${BITCOIN_SIGNET_ENABLE}" = ON ];then echo "[*] Creating Mempool instance for Bitcoin Mainnet" osSudo "${MEMPOOL_USER}" git config --global advice.detachedHead false osSudo "${MEMPOOL_USER}" git clone --branch "${MEMPOOL_REPO_BRANCH}" "${MEMPOOL_REPO_URL}" "${MEMPOOL_HOME}/mainnet" @@ -1727,6 +1827,15 @@ if [ "${BITCOIN_TESTNET_ENABLE}" = ON ];then osSudo "${MEMPOOL_USER}" sh -c "cd ${MEMPOOL_HOME}/testnet && git checkout ${MEMPOOL_LATEST_RELEASE}" fi +if [ "${BITCOIN_TESTNET4_ENABLE}" = ON ];then + echo "[*] Creating Mempool instance for Bitcoin Testnet4" + osSudo "${MEMPOOL_USER}" git config --global advice.detachedHead false + osSudo "${MEMPOOL_USER}" git clone --branch "${MEMPOOL_REPO_BRANCH}" "${MEMPOOL_REPO_URL}" "${MEMPOOL_HOME}/testnet4" + + echo "[*] Checking out Mempool ${MEMPOOL_LATEST_RELEASE} for Bitcoin Testnet4" + osSudo "${MEMPOOL_USER}" sh -c "cd ${MEMPOOL_HOME}/testnet4 && git checkout ${MEMPOOL_LATEST_RELEASE}" +fi + if [ "${BITCOIN_TESTNET_LIGHTNING_ENABLE}" = ON ];then echo "[*] Creating Mempool instance for Lightning Network on Bitcoin Testnet" osSudo "${MEMPOOL_USER}" git config --global advice.detachedHead false @@ -1804,6 +1913,9 @@ grant all on mempool.* to '${MEMPOOL_MAINNET_USER}'@'localhost' identified by '$ create database mempool_testnet; grant all on mempool_testnet.* to '${MEMPOOL_TESTNET_USER}'@'localhost' identified by '${MEMPOOL_TESTNET_PASS}'; +create database mempool_testnet4; +grant all on mempool_testnet4.* to '${MEMPOOL_TESTNET4_USER}'@'localhost' identified by '${MEMPOOL_TESTNET4_PASS}'; + create database mempool_signet; grant all on mempool_signet.* to '${MEMPOOL_SIGNET_USER}'@'localhost' identified by '${MEMPOOL_SIGNET_PASS}'; @@ -1832,6 +1944,8 @@ declare -x MEMPOOL_MAINNET_USER="${MEMPOOL_MAINNET_USER}" declare -x MEMPOOL_MAINNET_PASS="${MEMPOOL_MAINNET_PASS}" declare -x MEMPOOL_TESTNET_USER="${MEMPOOL_TESTNET_USER}" declare -x MEMPOOL_TESTNET_PASS="${MEMPOOL_TESTNET_PASS}" +declare -x MEMPOOL_TESTNET4_USER="${MEMPOOL_TESTNET4_USER}" +declare -x MEMPOOL_TESTNET4_PASS="${MEMPOOL_TESTNET4_PASS}" declare -x MEMPOOL_SIGNET_USER="${MEMPOOL_SIGNET_USER}" declare -x MEMPOOL_SIGNET_PASS="${MEMPOOL_SIGNET_PASS}" declare -x MEMPOOL_MAINNET_LIGHTNING_USER="${MEMPOOL_MAINNET_LIGHTNING_USER}" @@ -1932,6 +2046,9 @@ EOF if [ "${BITCOIN_TESTNET_ENABLE}" = ON ];then osSudo "${ROOT_USER}" systemctl enable bitcoin-testnet.service fi + if [ "${BITCOIN_TESTNET4_ENABLE}" = ON ];then + osSudo "${ROOT_USER}" systemctl enable bitcoin-testnet4.service + fi if [ "${BITCOIN_SIGNET_ENABLE}" = ON ];then osSudo "${ROOT_USER}" systemctl enable bitcoin-signet.service fi diff --git a/production/linux/bitcoin-testnet4.service b/production/linux/bitcoin-testnet4.service new file mode 100644 index 000000000..1bb893c44 --- /dev/null +++ b/production/linux/bitcoin-testnet4.service @@ -0,0 +1,22 @@ +[Unit] +Description=Bitcoind-testnet4 +After=network.target + +[Service] +ExecStart=/usr/local/bin/bitcoind -conf=bitcoin.conf -daemon -testnet4 -printtoconsole -pid=/bitcoin/bitcoind-testnet4.pid +ExecStop=/usr/local/bin/bitcoin-cli -testnet4 stop + +Type=forking +PIDFile=/bitcoin/bitcoind-testnet4.pid +Restart=on-failure + +User=bitcoin +Group=bitcoin + +PrivateTmp=true +ProtectSystem=full +NoNewPrivileges=true +PrivateDevices=true + +[Install] +WantedBy=multi-user.target From 83b60941743506d38fc9dbe6f318fb6533fce287 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Tue, 24 Sep 2024 23:30:24 +0000 Subject: [PATCH 059/147] optimize utxo graph layout algorithm, enable transitions --- .../utxo-graph/utxo-graph.component.ts | 187 ++++++++++-------- 1 file changed, 110 insertions(+), 77 deletions(-) diff --git a/frontend/src/app/components/utxo-graph/utxo-graph.component.ts b/frontend/src/app/components/utxo-graph/utxo-graph.component.ts index 310ff0356..b220ae6ab 100644 --- a/frontend/src/app/components/utxo-graph/utxo-graph.component.ts +++ b/frontend/src/app/components/utxo-graph/utxo-graph.component.ts @@ -7,7 +7,6 @@ import { Router } from '@angular/router'; import { RelativeUrlPipe } from '../../shared/pipes/relative-url/relative-url.pipe'; import { renderSats } from '../../shared/common.utils'; import { colorToHex, hexToColor, mix } from '../block-overview-graph/utils'; -import { TimeComponent } from '../time/time.component'; import { TimeService } from '../../services/time.service'; const newColorHex = '1bd8f4'; @@ -16,6 +15,30 @@ const pendingColorHex = 'eba814'; const newColor = hexToColor(newColorHex); const oldColor = hexToColor(oldColorHex); +interface Circle { + x: number, + y: number, + r: number, + i: number, +} + +interface UtxoCircle extends Circle { + utxo: Utxo; +} + +function sortedInsert(positions: { c1: Circle, c2: Circle, d: number, p: number, side?: boolean }[], newPosition: { c1: Circle, c2: Circle, d: number, p: number }): void { + let left = 0; + let right = positions.length; + while (left < right) { + const mid = Math.floor((left + right) / 2); + if (positions[mid].p > newPosition.p) { + right = mid; + } else { + left = mid + 1; + } + } + positions.splice(left, 0, newPosition, {...newPosition, side: true }); +} @Component({ selector: 'app-utxo-graph', templateUrl: './utxo-graph.component.html', @@ -76,7 +99,7 @@ export class UtxoGraphComponent implements OnChanges, OnDestroy { } } - prepareChartOptions(utxos: Utxo[]) { + prepareChartOptions(utxos: Utxo[]): void { if (!utxos || utxos.length === 0) { return; } @@ -85,20 +108,21 @@ export class UtxoGraphComponent implements OnChanges, OnDestroy { // Helper functions const distance = (x1: number, y1: number, x2: number, y2: number): number => Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2); - const intersectionPoints = (x1: number, y1: number, r1: number, x2: number, y2: number, r2: number): [number, number][] => { - const d = distance(x1, y1, x2, y2); - const a = (r1 * r1 - r2 * r2 + d * d) / (2 * d); - const h = Math.sqrt(r1 * r1 - a * a); - const x3 = x1 + a * (x2 - x1) / d; - const y3 = y1 + a * (y2 - y1) / d; - return [ - [x3 + h * (y2 - y1) / d, y3 - h * (x2 - x1) / d], - [x3 - h * (y2 - y1) / d, y3 + h * (x2 - x1) / d] - ]; + const intersection = (c1: Circle, c2: Circle, d: number, r: number, side: boolean): { x: number, y: number} => { + const d1 = c1.r + r; + const d2 = c2.r + r; + const a = (d1 * d1 - d2 * d2 + d * d) / (2 * d); + const h = Math.sqrt(d1 * d1 - a * a); + const x3 = c1.x + a * (c2.x - c1.x) / d; + const y3 = c1.y + a * (c2.y - c1.y) / d; + return side + ? { x: x3 + h * (c2.y - c1.y) / d, y: y3 - h * (c2.x - c1.x) / d } + : { x: x3 - h * (c2.y - c1.y) / d, y: y3 + h * (c2.x - c1.x) / d }; }; - // Naive algorithm to pack circles as tightly as possible without overlaps - const placedCircles: { x: number, y: number, r: number, utxo: Utxo, distances: number[] }[] = []; + // ~Linear algorithm to pack circles as tightly as possible without overlaps + const placedCircles: UtxoCircle[] = []; + const positions: { c1: Circle, c2: Circle, d: number, p: number, side?: boolean }[] = []; // Pack in descending order of value, and limit to the top 500 to preserve performance const sortedUtxos = utxos.sort((a, b) => { if (a.value === b.value) { @@ -112,78 +136,82 @@ export class UtxoGraphComponent implements OnChanges, OnDestroy { } return b.value - a.value; }).slice(0, 500); - let centerOfMass = { x: 0, y: 0 }; - let weightOfMass = 0; + const maxR = Math.sqrt(sortedUtxos.reduce((max, utxo) => Math.max(max, utxo.value), 0)); sortedUtxos.forEach((utxo, index) => { // area proportional to value const r = Math.sqrt(utxo.value); // special cases for the first two utxos if (index === 0) { - placedCircles.push({ x: 0, y: 0, r, utxo, distances: [0] }); + placedCircles.push({ x: 0, y: 0, r, utxo, i: index }); return; } if (index === 1) { const c = placedCircles[0]; - placedCircles.push({ x: c.r + r, y: 0, r, utxo, distances: [c.r + r, 0] }); - c.distances.push(c.r + r); + placedCircles.push({ x: c.r + r, y: 0, r, utxo, i: index }); + sortedInsert(positions, { c1: c, c2: placedCircles[1], d: c.r + r, p: 0 }); + return; + } + if (index === 2) { + const c = placedCircles[0]; + placedCircles.push({ x: -c.r - r, y: 0, r, utxo, i: index }); + sortedInsert(positions, { c1: c, c2: placedCircles[2], d: c.r + r, p: 0 }); return; } // The best position will be touching two other circles - // generate a list of candidate points by finding all such positions + // find the closest such position to the center of the graph // where the circle can be placed without overlapping other circles - const candidates: [number, number, number[]][] = []; const numCircles = placedCircles.length; - for (let i = 0; i < numCircles; i++) { - for (let j = i + 1; j < numCircles; j++) { - const c1 = placedCircles[i]; - const c2 = placedCircles[j]; - if (c1.distances[j] > (c1.r + c2.r + r + r)) { - // too far apart for new circle to touch both + let newCircle: UtxoCircle = null; + while (positions.length > 0) { + const position = positions.shift(); + // if the circles are too far apart, skip + if (position.d > (position.c1.r + position.c2.r + r + r)) { + continue; + } + + const { x, y } = intersection(position.c1, position.c2, position.d, r, position.side); + if (isNaN(x) || isNaN(y)) { + // should never happen + continue; + } + + // check if the circle would overlap any other circles here + let valid = true; + const nearbyCircles: { c: UtxoCircle, d: number, s: number }[] = []; + for (let k = 0; k < numCircles; k++) { + const c = placedCircles[k]; + if (k === position.c1.i || k === position.c2.i) { + nearbyCircles.push({ c, d: c.r + r, s: 0 }); continue; } - const points = intersectionPoints(c1.x, c1.y, c1.r + r, c2.x, c2.y, c2.r + r); - points.forEach(([x, y]) => { - const distances: number[] = []; - let valid = true; - for (let k = 0; k < numCircles; k++) { - const c = placedCircles[k]; - const d = distance(x, y, c.x, c.y); - if (k !== i && k !== j && d < (r + c.r)) { - valid = false; - break; - } else { - distances.push(d); - } + const d = distance(x, y, c.x, c.y); + if (d < (r + c.r)) { + valid = false; + break; + } else { + nearbyCircles.push({ c, d, s: d - c.r - r }); + } + } + if (valid) { + newCircle = { x, y, r, utxo, i: index }; + // add new positions to the candidate list + const nearest = nearbyCircles.sort((a, b) => a.s - b.s).slice(0, 5); + for (const n of nearest) { + if (n.d < (n.c.r + r + maxR + maxR)) { + sortedInsert(positions, { c1: newCircle, c2: n.c, d: n.d, p: distance((n.c.x + x) / 2, (n.c.y + y), 0, 0) }); } - if (valid) { - candidates.push([x, y, distances]); - } - }); + } + break; } } - - // Pick the candidate closest to the center of mass - const [x, y, distances] = candidates.length ? candidates.reduce((closest, candidate) => - distance(candidate[0], candidate[1], centerOfMass[0], centerOfMass[1]) < - distance(closest[0], closest[1], centerOfMass[0], centerOfMass[1]) - ? candidate - : closest - ) : [0, 0, []]; - - placedCircles.push({ x, y, r, utxo, distances }); - for (let i = 0; i < distances.length; i++) { - placedCircles[i].distances.push(distances[i]); + if (newCircle) { + placedCircles.push(newCircle); + } else { + // should never happen + return; } - distances.push(0); - - // Update center of mass - centerOfMass = { - x: (centerOfMass.x * weightOfMass + x) / (weightOfMass + r), - y: (centerOfMass.y * weightOfMass + y) / (weightOfMass + r), - }; - weightOfMass += r; }); // Precompute the bounding box of the graph @@ -194,23 +222,26 @@ export class UtxoGraphComponent implements OnChanges, OnDestroy { const width = maxX - minX; const height = maxY - minY; - const data = placedCircles.map((circle, index) => [ + const data = placedCircles.map((circle) => [ + circle.utxo.txid + circle.utxo.vout, circle.utxo, - index, circle.x, circle.y, - circle.r + circle.r, ]); this.chartOptions = { series: [{ type: 'custom', coordinateSystem: undefined, - data, + data: data, + encode: { + itemName: 0, + x: 2, + y: 3, + r: 4, + }, renderItem: (params, api) => { - const idx = params.dataIndex; - const datum = data[idx]; - const utxo = datum[0] as Utxo; const chartWidth = api.getWidth(); const chartHeight = api.getHeight(); const scale = Math.min(chartWidth / width, chartHeight / height); @@ -218,6 +249,9 @@ export class UtxoGraphComponent implements OnChanges, OnDestroy { const scaledHeight = height * scale; const offsetX = (chartWidth - scaledWidth) / 2 - minX * scale; const offsetY = (chartHeight - scaledHeight) / 2 - minY * scale; + + const datum = data[params.dataIndex]; + const utxo = datum[1] as Utxo; const x = datum[2] as number; const y = datum[3] as number; const r = datum[4] as number; @@ -225,14 +259,13 @@ export class UtxoGraphComponent implements OnChanges, OnDestroy { // skip items too small to render cleanly return; } + const valueStr = renderSats(utxo.value, this.stateService.network); const elements: any[] = [ { type: 'circle', autoBatch: true, shape: { - cx: (x * scale) + offsetX, - cy: (y * scale) + offsetY, r: (r * scale) - 1, }, style: { @@ -240,12 +273,10 @@ export class UtxoGraphComponent implements OnChanges, OnDestroy { } }, ]; - const labelFontSize = Math.min(36, r * scale * 0.25); + const labelFontSize = Math.min(36, r * scale * 0.3); if (labelFontSize > 8) { elements.push({ type: 'text', - x: (x * scale) + offsetX, - y: (y * scale) + offsetY, style: { text: valueStr, fontSize: labelFontSize, @@ -257,6 +288,8 @@ export class UtxoGraphComponent implements OnChanges, OnDestroy { } return { type: 'group', + x: (x * scale) + offsetX, + y: (y * scale) + offsetY, children: elements, }; }, @@ -271,7 +304,7 @@ export class UtxoGraphComponent implements OnChanges, OnDestroy { }, borderColor: '#000', formatter: (params: any): string => { - const utxo = params.data[0] as Utxo; + const utxo = params.data[1] as Utxo; const valueStr = renderSats(utxo.value, this.stateService.network); return ` ${utxo.txid.slice(0, 6)}...${utxo.txid.slice(-6)}:${utxo.vout} From 2ad52e2c78225a4444db5d200883f1e96ea0a8c8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 26 Sep 2024 02:37:00 +0000 Subject: [PATCH 060/147] Bump cypress from 13.14.0 to 13.15.0 in /frontend Bumps [cypress](https://github.com/cypress-io/cypress) from 13.14.0 to 13.15.0. - [Release notes](https://github.com/cypress-io/cypress/releases) - [Changelog](https://github.com/cypress-io/cypress/blob/develop/CHANGELOG.md) - [Commits](https://github.com/cypress-io/cypress/compare/v13.14.0...v13.15.0) --- updated-dependencies: - dependency-name: cypress dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- frontend/package-lock.json | 200 ++++++++++++------------------------- frontend/package.json | 2 +- 2 files changed, 66 insertions(+), 136 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 9d4e018ef..af95a32d3 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -32,6 +32,7 @@ "bootstrap": "~4.6.2", "browserify": "^17.0.0", "clipboard": "^2.0.11", + "cypress": "^13.15.0", "domino": "^2.1.6", "echarts": "~5.5.0", "esbuild": "^0.24.0", @@ -62,7 +63,7 @@ "optionalDependencies": { "@cypress/schematic": "^2.5.0", "@types/cypress": "^1.1.3", - "cypress": "^13.14.0", + "cypress": "^13.15.0", "cypress-fail-on-console-error": "~5.1.0", "cypress-wait-until": "^2.0.1", "mock-socket": "~9.3.1", @@ -3113,9 +3114,9 @@ } }, "node_modules/@cypress/request": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.1.tgz", - "integrity": "sha512-TWivJlJi8ZDx2wGOw1dbLuHJKUYX7bWySw377nlnGOW3hP9/MUKIsEdXT/YngWxVdgNCHRBmFlBipE+5/2ZZlQ==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.5.tgz", + "integrity": "sha512-v+XHd9XmWbufxF1/bTaVm2yhbxY+TB4YtWRqF2zaXBlDNMkls34KiATz0AVDLavL3iB6bQk9/7n3oY1EoLSWGA==", "optional": true, "dependencies": { "aws-sign2": "~0.7.0", @@ -3124,14 +3125,14 @@ "combined-stream": "~1.0.6", "extend": "~3.0.2", "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "http-signature": "~1.3.6", + "form-data": "~4.0.0", + "http-signature": "~1.4.0", "is-typedarray": "~1.0.0", "isstream": "~0.1.2", "json-stringify-safe": "~5.0.1", "mime-types": "~2.1.19", "performance-now": "^2.1.0", - "qs": "6.10.4", + "qs": "6.13.0", "safe-buffer": "^5.1.2", "tough-cookie": "^4.1.3", "tunnel-agent": "^0.6.0", @@ -5797,9 +5798,9 @@ } }, "node_modules/aws4": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", - "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz", + "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==", "optional": true }, "node_modules/axios": { @@ -6065,20 +6066,6 @@ "node": ">= 0.8" } }, - "node_modules/body-parser/node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "dependencies": { - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/bonjour-service": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", @@ -8045,13 +8032,13 @@ "peer": true }, "node_modules/cypress": { - "version": "13.14.0", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-13.14.0.tgz", - "integrity": "sha512-r0+nhd033x883YL6068futewUsl02Q7rWiinyAAIBDW/OOTn+UMILWgNuCiY3vtJjd53efOqq5R9dctQk/rKiw==", + "version": "13.15.0", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-13.15.0.tgz", + "integrity": "sha512-53aO7PwOfi604qzOkCSzNlWquCynLlKE/rmmpSPcziRH6LNfaDUAklQT6WJIsD8ywxlIy+uVZsnTMCCQVd2kTw==", "hasInstallScript": true, "optional": true, "dependencies": { - "@cypress/request": "^3.0.1", + "@cypress/request": "^3.0.4", "@cypress/xvfb": "^1.2.4", "@types/sinonjs__fake-timers": "8.1.1", "@types/sizzle": "^2.3.2", @@ -9896,20 +9883,6 @@ "node": ">= 0.8" } }, - "node_modules/express/node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "dependencies": { - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/express/node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -10305,17 +10278,17 @@ } }, "node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "optional": true, "dependencies": { "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", + "combined-stream": "^1.0.8", "mime-types": "^2.1.12" }, "engines": { - "node": ">= 0.12" + "node": ">= 6" } }, "node_modules/forwarded": { @@ -10957,14 +10930,14 @@ } }, "node_modules/http-signature": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", - "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.4.0.tgz", + "integrity": "sha512-G5akfn7eKbpDN+8nPS/cb57YeA1jLTVxjpCj7tmm3QKPdyDy7T+qSC40e9ptydSWvkwjSXw1VbkpyEm39ukeAg==", "optional": true, "dependencies": { "assert-plus": "^1.0.0", "jsprim": "^2.0.2", - "sshpk": "^1.14.1" + "sshpk": "^1.18.0" }, "engines": { "node": ">=0.10" @@ -14737,12 +14710,11 @@ } }, "node_modules/qs": { - "version": "6.10.4", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.4.tgz", - "integrity": "sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==", - "optional": true, + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "dependencies": { - "side-channel": "^1.0.4" + "side-channel": "^1.0.6" }, "engines": { "node": ">=0.6" @@ -16129,9 +16101,9 @@ "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==" }, "node_modules/sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", "optional": true, "dependencies": { "asn1": "~0.2.3", @@ -16725,9 +16697,9 @@ } }, "node_modules/tough-cookie": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", - "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", "optional": true, "dependencies": { "psl": "^1.1.33", @@ -17799,20 +17771,6 @@ "proxy-from-env": "^1.1.0" } }, - "node_modules/wait-on/node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "optional": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/wait-on/node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", @@ -20466,9 +20424,9 @@ } }, "@cypress/request": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.1.tgz", - "integrity": "sha512-TWivJlJi8ZDx2wGOw1dbLuHJKUYX7bWySw377nlnGOW3hP9/MUKIsEdXT/YngWxVdgNCHRBmFlBipE+5/2ZZlQ==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.5.tgz", + "integrity": "sha512-v+XHd9XmWbufxF1/bTaVm2yhbxY+TB4YtWRqF2zaXBlDNMkls34KiATz0AVDLavL3iB6bQk9/7n3oY1EoLSWGA==", "optional": true, "requires": { "aws-sign2": "~0.7.0", @@ -20477,14 +20435,14 @@ "combined-stream": "~1.0.6", "extend": "~3.0.2", "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "http-signature": "~1.3.6", + "form-data": "~4.0.0", + "http-signature": "~1.4.0", "is-typedarray": "~1.0.0", "isstream": "~0.1.2", "json-stringify-safe": "~5.0.1", "mime-types": "~2.1.19", "performance-now": "^2.1.0", - "qs": "6.10.4", + "qs": "6.13.0", "safe-buffer": "^5.1.2", "tough-cookie": "^4.1.3", "tunnel-agent": "^0.6.0", @@ -22369,9 +22327,9 @@ "optional": true }, "aws4": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", - "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz", + "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==", "optional": true }, "axios": { @@ -22583,14 +22541,6 @@ "requires": { "ee-first": "1.1.1" } - }, - "qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "requires": { - "side-channel": "^1.0.6" - } } } }, @@ -24100,12 +24050,12 @@ "peer": true }, "cypress": { - "version": "13.14.0", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-13.14.0.tgz", - "integrity": "sha512-r0+nhd033x883YL6068futewUsl02Q7rWiinyAAIBDW/OOTn+UMILWgNuCiY3vtJjd53efOqq5R9dctQk/rKiw==", + "version": "13.15.0", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-13.15.0.tgz", + "integrity": "sha512-53aO7PwOfi604qzOkCSzNlWquCynLlKE/rmmpSPcziRH6LNfaDUAklQT6WJIsD8ywxlIy+uVZsnTMCCQVd2kTw==", "optional": true, "requires": { - "@cypress/request": "^3.0.1", + "@cypress/request": "^3.0.4", "@cypress/xvfb": "^1.2.4", "@types/sinonjs__fake-timers": "8.1.1", "@types/sizzle": "^2.3.2", @@ -25554,14 +25504,6 @@ "ee-first": "1.1.1" } }, - "qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "requires": { - "side-channel": "^1.0.6" - } - }, "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -25853,13 +25795,13 @@ "optional": true }, "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "optional": true, "requires": { "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", + "combined-stream": "^1.0.8", "mime-types": "^2.1.12" } }, @@ -26321,14 +26263,14 @@ } }, "http-signature": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", - "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.4.0.tgz", + "integrity": "sha512-G5akfn7eKbpDN+8nPS/cb57YeA1jLTVxjpCj7tmm3QKPdyDy7T+qSC40e9ptydSWvkwjSXw1VbkpyEm39ukeAg==", "optional": true, "requires": { "assert-plus": "^1.0.0", "jsprim": "^2.0.2", - "sshpk": "^1.14.1" + "sshpk": "^1.18.0" } }, "https-browserify": { @@ -29098,12 +29040,11 @@ } }, "qs": { - "version": "6.10.4", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.4.tgz", - "integrity": "sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==", - "optional": true, + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "requires": { - "side-channel": "^1.0.4" + "side-channel": "^1.0.6" } }, "querystring": { @@ -30167,9 +30108,9 @@ "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==" }, "sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", "optional": true, "requires": { "asn1": "~0.2.3", @@ -30615,9 +30556,9 @@ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" }, "tough-cookie": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", - "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", "optional": true, "requires": { "psl": "^1.1.33", @@ -31248,17 +31189,6 @@ "proxy-from-env": "^1.1.0" } }, - "form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "optional": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, "proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", diff --git a/frontend/package.json b/frontend/package.json index 415ac74fe..3318d5031 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -115,7 +115,7 @@ "optionalDependencies": { "@cypress/schematic": "^2.5.0", "@types/cypress": "^1.1.3", - "cypress": "^13.14.0", + "cypress": "^13.15.0", "cypress-fail-on-console-error": "~5.1.0", "cypress-wait-until": "^2.0.1", "mock-socket": "~9.3.1", From b29c4cf228b6471597a8c61dbabd5b00c656ca23 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Tue, 24 Sep 2024 17:28:46 +0000 Subject: [PATCH 061/147] refactor miner name truncation --- backend/src/utils/bitcoin-script.ts | 2 +- .../block/block-preview.component.html | 38 +++++++++---------- .../app/components/block/block.component.html | 19 +++++----- .../app/components/block/block.component.scss | 14 ++----- .../blockchain-blocks.component.html | 6 +-- .../blockchain-blocks.component.scss | 9 ++++- .../blockchain-blocks.component.ts | 17 --------- .../transaction/transaction.component.html | 20 +++++----- .../transaction/transaction.component.scss | 14 ++----- 9 files changed, 53 insertions(+), 86 deletions(-) diff --git a/backend/src/utils/bitcoin-script.ts b/backend/src/utils/bitcoin-script.ts index b43b7a72d..f9755fcb4 100644 --- a/backend/src/utils/bitcoin-script.ts +++ b/backend/src/utils/bitcoin-script.ts @@ -223,5 +223,5 @@ export function parseDATUMTemplateCreator(coinbaseRaw: string): string[] | null let tagString = String.fromCharCode(...tags); tagString = tagString.replace('\x00', ''); - return tagString.split('\x0f'); + return tagString.split('\x0f').map((name) => name.replace(/[^a-zA-Z0-9 ]/g, '')); } \ No newline at end of file diff --git a/frontend/src/app/components/block/block-preview.component.html b/frontend/src/app/components/block/block-preview.component.html index b1cafc05e..036ab8399 100644 --- a/frontend/src/app/components/block/block-preview.component.html +++ b/frontend/src/app/components/block/block-preview.component.html @@ -53,32 +53,28 @@ Miner
- - {{ block.extras.pool.minerNames[1] }} -
- on - - {{ block.extras.pool.name}} -
-
- - - {{ block.extras.pool.name }} - + + @if (block.extras.pool.minerNames[1].length > 16) { + {{ block.extras.pool.minerNames[1].slice(0, 15) }}… + } @else { + {{ block.extras.pool.minerNames[1] }} + } + + + {{ block.extras.pool.name }}
- - {{ block?.extras.pool.minerNames[1] }} -
- on {{ block?.extras.pool.name }} -
-
- - {{ block?.extras.pool.name }} - + + @if (block.extras.pool.minerNames[1].length > 16) { + {{ block.extras.pool.minerNames[1].slice(0, 15) }}… + } @else { + {{ block.extras.pool.minerNames[1] }} + } + + {{ block.extras.pool.name }}
diff --git a/frontend/src/app/components/block/block.component.html b/frontend/src/app/components/block/block.component.html index 46900179b..09c3a5d23 100644 --- a/frontend/src/app/components/block/block.component.html +++ b/frontend/src/app/components/block/block.component.html @@ -182,16 +182,15 @@ Miner -
- {{ block.extras.pool.minerNames[1] }} -
- - {{ block.extras.pool.name }} -
-
- - {{ block.extras.pool.name }} - + + @if (block.extras.pool.minerNames[1].length > 16) { + {{ block.extras.pool.minerNames[1].slice(0, 15) }}… + } @else { + {{ block.extras.pool.minerNames[1] }} + } + + + {{ block.extras.pool.name }}
diff --git a/frontend/src/app/components/block/block.component.scss b/frontend/src/app/components/block/block.component.scss index 6eae3fe3a..945d61366 100644 --- a/frontend/src/app/components/block/block.component.scss +++ b/frontend/src/app/components/block/block.component.scss @@ -81,17 +81,9 @@ h1 { } } -.on-pool-container { - display: inline; - flex-direction: row; -} - -.on-pool { - background-color: var(--bg); - display: inline-block; - margin-top: 4px; - padding: .25em .4em; - border-radius: .25rem; +.miner-name { + margin-right: 4px; + vertical-align: top; } .pool-logo { diff --git a/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.html b/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.html index 128d18774..a782e9588 100644 --- a/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.html +++ b/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.html @@ -60,11 +60,11 @@
- - + {{ block.extras.pool.name }} diff --git a/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.scss b/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.scss index a0111215a..5c2a5ab5a 100644 --- a/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.scss +++ b/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.scss @@ -187,9 +187,16 @@ .badge { position: relative; - top: 15px; + top: 19px; z-index: 101; color: #FFF; + overflow: hidden; + text-overflow: ellipsis; + max-width: 145px; + + &.miner-name { + max-width: 125px; + } } .pool-logo { diff --git a/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.ts b/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.ts index 7846b66a2..1a7598079 100644 --- a/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.ts +++ b/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.ts @@ -281,15 +281,6 @@ export class BlockchainBlocksComponent implements OnInit, OnChanges, OnDestroy { if (block?.extras) { block.extras.minFee = this.getMinBlockFee(block); block.extras.maxFee = this.getMaxBlockFee(block); - if (block.extras.pool?.minerNames) { - block.extras.pool.minerNames = block.extras.pool.minerNames.map((name) => { - name = name.replace(/[^a-zA-Z0-9 ]/g, ''); - if (name.length > 16) { - return name.slice(0, 16) + '…'; - } - return name; - }); - } } } this.blocks.push(block || { @@ -332,14 +323,6 @@ export class BlockchainBlocksComponent implements OnInit, OnChanges, OnDestroy { if (block?.extras) { block.extras.minFee = this.getMinBlockFee(block); block.extras.maxFee = this.getMaxBlockFee(block); - if (block.extras.pool?.minerNames) { - block.extras.pool.minerNames = block.extras.pool.minerNames.map((name) => { - if (name.length > 16) { - return name.slice(0, 16) + '…'; - } - return name; - }); - } } this.blocks[blockIndex] = block; this.blockStyles[blockIndex] = this.getStyleForBlock(block, blockIndex); diff --git a/frontend/src/app/components/transaction/transaction.component.html b/frontend/src/app/components/transaction/transaction.component.html index a4524d529..ec06dd5ad 100644 --- a/frontend/src/app/components/transaction/transaction.component.html +++ b/frontend/src/app/components/transaction/transaction.component.html @@ -684,17 +684,15 @@ @if (pool) { -
- {{ pool.minerNames[1] }} -
- - {{ pool.name }} -
-
- - - {{ pool.name }} - + + @if (pool.minerNames[1].length > 16) { + {{ pool.minerNames[1].slice(0, 15) }}… + } @else { + {{ pool.minerNames[1] }} + } + + + {{ pool.name }}
} @else { diff --git a/frontend/src/app/components/transaction/transaction.component.scss b/frontend/src/app/components/transaction/transaction.component.scss index 40b813cae..42325a1b4 100644 --- a/frontend/src/app/components/transaction/transaction.component.scss +++ b/frontend/src/app/components/transaction/transaction.component.scss @@ -60,17 +60,9 @@ top: -1px; } -.on-pool-container { - display: inline; - flex-direction: row; -} - -.on-pool { - background-color: var(--bg); - display: inline-block; - margin-top: 4px; - padding: .25em .4em; - border-radius: .25rem; +.miner-name { + margin-right: 4px; + vertical-align: top; } .pool-logo { From 1d5843a112438c2f5ae2c12ea7949f04a3e175a8 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Thu, 26 Sep 2024 22:14:44 +0000 Subject: [PATCH 062/147] fix utxo chart on-click navigation --- .../src/app/components/utxo-graph/utxo-graph.component.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/frontend/src/app/components/utxo-graph/utxo-graph.component.ts b/frontend/src/app/components/utxo-graph/utxo-graph.component.ts index b220ae6ab..3a549c1e7 100644 --- a/frontend/src/app/components/utxo-graph/utxo-graph.component.ts +++ b/frontend/src/app/components/utxo-graph/utxo-graph.component.ts @@ -344,13 +344,13 @@ export class UtxoGraphComponent implements OnChanges, OnDestroy { } onChartClick(e): void { - if (e.data?.[0]?.txid) { + if (e.data?.[1]?.txid) { this.zone.run(() => { - const url = this.relativeUrlPipe.transform(`/tx/${e.data[0].txid}`); + const url = this.relativeUrlPipe.transform(`/tx/${e.data[1].txid}`); if (e.event.event.shiftKey || e.event.event.ctrlKey || e.event.event.metaKey) { - window.open(url + '?mode=details#vout=' + e.data[0].vout); + window.open(url + '?mode=details#vout=' + e.data[1].vout); } else { - this.router.navigate([url], { fragment: `vout=${e.data[0].vout}` }); + this.router.navigate([url], { fragment: `vout=${e.data[1].vout}` }); } }); } From 2d7316942f2809ebd452d20e3c339605372f1160 Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Fri, 27 Sep 2024 17:26:27 +0200 Subject: [PATCH 063/147] export bitcoinsatoshis pipe module, allow custom class for first part --- frontend/src/app/shared/pipes/bitcoinsatoshis.pipe.ts | 4 ++-- frontend/src/app/shared/shared.module.ts | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/frontend/src/app/shared/pipes/bitcoinsatoshis.pipe.ts b/frontend/src/app/shared/pipes/bitcoinsatoshis.pipe.ts index 7065b5138..7e785e9c8 100644 --- a/frontend/src/app/shared/pipes/bitcoinsatoshis.pipe.ts +++ b/frontend/src/app/shared/pipes/bitcoinsatoshis.pipe.ts @@ -8,7 +8,7 @@ export class BitcoinsatoshisPipe implements PipeTransform { constructor(private sanitizer: DomSanitizer) { } - transform(value: string): SafeHtml { + transform(value: string, firstPartClass?: string): SafeHtml { const newValue = this.insertSpaces(parseFloat(value || '0').toFixed(8)); const position = (newValue || '0').search(/[1-9]/); @@ -16,7 +16,7 @@ export class BitcoinsatoshisPipe implements PipeTransform { const secondPart = newValue.slice(position); return this.sanitizer.bypassSecurityTrustHtml( - `${firstPart}${secondPart}` + `${firstPart}${secondPart}` ); } diff --git a/frontend/src/app/shared/shared.module.ts b/frontend/src/app/shared/shared.module.ts index 0e37bc9d5..92b461548 100644 --- a/frontend/src/app/shared/shared.module.ts +++ b/frontend/src/app/shared/shared.module.ts @@ -365,6 +365,7 @@ import { OnlyVsizeDirective, OnlyWeightDirective } from './components/weight-dir TwitterWidgetComponent, TwitterLogin, BitcoinInvoiceComponent, + BitcoinsatoshisPipe, MempoolBlockOverviewComponent, ClockchainComponent, From b26d26b14ca304a5a25629042d8a991d06be0c97 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Fri, 27 Sep 2024 15:55:29 +0000 Subject: [PATCH 064/147] expose custom x-total-count header --- production/nginx/location-api-v1-services.conf | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/production/nginx/location-api-v1-services.conf b/production/nginx/location-api-v1-services.conf index 88f510e79..a9df64bc6 100644 --- a/production/nginx/location-api-v1-services.conf +++ b/production/nginx/location-api-v1-services.conf @@ -92,6 +92,7 @@ location @mempool-api-v1-services-cache-disabled-addcors { set $cors_methods 'GET, POST, PUT, DELETE, OPTIONS'; set $cors_origin 'https://mempool.space'; set $cors_headers 'Accept,Authorization,Cache-Control,Content-Type,DNT,If-Modified-Since,Keep-Alive,Origin,User-Agent,X-Requested-With'; + set $cors_expose_headers 'X-Total-Count'; set $cors_credentials 'true'; # set CORS for approved hostnames @@ -100,6 +101,7 @@ location @mempool-api-v1-services-cache-disabled-addcors { set $cors_methods 'GET, POST, PUT, DELETE, OPTIONS'; set $cors_origin "$http_origin"; set $cors_headers 'Accept,Authorization,Cache-Control,Content-Type,DNT,If-Modified-Since,Keep-Alive,Origin,User-Agent,X-Requested-With'; + set $cors_expose_headers 'X-Total-Count'; set $cors_credentials 'true'; } @@ -108,6 +110,7 @@ location @mempool-api-v1-services-cache-disabled-addcors { add_header Access-Control-Allow-Origin "$cors_origin" always; add_header Access-Control-Allow-Headers "$cors_headers" always; add_header Access-Control-Allow-Credentials "$cors_credentials" always; + add_header Access-Control-Expose-Headers "$cors_expose_headers" always; proxy_redirect off; proxy_buffering off; @@ -172,6 +175,7 @@ location @mempool-api-v1-services-cache-short-addcors { set $cors_methods 'GET, POST, PUT, DELETE, OPTIONS'; set $cors_origin 'https://mempool.space'; set $cors_headers 'Accept,Authorization,Cache-Control,Content-Type,DNT,If-Modified-Since,Keep-Alive,Origin,User-Agent,X-Requested-With'; + set $cors_expose_headers 'X-Total-Count'; set $cors_credentials 'true'; # set CORS for approved hostnames @@ -180,6 +184,7 @@ location @mempool-api-v1-services-cache-short-addcors { set $cors_methods 'GET, POST, PUT, DELETE, OPTIONS'; set $cors_origin "$http_origin"; set $cors_headers 'Accept,Authorization,Cache-Control,Content-Type,DNT,If-Modified-Since,Keep-Alive,Origin,User-Agent,X-Requested-With'; + set $cors_expose_headers 'X-Total-Count'; set $cors_credentials 'true'; } @@ -188,6 +193,7 @@ location @mempool-api-v1-services-cache-short-addcors { add_header Access-Control-Allow-Origin "$cors_origin" always; add_header Access-Control-Allow-Headers "$cors_headers" always; add_header Access-Control-Allow-Credentials "$cors_credentials" always; + add_header Access-Control-Expose-Headers "$cors_expose_headers" always; # add our own cache headers add_header 'Pragma' 'public'; From ea08c0c950831ea652283d930359dd56541eee2e Mon Sep 17 00:00:00 2001 From: Mononaut Date: Fri, 27 Sep 2024 16:09:12 +0000 Subject: [PATCH 065/147] fix acceleration history paging w/ undefined total --- frontend/src/app/services/services-api.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/app/services/services-api.service.ts b/frontend/src/app/services/services-api.service.ts index 5213e131c..c87044781 100644 --- a/frontend/src/app/services/services-api.service.ts +++ b/frontend/src/app/services/services-api.service.ts @@ -165,7 +165,7 @@ export class ServicesApiServices { return this.getAccelerationHistoryObserveResponse$({...params, page}).pipe( map((response) => ({ page, - total: parseInt(response.headers.get('X-Total-Count'), 10), + total: parseInt(response.headers.get('X-Total-Count'), 10) || 0, accelerations: accelerations.concat(response.body || []), })), switchMap(({page, total, accelerations}) => { From da2341dd00c57bbf5e304a18010399b9cbdc56a0 Mon Sep 17 00:00:00 2001 From: softsimon Date: Sat, 28 Sep 2024 08:56:29 +0400 Subject: [PATCH 066/147] remove rocket beta --- .../src/app/components/master-page/master-page.component.html | 1 - 1 file changed, 1 deletion(-) diff --git a/frontend/src/app/components/master-page/master-page.component.html b/frontend/src/app/components/master-page/master-page.component.html index 9fc2d4e58..1aa13e309 100644 --- a/frontend/src/app/components/master-page/master-page.component.html +++ b/frontend/src/app/components/master-page/master-page.component.html @@ -85,7 +85,6 @@
- + +
@@ -96,6 +97,15 @@ + + + + + + @@ -236,7 +246,12 @@ - OP_RETURN {{ vout.scriptpubkey_asm | hex2ascii }} + OP_RETURN  + @if (vout.isRunestone) { + + } @else { + {{ vout.scriptpubkey_asm | hex2ascii }} + } {{ vout.scriptpubkey_type | scriptpubkeyType }} @@ -276,6 +291,15 @@ + + + + - + diff --git a/frontend/src/app/components/address-transactions-widget/address-transactions-widget.component.ts b/frontend/src/app/components/address-transactions-widget/address-transactions-widget.component.ts index 998d269ba..83424791b 100644 --- a/frontend/src/app/components/address-transactions-widget/address-transactions-widget.component.ts +++ b/frontend/src/app/components/address-transactions-widget/address-transactions-widget.component.ts @@ -43,7 +43,7 @@ export class AddressTransactionsWidgetComponent implements OnInit, OnChanges, On startAddressSubscription(): void { this.isLoading = true; - if (!this.address || !this.addressInfo) { + if (!this.addressSummary$ && (!this.address || !this.addressInfo)) { return; } this.transactions$ = (this.addressSummary$ || (this.isPubkey @@ -55,7 +55,7 @@ export class AddressTransactionsWidgetComponent implements OnInit, OnChanges, On }) )).pipe( map(summary => { - return summary?.slice(0, 6); + return summary?.filter(tx => Math.abs(tx.value) >= 1000000)?.slice(0, 6); }), switchMap(txs => { return (zip(txs.map(tx => this.priceService.getBlockPrice$(tx.time, txs.length < 3, this.currency).pipe( @@ -68,6 +68,12 @@ export class AddressTransactionsWidgetComponent implements OnInit, OnChanges, On )))); }) ); + + } + + getAmountDigits(value: number): string { + const decimals = Math.max(0, 4 - Math.ceil(Math.log10(Math.abs(value / 100_000_000)))); + return `1.${decimals}-${decimals}`; } ngOnDestroy(): void { diff --git a/frontend/src/app/components/balance-widget/balance-widget.component.html b/frontend/src/app/components/balance-widget/balance-widget.component.html index 4923a2c06..87f14de53 100644 --- a/frontend/src/app/components/balance-widget/balance-widget.component.html +++ b/frontend/src/app/components/balance-widget/balance-widget.component.html @@ -4,10 +4,10 @@
BTC Holdings
- {{ ((addressInfo.chain_stats.funded_txo_sum - addressInfo.chain_stats.spent_txo_sum) / 100_000_000) | number: '1.2-2' }} BTC + {{ ((total) / 100_000_000) | number: '1.2-2' }} BTC
- +
diff --git a/frontend/src/app/components/balance-widget/balance-widget.component.ts b/frontend/src/app/components/balance-widget/balance-widget.component.ts index 8e1d3f442..f830587cc 100644 --- a/frontend/src/app/components/balance-widget/balance-widget.component.ts +++ b/frontend/src/app/components/balance-widget/balance-widget.component.ts @@ -19,6 +19,7 @@ export class BalanceWidgetComponent implements OnInit, OnChanges { isLoading: boolean = true; error: any; + total: number = 0; delta7d: number = 0; delta30d: number = 0; @@ -34,7 +35,7 @@ export class BalanceWidgetComponent implements OnInit, OnChanges { ngOnChanges(changes: SimpleChanges): void { this.isLoading = true; - if (!this.address || !this.addressInfo) { + if (!this.addressSummary$ && (!this.address || !this.addressInfo)) { return; } (this.addressSummary$ || (this.isPubkey @@ -57,6 +58,7 @@ export class BalanceWidgetComponent implements OnInit, OnChanges { calculateStats(summary: AddressTxSummary[]): void { let weekTotal = 0; let monthTotal = 0; + this.total = this.addressInfo ? this.addressInfo.chain_stats.funded_txo_sum - this.addressInfo.chain_stats.spent_txo_sum : summary.reduce((acc, tx) => acc + tx.value, 0); const weekAgo = (new Date(new Date().setHours(0, 0, 0, 0) - (7 * 24 * 60 * 60 * 1000)).getTime()) / 1000; const monthAgo = (new Date(new Date().setHours(0, 0, 0, 0) - (30 * 24 * 60 * 60 * 1000)).getTime()) / 1000; diff --git a/frontend/src/app/components/custom-dashboard/custom-dashboard.component.html b/frontend/src/app/components/custom-dashboard/custom-dashboard.component.html index bf72aab69..65f0dc0ab 100644 --- a/frontend/src/app/components/custom-dashboard/custom-dashboard.component.html +++ b/frontend/src/app/components/custom-dashboard/custom-dashboard.component.html @@ -257,6 +257,36 @@
} + @case ('walletBalance') { +
+
Treasury
+ +
+ } + @case ('wallet') { +
+
+
+ +
Balance History
+
+ +
+
+
+ } + @case ('walletTransactions') { +
+
+
+ +
Treasury Transactions
+
+ +
+
+
+ } @case ('twitter') {
diff --git a/frontend/src/app/components/custom-dashboard/custom-dashboard.component.ts b/frontend/src/app/components/custom-dashboard/custom-dashboard.component.ts index fbaf7be74..622e6cf3a 100644 --- a/frontend/src/app/components/custom-dashboard/custom-dashboard.component.ts +++ b/frontend/src/app/components/custom-dashboard/custom-dashboard.component.ts @@ -62,8 +62,10 @@ export class CustomDashboardComponent implements OnInit, OnDestroy, AfterViewIni widgets; addressSubscription: Subscription; + walletSubscription: Subscription; blockTxSubscription: Subscription; addressSummary$: Observable; + walletSummary$: Observable; address: Address; goggleResolution = 82; @@ -107,6 +109,10 @@ export class CustomDashboardComponent implements OnInit, OnDestroy, AfterViewIni this.websocketService.stopTrackingAddress(); this.address = null; } + if (this.walletSubscription) { + this.walletSubscription.unsubscribe(); + this.websocketService.stopTrackingWallet(); + } this.destroy$.next(1); this.destroy$.complete(); } @@ -260,6 +266,7 @@ export class CustomDashboardComponent implements OnInit, OnDestroy, AfterViewIni }); this.startAddressSubscription(); + this.startWalletSubscription(); } handleNewMempoolData(mempoolStats: OptimizedMempoolStats[]) { @@ -358,6 +365,51 @@ export class CustomDashboardComponent implements OnInit, OnDestroy, AfterViewIni } } + startWalletSubscription(): void { + if (this.stateService.env.customize && this.stateService.env.customize.dashboard.widgets.some(w => w.props?.wallet)) { + const walletName = this.stateService.env.customize.dashboard.widgets.find(w => w.props?.wallet).props.wallet; + this.websocketService.startTrackingWallet(walletName); + + this.walletSummary$ = this.apiService.getWallet$(walletName).pipe( + catchError(e => { + return of(null); + }), + map((walletTransactions) => { + const transactions = Object.values(walletTransactions).flatMap(wallet => wallet.transactions); + return this.deduplicateWalletTransactions(transactions); + }), + switchMap(initial => this.stateService.walletTransactions$.pipe( + startWith(null), + scan((summary, walletTransactions) => { + if (walletTransactions) { + const transactions: AddressTxSummary[] = [...summary, ...Object.values(walletTransactions).flat()]; + return this.deduplicateWalletTransactions(transactions); + } + return summary; + }, initial) + )), + share(), + ); + } + } + + deduplicateWalletTransactions(walletTransactions: AddressTxSummary[]): AddressTxSummary[] { + const transactions = new Map(); + for (const tx of walletTransactions) { + if (transactions.has(tx.txid)) { + transactions.get(tx.txid).value += tx.value; + } else { + transactions.set(tx.txid, tx); + } + } + return Array.from(transactions.values()).sort((a, b) => { + if (a.height === b.height) { + return b.tx_position - a.tx_position; + } + return b.height - a.height; + }); + } + @HostListener('window:resize', ['$event']) onResize(): void { if (window.innerWidth >= 992) { diff --git a/frontend/src/app/components/master-page-preview/master-page-preview.component.html b/frontend/src/app/components/master-page-preview/master-page-preview.component.html index 8f3204ec4..01995906f 100644 --- a/frontend/src/app/components/master-page-preview/master-page-preview.component.html +++ b/frontend/src/app/components/master-page-preview/master-page-preview.component.html @@ -6,7 +6,7 @@ } @if (enterpriseInfo?.header_img) { - enterpriseInfo.title + } @else { diff --git a/frontend/src/app/components/master-page/master-page.component.html b/frontend/src/app/components/master-page/master-page.component.html index 1aa13e309..557529eef 100644 --- a/frontend/src/app/components/master-page/master-page.component.html +++ b/frontend/src/app/components/master-page/master-page.component.html @@ -19,7 +19,7 @@ @if (enterpriseInfo?.header_img) { - enterpriseInfo.title + } @else {
@@ -39,7 +39,7 @@ @if (enterpriseInfo?.header_img) { - enterpriseInfo.title + } @else {
@@ -49,7 +49,7 @@ @if (enterpriseInfo?.header_img) { - enterpriseInfo.title + } @else { diff --git a/frontend/src/app/components/tracker/tracker.component.html b/frontend/src/app/components/tracker/tracker.component.html index 4e222479b..2d9bd4982 100644 --- a/frontend/src/app/components/tracker/tracker.component.html +++ b/frontend/src/app/components/tracker/tracker.component.html @@ -4,7 +4,7 @@
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

at}s8iIOyB1Svt-(bX zUWhlo@r^k4*kci6#K%7NG5p?t{cq^IfaR5g3I4qEdjT>*o|NhIrj9>e; zUu)h=R1}m!B_{Ah3Bxep$}29%Ti)^(JpJiU$G5)qExhZU@5I;s@#~l_t(2ieLBLvz zuYT=oc7|LHWI!s z)B^83rjrTQ)>b$DPK58@xf^%x{y~X_DCdZXpLB?#=Q%gea<;!E(Z zcY3_#EpNqxdmfTY)gY%>Fe@8P$9>$h;;dFSEKLl4DEU;0vPIp`q#&hNej^ZCH8u?A~o z0GxTo={VwuBXIlex8tFQ9s+X4DW{xrV8g3!!*aJ|IAd_k(MRF9V~@j~KllOm?Ae30 z^>v(k&e;d646o_PFm?BBm10I>DogR$+9LvZoM z7vqQ{j#yX#U3kF-c;oA@#s7Hk`w9lUszl?$5WH@Kvt(R~(<@hpbwMN>9u!zgnS}X5GGXPmZroJey1d8;OG#G2_0Sj3j zCYT22o+aa%%O4UnrN^P$x5J09p!#fwF%{QUbH7Ly>dv~-8Ck12T)EP1;MGVe4!g~c z;hHty(rk=TM~^AZ71M!gjc4s*&1Or^UUm0w9xABL$EiRJ;#jG|%UrNurQU7O^;z&~EoDMcx6WFi5uh%R zj-*-2Ib%%YrfhR@PRjz8a&=M{QA%@8X?^T$6;tQ}heRo@?|rbLEU-&$t>lCz4yvt} zGm+E}R^ncA$-IIt9J4KCiv!RQC0aq2N!B1IK6`a>Ub4%jsc*%Onwwl4o$_<~5Nh6X z^ZT$f9193Qjdt=r6j4Gs`_1BcsP(Jn%I1apivku1d@UgULN{WzSu95>t z=m4E_q6p6i(7KGeh*4urT7nsjL3V|B*u3xTDAqr+34DqD&A7j`TEQiVUFhL z%22xAxf#xzD#QUhOr5oG!Hct>O78grGs?6P=ZkS^0in2iS~`#lN7d=C!ye6D%#j5~ ziX_hBk|A;0XdDCQoL3|ungKhoS=_+AJCSW@6rqp~MtNU&5LX9t##lI0V*=WD(zJg= z7Tj*);m+FHDjs?GVH~!7I}Tcz!22!m(+ShBdSJS=gz3@-hS>AW#bn9+Q>UxuuC_~8 zQwO-p^tH8qbHwrrOY9U*Dc8i^$S%lWJuFFfv}9Hq!RF`8fQYNlt`l2Bb(eZY;5}&sql?9Dq@ftr^37WYjG9 z%!?@kqzik8AY%TU2{iCfdW;dXxq<7P&>n4}o>{qDH#X(~&9T0^&LWbL9ci5mU_;lT z>pEUSxPZ>{|34cZQg=Q7yrJWoS;~ltf*e>(WYV z5Vz^BtwtqV>Wa=ej!slDvWTAI$oO80{GN6qKn}qn5n*GtA#^N`3dn}a;?%(*jzV{F z1|*RZY2@E!(sz8WCH}ul1RXJs*IS2yfHAY6Y-2vh{^hB%gpXq^ zqJ$#KrHpLz0i>YP7bpoUqX_m?AXGB5i-9=Q$aP zB2pac0zuP%8oDdr!M>2-S`mCZlWqG_6_U2X3*7^>u2y#U8Bj8y4ESz}zF!t%x1u67;j)~Miz2} z0SVoSDR1*c$b&(0JfrI@XMks+H&N+3O{tOCh)ggJ2tmjb$s$uM;xbTz$x4NCFrAU; zG~TWF;DGF^ds9T)*`kn^NHHl%vHd)kRKZ=OgxN5%$UJng!8P@+Jm-NC@Iz!C<_QKTjK)rF;lb^LQ?g3w9W zq)L%Ajf>B6kchvX)Dhf6ILl&_ahOXaikJ#A3xJcDrFpC&8)u1%LW&~BOobH3BtaIv zw6S)b>qESt|0zN=q_x~Q;Mc3I|+)MRc8vXt5Zkj45

rXLTln4G8>CQdJpbnbf%e0{G5R;gh8EwF|Ub)`p3^R3==gtR-DgQ zH9xcwJZ4j@IL{^|x=+j>+8gVRTIW?-*HDZS3&i3&CLVa1!5WFEGJs<;TKm1KINxhu zMluYk2Z1Sq^n$0P`XzWlrxCHjr_D~$VQorPwWy13by>87$=1E33X{!2_brw)G{flD z6<>2Uv5-q>t(82vTpl(p5Zj-jMKo&TSpW0tGT-c^^In@x$&Dx)Yb;SVvWfng5W=Y+tzKk>fc|5|L`CFefgg5yYD`{?|pxYul>V6F66Z9 zVc7RQZo26v%_8R z7mdN)ci)X0Zny!z`m4WM{;aO+aPB$h;KLvK%W}aM7Y}J>X^ZR1`0@>3!mD5XYMgMw z3B|Q>*kOm^gcD9E7~!(yu$G;ok{_#RRLvpXe#jv>_0&_bckf<&;48OopdsueZmP?T3W)( zUiLD4`#aykr>^@nf)60D0|1*m^GOOgYh2AF(t}QrC)~`NO(@qYT-hu^8Ow!E;u_SY zoMfpRv+yqJqKuGn=%L$i%{ABJ^2;yB($W%g&ba^n`|+U<{T06W#V=zVhh|x1%j16A zZMS3h5AVY2{#B$zc;t~s@cP%kz97Kc$OgrFwdZOt<4?XTb+?|hfIuKDwI%)kONVQF~<@BNcM!I@{Ci4X#Ayzxf- z(I5XY?tkz>OvDwT1+S{zNmS7{-Fyo^@WBsa$Bx7CjAtB=mE~nzcG+bhBD~|B@50`_ zk23a6n^brcRd=%7UrLgc0+i&#S!S@+&|A3pQh z&*F(Eeu6{^zwqK0;~B>vkHZc-Y+>Pa!ZV(M|N38l50l9RfA9zI!8g9~Pk7+Lhp=zo zzJlrX-eF~V88_W@6Ry4XTAXsqDdjoawrv}p``puUHE}|NQ=Ts;#hQbVc(txZLy`;;gZ9?D8BpY zf1P2aWrJ;BSnigLY$?W4bzz=-5~J=Pdu(s{nKpl>i+7GGjkLNNOzZoz5X@~Z`P2}x zgf4U1C>=n)&ywpKOY}@3{$y8?V5aCni*l7p_IWeQ|0$G!j9ky~yy( zT1P;zXU4mQs2p{b=}_H>3R)d`*4cu+uS)@TJm~kFWx313r(E#IIvmnwsXD;1K#I^s z90YN^aDK^BGuzy#Z&5@K$Q6N^n@vw$MAzDtWT2+_IRg~uZ@~-7S(`ISMzG+hsk)~5 ztFUEItuzJ&-NScYYpIlVwk37|)1vDs&YdeDL$) zC4K=7np5-GNnPO?jR?2We3WvLsP;a94%{HoFiAufl3A8x8RpgezWRHmLdh@-1QubU z$x@XEXXQLkJg_p(!ok;(N6Oo9DV+5zH{EcEfw~)N^1S_I5fCS+V$uL&Y0m?m7#I53L zQNmN{nI)IeitCaLO8%zSzt&h7${16s0x<7O_8$?!io-+a0h)j5BwxBQ&=%E@-Vm$r!m7>{uy&aMT+AnBp8c45@JrU-9*sT zJU<(T0fvC!RN%o2KARn5pvQzX&akn%(TJvNAKY~v4{*>b>)2j@i101Ev>C2 z6l&^?AS9jC%wk~jLf?>^9$M!J;<=u+K*`EB za6a%EF)-fPW`mdrM3J4ShWi+H)mMQK&m@u%O-V?leIb}x5$_oTc-I4&k*^UMqr{d_ z&hXa5E7?%`6L#I1LVAfr*cc;bX~f1jV79)FL7vgB?~w^`s z91+Kn#S{r3@bZNne+DiaWMa|cDDxncMRJWs(%zPZ8=jx}#3Bu(4DyU-A0(!tb3tl@ zh_PfWvnj9(9TQ22I5!@g&uc74a(He@`RE}=4D&pg|LwdiZ%jl6!CMxJ(3k+n&zX$| zbHQ^ba7J=+Bw!`WF&MM0-wC}q`5v0z7O~pb7jj4+f zq;sll7L?byQU90sP(@=J$(FG|U9&>CK=ga}lB1gUxp%Kr5xL=>o%N!;29aCex zDgP`PrU-Zuq86ipn5dM1=e_6qEF1ng1(;sk?qsUyDA)HcI0p+0FT&K^JbO%;utJma zMVRE07+}P7N0u|jo#mcVIxA2jAuo9Fh>sKqCYXC(>KmEUF?L-eqtgP_h3hpDLBK7< z2NywtnwK-dki>O0F*hnW(b!)jacx9Ndi-WSVoixYt~1)u#IG?qm}gG`E(cg6Xnsl} z2Fu8<{ti~=4Q*6PC7c65VpBw}JJUASMtf)owUw!po+&_JLc=f&uoDZLx$Z10u58K- z05$20$*S$*D3@GB8AK*Uews1>(O*ax+3eVie%XP9r`$fJ(NOMd?6 zarU|A;?hel!Pc!?vAVj7JMOpxfBxrxhR=TP`UPxc9Y*nI{P+`3l(k%@j4yogi@5sg zs}~mNig)CEnL!YM^@Zeos`xWR0qh)PymrkZRV++FMd@&dGFDgDaNBL)!^00hjKdE< zTrgEVPCM;19CO?=@bJSAS9ME@{2R%^XQW}%GyjGgZot`RpN$#O_l!WUi)Yb|cR`DWbqz3*aa<)D%cVGOYM(Y*y@xW0cM z{{CxU!5VdvLUQw($6HYww+4$9K|08zp+=-2i4Sev=K8SDLdJC2hI=Bp- zID3!t>J-Z;eJyUh>7Q}yEw|tq#~%;p9JXxPf?vJ%T72_gzlnS9y_bKd7ORV@E-EPS zT(PbsYD9LNCC01}%91(%w2WtIN<#B|TWjlJLl#XWYUgnrk>U(T9d#^T^rD}`S!bPv zi!ZqtJ9g~AzJ2>}|NZylUGMtu`26)>Ko`0)H07a7ZBqB`Uxi&=D+S3{zVcPP<~6Tr z7U(Fd#o26*uJ6h)moJozF^)(SMLBK`%&wNfw+9M>$DlUPIfHXqWVx`hZ$Do9y4T?q zueb(%-{X!uZpVAy`(8Zq$RmQEwToH4Qar0@!5V`veBleY@WKmm)KN#3EcSEGITvS~ zemef?8#gk%K=V+EFk4^8TYmS=IQ7(15kkOYk3EJje({UA?e_0uI-M3LoDR`bX)LB3?ICUGsud9D--G~dZnsPXQVmcMQHX^cO`zN0bShX zxj}$SmU`n9FK%oZj_Hy@U4)r(v*7yK*m&1CMK$kR1xdp&RM!T8mOZiJ?3SsuZnL1$^TE^w&%&|ZEQt%vNQOwNhgalT6@Zw9C?b?IqG_Hq?xzd@ zOv&`syjX1#jAe3@cV0wYm~&sC001BWNkl{2 z^W-9!$kHsqa80q<;iM!TE8SBTr{Ds)DVvHIH(7`?p%E741!uqJcx!#23v6ID_hQD`H?nQB23#!sI%TmoeuaR6$WL4%~#EbhfH+Ldu$kM{X zMsI-PkS~3XIE>;bIpFLJ_1QIba*bHhg%0&LhQnL9pvU%1Li-jKMG;5#z`|V*BMCKL ziQm(z-dCYZy}M;dD+|q-NYMH`9Ewt#X%=#l_Z4N>;iT3W7*8k!IX#<)jTy)o^j*)6 z;0(mXwR?8C+`aXDU;+Oy4(vLI(!JOXp@Y|K)%}%9e{NwKM>`MZjWGz$lryU=G(vz? zoTxF_w|^fV+50HAA9^SbIrLDFEWwO1@Li8dKf%0TLP~^joJ+)91TqQU*CUMt%A<${ zES%OSl84MfMG;MbMVn5}fh-u|lry@{m!)*347i#NZH<9da|YJ8gZ2+hLJ zIbZHm7OCci$z54mh+{Fvk&QDVyvtNG!n>|3VzD3?cptowr6N03DT_#q#i=V{%8qbx z!g&{Dk?Y{CM{pgy@%-MpfZ#hg7hr8bA9~FEoX;5|%!fHYKgI~&H|s=%vxp;rNHAbj zFlBa{T8*qi#xRT+BJqIU*@D*1a@T7;sR;0t5_sI1;Up)OGwS(VfqW+^BE?)? z*f4OxmHOKX*`WX82=(sjCJ(XB@i z$9iHnaOl`9S!hD8#;FN)A#{%86+%Gr9;@Sk$M*jOkN)IQtZi%v5svRI&a@_Rh8xU> z0bM6cHt_wW_!kP`RdDJGcA{i`dv z&DZvN-px_l2%TU`mUcEgADK;ww2*iI@aIk>v9g6O3W;6NxZH z>4jdF=Q=lA-XVPQ3G-VvVp(1dw-oa!mVj-^S%*f)iQT{st62+6%8L}7wr#n9n zc3c}H!c|sZz)Fre*S#H*M1E)_j0(EZMCw^&I3vc%lz54odER4*cU3B8(cO&JSu6rD z2yOyz1B+0k7fC50jbm9<*ZnJtWHqKrMG?+gWXHX@bKGZCx3*Bo!Bj%l-+DO9v_+0O z$uKeU?5M>4>AZ}4EuP;gdD0Y_nxH=|-nltC?GNI$Ea|K%2Z?|a|F;fEhy{;b0eI}ERQ`PKNtKl)@q(2iI3wAZ+HWq_Oz#!hU~e|eJ)OT)(N=({s$ZMs5J9VolCiV z-vDssl~;g>@X1ep629vTuEA-Mkf=CBVLk4D;DH02j{1zNGeTnktg#qk!n2_ZI~J9$%|t}sp2UN=s9PM>rZ0*Uj!*U?TDlB z%;S&45l0-3lTJDbXPj{cPCW71IQ;O#@#v$E;+9)(#jUsAf(NBwwU{ zzR!O42{`V!?!atK@}MR}7_8 zu-}nl$;&%v>o)xNcfJEZ|DqS+w9`&ws>Zf$xaOCx!9RTcA945H_sDybgv6ms5+0sE zviA|JudhGl*@Kebn@Vo46^ErZ%KP^3$CLZ^Er?C}zQ^v}Kg0+B?9cGnV~;Q9O4QIxV_8lV><&Ezj@()tdE}A!KYr!fQh=)~GB@G!?cRMlonq_OtvL4BWAL=6?ZB>G zyEq?S8gMU8IU`XpEh1GHhFk#YMo$}Jfz)oImT<;l!cX0zJJ0`&;Fi>VW-K=qnk}6R zGMtA}LPdx0+#2k)ErY?Qa-UBo6J*0ESmPY}jx)XzGS+7^Bx8Z#(T5J(w{OGF!w<*v z&O8(6oO=$=JmX9j@JXYhi;|=WA&In57nzazB+I#BQJ1egxQ;+(ys>Q}YScNbif4YF zY7CFoXvWk9BxT}evAOS|PG}ue#_UQf4#7E)s$!jB+zmTla#5H|rmHxRj7de@q3YP;IB#+1dL~;d z&VH0yfYfd0(5PN>xqpIpbuljuy|J22A4T+HitAFTPpU>%_b3rz(oaMojq({-aXaeL zH&Lp{czF*Moy?9m&b!p#x7^kG*A>BvS;PewXRT=nNLKK3c_9yrR0-XRRx*oEVXB)} z9n1Q=^CGpnJ$0B@M3wp(S(L~JWK~zY1<`;m?|B%Jira}Xlt~(=xp+tmH&ZrPV z(_=9XnV${9Fpp&!nPu1*yc6dSiEBfbJXDuz(i~h^tC+?iE$vnUECSpZNb#Bo4220@rJMc4v$&?f{JvF^!y^ zXxJ%Xy#twy`M~1x5CV*I80X^BmG`j-xP?9tycd^J;$XRi* zd^fcYH;q%$7!^2&WJYn0@(|XtwT7RC%xLc7Xc0k{m-@vBDm8DS*%@mY-xvZ@c}Qs> z?C|Dz10;pKEuYw8s@`{2R@V$tVIYDILq;LIS%X~@*ZRXqKGl3;tz_%+4Eld zY0a!jh7puQ9AUFWS3v~sNr=Z5$Q0oW(EAQSp3&;8O6)|P_TrG^j7F11I3gHFpT&e^ zEC%b5gF_Y+DJa2Eh9$+-GZqmZ2-6NUjxZx59APs|@IWKFFycH*nFq|Avra{Tr~>BB z8pLq`5sPA+w-`l$@4Z9km-y}y_p|dJ!RsK_fQ-(hct}o}7|ZDcoNI7PFC4PFFt;GAj7Feb`E zmp@BydB(+}O2(M?(-@93sT~^S*e4bc#G|8DVo6RJXHxw$5X+*ynKuy8=KaM`1`J%V+dfxdh&#@P(Bjk!dk@Vq0XgaD6W&P&M7`$9g*7RU~K)<;NP zAV#LpaSfXzi$Dk<$q= zOvLp;*MnjNWpR6vK^&RrfG)uG7H}Pg%&~4n202E|hFG4VuImsp|E{6yAz4g}rj3Nq z^`Jx;h8bs83)!T1o<$e7W5-%%L~?c@TU6T4WQmZn-gn5H^mZu_(btX~R56 z+|5;ZDZ*iE4Eo^VdXEIcd_EvbET=?3PA%;nOp*rWptR%H^BxFQnOK_fh z{Mj%Ts*jW9CFd>!&UbJCtd$y_185w;s{wNa&M#}6**k~x z7tUgTe@_ISL)6+;X=hToVxEPdBX^wvi(=V_VFjucOPw+22~@K8I6P)85SBc5g3RRi zj%l9!K8~Wu=#ter&5DoDh-BxfMt`cnYiDO$`zyBR0Lvl*4~m48Mi9vWF~+D7O+qAK zHF%b)w?`#)L5Fc7$Wj@v_53_$n6aMLDyV6Kcd5hD!&OCgk5kkmGambD$6h$6;Ty+;m%_KS-55bW+N^|uO$YG)`V5yGS>bOjS_ zq;X5cLts$Nn3q|4%|z^QmmxdMe`XHuErP)>x=2BJgsPu|dosQM?$Ft&hlq2Ji9^IB6!?vTU(@8Ab_ew z22^$RC#4fwvJBSX9h5My%Jx1=P|D(4I5}cgS1UH&T$gxdQXFpyY}&ivUyl zQ)Xa0z&yi|GcEj)|@QX za7-y-dwUztKmR;F{pnBRi6@@GSHJod-1~`7;)`GS0*;?NiDSo(NzO&5B(#ROsVhq< z2t(3?wcy;jb4PxcDF)2;-fYNZ!xB@+;V2VrkH%MIuWxQG1GIEbH8a0F`sm~M-2M0C zuDkBS$&)7m09Rab1#Y|THe7S{i}2j((+yihbO?_c6vN4$JKlfZ*Is)qPMtc1kKS_+ zN?rhS6)?JCK55qEg4ciR8}PE1z7${j(wFe5zx_KIvTzds^r8UCq8f1a?AasT_*ETq za`BArW|;Rb;HB5UbYq>KIB^0yyE~ZXMKADj_&dJY8<^w{y8Zoq{M~0hgBM+ORX1tw za`a-vop;`ex4rFcICkt9N-6lj2R?vd96F?=eTGHy0X3h*)aSLxFz7En@}KaY_q=E0 z_1=2REx7(AFTvB#JcASlaY!g70E$S17Y7k(6b#`!&zf^Co7*rB>Xej*4pg1hyAc84 znrpAc-+tyZFyii|o*nA4Hn+C6aQ^%r?z`_keEsX+z@v{mf{)*OFFyakKVawBF2-?? zhF>=Tp?;0|ci9}9!1{>im%X7ILTLwr4{%g@RSR&$v(MBHW5=X=gI0ILI`;3si*Mof8#fC@`@LUDw?GDX0Cvu6Tvb-k&FF+aTxIA*B-;uPd|;9z3gSa z*R58f`WuF%NHWPMe91Tc6TJ1UZ^cVq@)AGf{^G+QZg|pCz)=S~LX+Sk4oySuwyJe@pw z(sOaR%czB;Fq;z-Ds~F0^o*VB!v#4esny{YhogfuVvKnG>tB!8zV@~F&;9AomsU_8 za*P_b%7%Fz9={O>f{V{kxP=1uUC-TIG9t;okkzegLyLxf0h5UJ}cW(wzs!&;=~DcTNX#WyK`9^{&v2pR$uZ4yIR41 zf2|GcYtB&{B&9)7PdfA^?JXLqz%DoT+I&zYL`@l1II=P{n|S*fPRR zL}+K6iY`)u+qaZ zxM5kPF3eybCZo&ZHtLAP2GmWl!6DL=xf5$A61w;}+>CEBH?0iS(K*Mf3k9ef_S@%R zu4@?*ht0bRHG+l>zYPV~a>*M`+^zye2`BOy)GkY`p=7HI1DXyH6uLW6%d|5A4r^mo z8oeFx%8`D-k!K-EH>{EjIHBKHsFIOxO;r<`NYtw~3OiAmA@2x4N>a=EYsso!kFtJh zVIcHw`6jLj6g6IkRa^ovO4kfy%th*wq@;!HwRG?Xw^NpC%MSJINNN#cHh{GT_h5*A zG$lOs_zbPvtfmY4X9pE}F)G3!XipaoTeLzll2(xhI5T|Z>M)CX&Slu7P1O>x%!@yZ zCJwWlz?P3rzUBh4G-{nVBE#ld2s6*JR!dQrvc>vTjZG@Pe-Z;pn>ozlZb3(ZV{gKU zON49Pa67U()d$_zYh^^s)YV2+QgTC9T3KHw$a&UiF#bLP|9)BbebW48P*s8FO58m; zD}KI-7lYDOa>G5K?r#BoPlN0f#e`UhVF)LGGgg@uwYjq!y?O; zeD2J1c>39A@S+!8i<2kz5h#IIgdq($cH*S$HOq`?eSkIXBbvx#DT0D^C%ib2{Jx>a zgPf%ok-1`C7Q_&-Qb(NJA=n*4Nev8@rMYEsSwIj(cr-k2lG<2BJ4=<%bI=S%UZmEF zq}j~FC~l@K_+ddkHwx8~8Jr7JG-r7crb=D|KJq`$iAnpr*^*n(pWEhjHW^9@fC5e&6ZYM+lMcIo,?@ zo(y$r6WBKL~w@xF0WR0#9kz+~`C5sa&biy$(Z9J!5 z+iH&^s(6S)5{HsDCskvVMs^gg(6|;I&b3}Z3JKf83R`Ie=K>WEyNj3F7W@_fXYz;i{Nszwf2w1i+-5!hqXqQ)fDQbatd zb(FdIOtc$AlGqZ>!nInnfjYd$a3+cILkqs2!G>j0U^s1E%ApPdxYgz4xaxUvxDrPNx=F|yq z?}I?yJv%58SL1lN`rvLeZmDj>4N1>~ow#PPJs~C>J9Zo=PMpB*_OA4eQbY;>bH*~S zaj-tX!MqkB^bj4#3?!7KJrmZb4&GG{k>)>BK~3)ky?#9APa;Lg%lDHvEE;UNrqUgJ&mBq z=2{u^vX()SiiMNW{#YV%Dy)`|pduy&J7*CH(<}qRnCxCvW$3O*>{<(!D!AjIMuq?& zSk5mqSOrERJ{dg1f?4)Q5oIe06IoFBu>L{P`ZT+U)_Rn|`V1g>U$uxRF9hstZ)0mU z0$}V<2ROfX4mnTKBVfsamk6bxz04#6ig9p(hV=-nG!HQ%5m1AO^8-u&kklYywZ3H3 z$Bmv&3}SL1?VU&zlF>V(^ng?#zO~wJkrEKnu2Im0&=AF4Yj+bB9Ge)8^)vC_zGh=H zsH3PTwlsFb0ci%kWxGGq+xq_9^>*N}nq&JsoJh75%O&;y&9?$jLcXCc}CcYvg1zn+o-& zi#Rhn4S+PN19>S(av?ye87T%-s4zTdtzXFLXSI|T1I9&g;YyzbWk3hel>rJ-q9!3V z#1I2U8a1xS+|q17j4o6aUgONm;u&-?2n}Q@8S80keG+trgl<+EQ$p5^^dXAK(}{{j z2y>Fx9T7ttvNIP<%ZxNc?LAP7c+K@_b-MasS$ZWDYCX|#sE4G3okZ>0{+ALPq;{RqrkgMo7`gs6pc?^aAQv zc2a|ekv@~VA$15*tLl%{Ih#^*SZ?;ETjp}`M(qpdc^}o7ubq>ewHOg)OSz~~-{%@K zS9eRuFue_2+v_6K8a8s)(K$kTCpb~uXyDbV2ah!kI6A_}*!tG?YU+AyIKB>N9Ue{6 ztDu--t&cMd^w|623e8tC>xvban`VjL6x229PTho0eDaem=awxu2accy%*hk5x8IJB{MBD+R*Syo z&bj4in!tXc+K7CpRjd$U!_~A$K%(KsJ>_dUtYd3eM??K%#@RBhGXbo(^<)F(3MZ*?fOs`f4tL4eT#TVXW zQ3T&jr%vIfn{IM}(I-CfNpPv)0UfrvbQxaUT(9P$&}ZnwANdGwz4cZf0-rs57H6M- z-rbQ!T@SB0brZhj?z=bQ9PYX29_$=D(Ozp{QC(`rJya3T&hwVFkV3>KKJf{B;~U>_ ze0&H2Z~5-G;6+!z2ecxiqQeEx*vSYQyl&sFzFC zGxAyW;<$~MzL7hwYu|T_n<0Hn?zYJwPw`b-r@MUnRj_MCVdzNKKE{5xH2-bivUVh7Z`2sS>!btoM_>LDicpQsynFD zTQ4%|SoUT?B9BKfJUDj(naaHoP@4eU;a64YW_ZXNWGEk%I8tlzz1W>CwtizkWE-~g zQ5EDx7d=9fM=u$u;<#YB7%IY9gcHH3G0>*BkN~1nr9^zCZW+zpHe7!EN66foFG6Rdg8DxhEr z>N4$e6w#iOs+XryHQUkt46c%)O$~p^m0LVYf1U=TI%RNyzkehA06X2C|qb4V`Sge9L3{Z5B3_P?EoJ|btjg+kB+vtLmQH6IB`Bqdg8vOO=lJ)K%J3%*` zId1p5tnNoZsSMFjqUOTv>JEMX)4Z0DDT4tZARN+ z&!r!LC?Y1#86_{++q;10o_h|@oqh&aTyePw3kJa;Z>_cwxMDdtz=iYYvFxu=F{2=( zLY%mcNlrlIsv>iJ9zp`!xfc?m4!{v2I7l9BU=c7hY@(SwEqFkCEp|_5p)-^kkZVQO zh^`7?P$zLw!4VS!HMwvLD(ESmsV-!ltj$h>2-hO(fV)<3V4)RhLm43fn&F$(N<)yke-)4PXH@+Rr4M>qjL5E z7PJ22G!>0pK`OB+S?_c1GGEb<>49*K8F(NSvWFH7zFboODc6X5?VVVvw zPg_`xTNvViX_~N})|ltDVuRH=1s0JhF&G(GRG3G0Vu)i_zN3yL$@0D%X^?fOO-cg` zKJ=C6p*X^uI9O7$51fMEHH(Tg<^IXU-oPKnC}`$r4SiYvl1D8M94Y!YQIvJ7XJaX{ z*MJB^5JxJLxTu{N#X%hY=J1^t%u~jCE|_vf2C!Z-4%QRa>lryOV6IrLR#@%qVpObd zDFyo%_OW+<4;S_>U|z3LOZ9#;b^S^-onvq$4cmod+uYc;jg4)4V%x^V*d&{cZD(WK z*w{8V-0+*{t@{2?^>lT2b>H`?bI#@2hSl=Ivc=(m#y`t(%)WSW55?dr*vVp>omVk=bTc{3{I zrOiVKMYSz@E`u2mCAzw`HQcaezN%Maz?zd0H_+5Ja{`GyY~dooU>asST)%{HTKMq{ zMP&~4vL!?d?WHT}jZuB0l|N4e-DIVcxX(~L3ro}SQ(XY6fYGAyw3e3Ho|%atOy^af zUamTe@yKVDa)?UHb|l|}Y$db?&)KzQAZ95V9Q)rc#BmrRDRrC;^sVBt zX|gtp+Akr;LGL1-)a13Dy-r@A$PaoHrD$n>L0{IWqRD2T<3WNg*7aY7qX5 zDT_K%EGkvg4_fs!9EoTOlbpt9T9O=#3E$EN|HKp3b3hXyxOuAol)IepZX3{CIp9iF zz#|6_K@X_EZk0~Fj*sDvvfn1VHk**lPp;sm6JZ0@dW--h{(eWt!;fEiEAdDch(o9e z8wtVY`lcq+Q@fEPXPe3fHNyS!V;cWc_z%Q#@frz~;$Nx@b4D~GDxqMgG-sH0ky z!#&#C?!}{Y_hRd90IkTjs6x(=w#D!f&jLLN86(kf-G4S3l9{^on;39ABNlDG!#_|L zs!nz0Y(Q!pzj|O0SiW{iz7T>4UHq&QzL*4~Ld95Oq8pAEFN&vKB$=k-tWN9v@?IP} zwffQ8r$FwA_|&DFsFcTmof&i5{yLW~p2n|j_(+~+dV`!n?v*#z7_`30>7aB|)1TH+ zAm^4tq*eKZC#5=*K|x>`kb1Fi)n)*N#ivP`=Y}_eO!O|*&QVIQ29<$KHdSLbqeEDa zJB-H_2-*!F$}e5ii&_-Nvu^uyMnVGsJ4gh97*UM`EL`8MSQJo#v_PH;-S_pn4}x6p zzp@_T56Jz?FB@yyBiGl=O4+|prsIp4&Y&t_ac3*M7KaL95N-^|#+#yYV3Y7bdJO|D` zn|OKQ{#U2(*!$rbq};mg%kbZf_uo&CC86>4B)_9zf@>T55reEJC<=eVX9KR?aBEc2 zb^3m3tD<+e4dsvgHEIJEriXIEk1Rz;ee<=ZfIR~N#^|;mYrRZ!0q@fwd>lw@zW{7S zu17vix0Ay7{J!b^3Vc7%?g_2QAts62F!9BM>H0VA^mK9_G8^>GIN+4*GRN;TVq~Tb z%lscG0Zsqk>D$+6U0;9Eumm;;tkaeMqJw z_O#+5GCfp&fel@aJ|8bofpJfcT>$W%3>p> zh0RLs!mcKcQ5XV!YAORE(T(o2e*I59zQ4ay-i$SEZUd7jK9=yy*kkbs*2W)Y>4gY- z2oV{14%&I%d%dWG1@nIyB(BpV!>N!jfoX#FtP%<9`4xU4A49hm)kpFK#;dr!mqGFo-A z>e9ziCLM@L&DitUd7t(kP3$3V-SQ;#^oV~I9UY=Scdp;7jTu#2j7~*?574Q%me5g; z)q`waRwOg6nx7+xGrTe%lq6(5HV~tfV0SA;*L1kJJI>#l%L~A%J@MpeWrn7OspW%` zxA8`+jUy;06wNAPurC)t;;`}4;4V;10Z&IVCtSxZ=XV!K8zwIP>GW@(-8~WzhQ7;; zzYwXlAyA2k?w@F1(tR@cgIz$Ylj~vaWyxM-C}9x z@(0rs?F&8t&yyO0y-x#WX>QSSXWZ@QeW4D^I7drB{gUHh?OoQd0sf&=F8%2K3-qcZ z!A2^;tkeT_%XJ2IdcC}{Tm|8`K`E*zyK-uib$=uCxST=a?acZ;8#py}_R)C2NJ901 zW+S?8IH`o%cZ_6|$+6+@`72ehFOaO7)YT(m!`+pQOkZszGBv|6Z%Qn)MHUWC|A;-uz_xXYW}SlTAp^Xsj`R)Co>NNl7Tp_WFHaHg4t zlB znONNrhyvsV5Ug~aO7Z^ggq-6Rhl*qi(PprBaxk@9l}3ThWT+2LPQA=fpP`Llt4HcD z_98$VEPo8O*o|}%t=>OJ!P0!7Z=go!-ZbLGpg&hJiXry}B z#-k`$lsp=T}|^D@gh}oOS-_a zlhy3>#4!W+I9YvW{GAKg$mpnscqe@H>>_ut(Cmz^Clx_>Y05zq*}fw`w*C*4$9*@)y^VNzbHa@rSp8O)nr1 zeH%{JG|MeaVvl2$mel!M7^czRr~M{qE*V$!gbE1)HsE2D`lNST^7r|E38FmBn)9!Y z;!)58`r$L6TNIdKa2RXnc%h)_L#MLw@6{Tdr4r(Z@LfpbLXxyFc=~*mQ!;=W>(|WcKT< z0Qp#GyMiIj0Uk*IsT|i0hR%kpH8hu3hJ8Od0M5?!(z%=?-y;YEznF6P3MYl?D4(xv za`hzjNT)7z3xm@fv3afuHple0axV9c-0pax#sLXRvhsA~DD!>?!n||*Op%n3YQ*RA zI~vf^ukSz0Ir;bb%=K`}7Id~qAXKUl*y)JY?k#bWZ+KCn=}dKjsQj(1UiD2)VJ>*0 z{DLSyk}l$GKo^t0uUSDS13Cin_n+vA@RAugiQ7(TO-}Zr$N90M(%0Nr8GQJ-E^8yE z@o%XqLxgJ7ZMX$6!59#z(KgU#6^Y_09n2}o8b@4EE!v}|lE=EX>S!Zk%P)-<1uXvz z{|t`4*VZ#OAx+5Mlq03-+L>7^@>*|=YyK@^3R)@L(t=!&+br=2<=v5u6#9unS}rVv%rU?q^HkH*o@;NPuxI9udL_irCYM%D1n3Tz-@vI zRe5e>njKGAD3cz_hoKOAfcyz&M%7S4njF2pYRQFN%6a~cr$_}HTO8pRF0>j3{b)1+ zMBmy;Oz}gtDPDb@#vi7Vdi!XP`7!cWMfp5pVCu?S;v+zgSv>4d(jIACtmywF zLs!6dPgUbIpAl&cT%n_aqxT^o)f&ueu(<$nMf^vyo7+@?k87$9@CcSHfoCCVAWoCB zOQKHC{pm;pClqdfw6)fOaf&ELdKYPY5nP45Lu9=g_>6GV0sR9y$7mr(ITfM!lcL6K zYgakEe6H%H?tU`Ql3#}NnvuV@jUsvB5AK=!k-}@k^}u$N?)@d!^TV~PWmdZce*OV; z#|-ohQ3B8TIap5_{hn&Wl$tfindon1CJD*uEbSHh0_Pm8u$y~d&5RsMd4VX2!ms53 zdII6P#eKpmWK$4B>(AE<+1H22ziY1pzuxDX|9}Mlb<^zT+<3!oKa}$9ZS-9A_SLqD%$ZpA2;=SKhrQ}C!HEE(d z!Iuhfxh{UEk;BD;4RP*12Yx-@<~Rj5nYV)N{#SM{{L+uQe^(c<)sQUZ<{ur}b`S#^ z!rBSz{Ery!KpO!54XA%-tH2KRGO_F9>gA8fM!Q;>V!A-9+zC+&BA8y@+50#_l2ZY^Tb9q^&fDc1KZgHOum*0^Trcw^ zAFBUt6(g;iAHMI`H=oR)_NJTeu~S(1{;1IJB0L}4+;L&#hfwCYjPja^J7!@?@@R+( zc#9w=5F_`5oX1M^t&sFo9^6CX7MKTalLl`jq{hrgFc(nwr!Ru47 z=LR+qZs)^rC*jdIUOC{ELq@`V5jD)^?+d*DsF(lSh~CR6OVC zhh&g>#x&7cfe)Hxp*LUrDj%a!B<-gLo9lXKbJA?Ln>egt#B^J!#;<~VoYvQNOts6b z^TB(%XV9mxOpZecSgs0nQu#7&T`#0r8F9V;Ub=a`u89KAGCt$EF$N;@nRJ)E9A=~t z#G*#HyJ8dSN61dB;K22(=I3|5tAlGmp<9Srgrbd4T3CF2g;r7qC~EZyEO%*mA>_N= z8!l>0L*qW7*6YPz`JEcH7XMpZe&KEP0!J133-`Gj78DnB-}}zcbx(YAtB{x7ba>_o zu=D%1Y5nawx*&E4*FiJ^8QNt@x-r?p*EHj3B8qu*^S)7*T~Yr&ntM0}7|5OGbOmK- zuVl|KKxe(|y*l=XVQq7SJU3?jg}b#pMxfe8-%e^iR{t`bh&|4>xNt((ZAO*_yi^6G z#lud<_RKD8C<*Ugv#lOq-UQX4W3+iO+HC@3w5wqzGeR2_IWG)&(yR>J>n?wan& z?-Ipg7NAL1f^J#vwjq~JCZM%rq&y>iM#id9T>40=qS`VKAAtNrK8h!!g+j-ki@tM1 z=Db8tGMetQEYv62mu!U8(F8Za13QSvpan@AL9LUIt9bg2jj}t_E>3xli{f9xe8klL z3&MI^<(T{#Ef{$|kgmg8tx-Pp{o^$U3sWiF^O!i{rk<;h*)zt07^5JPQ3A}-9c>WZ z4|4q}S?jbaN&fjkElJVhS19+y7)OfRv>|e#oR5%s*tH^-M63dQcyRGfPW}h&I2!QL z2rzI~xtKVyU#ll4Eu&ihb^N4p8H6yN2hxg8Rb11pK$Vpu$H-;gbkO(JN(K%KF_<1M z^r95IXc*)FIFy^B(IUY^;Cze@Z@61K_TFJ#$d9^cL&}Vb&#<2x5YU&XWT?^9#F#_< zpCTV|G=f~PEu%_{r7+OyaC5Z%)R@rX}%Ct zfNE5f#WM=&5Yv`;pK+bi7Nn3gA{?`{sjaM|YXU0MrTN_sm`Y#{fgGkuw>swJDZS*l zElWH19T~bB4Fsp0o*_6mrAu`n;w2U^DaUhP)-^P7a=T!@}m7Pu6>HOsm&_|7_MkSP~fe;yqXEec&>#y zgy+%5aBMZ$jA&Zcd!qj}3eSth+1WYlBpDmbddV;*tDr)zq)B5*haUoyxB~%A+$NPq z&!+nJ_Ev6UU-Nqtp8`T!ED}IG)_MwtzaJ^8lMa2rYpWcQV?^_F1DcIeqgDr*fltD= zpHs11Au!MZ7+Yo0e;yE5l}QWnxQK&(JN@VIM4q6|Blp2GTOeoo;HT8Nc| zAYKQ@#RCJnT8qK!QrFE-7ssH@IhbQMZ;)eFFm|ae{;}&ci4?KNSNFi=3j$^NjhC0V zum2OA*`O`>{^XfbOX{W;bdNGXtX4Kva48cSs!J5e-;vlOXxJWlsg4v*u4x%TZ@6+66n7nq#phS9O;3SC9%*BsGBlLxu(1RcyR&mMP(@I`Q zC(EUNw@$SbI-`T@BALiBH(O}rv&#MG^wtU~U&2}z`Bhpmti1?~2&wdYsOOsK4kkCl zOJ0cX(zwhKi9+-{X#l+oahVN7Nf&wwa<%Cy|0v%SmD6X*5pbNV>&UBbb!d#*qCr3& z)cC8ZeYLB2nn~W4lK;={42D+4#p3E|NE(ZxE-Eay6Mm!0!T#pbtfhsDQmJ-q63K`P zU5^PL^fZ9J0zQ|Z#-y$(IIv@bMR2{o0$`JnBs!R?%6=q#f|LS}GB)g+_z@h)1kqNH z8cT;Z!f9e>M`&4*IT8NYY?2Q$U!sc-39`V!t*)(0=|RUyfVuvV$Ax5Tl%|y|7Ws1%C*tjeuE@8`opyIqQS`lZNn>0dM2zygT*8q?qa9v1|aIhZd zhP>;^=*TgLNWDbe#+^siKZPmjoW!Q7Z_YGY`<|hD9$dogngI-jMm+~2%Vkz{M5$3C z9h9U0!fpZk!&$&6j)Dj!!qbK@U33_Ej;gw!e5K^{*g33%FsyOisyVGHeQt)G-)=oP zI}HsbtuQ~{z1-T;PVRLanvIJ^Jw%EXNw)4aFlG=pm}vP^N@mxK2SQa%JPYAh>KugJ zxVSY%3_2W9(gj%t!>=`o86QHyI`?H)?uc}C4YL|w za?gt&6YZoM6l5dV@0+mSeT+R#VTMY%QWWkXLp}z zwMSSf*Q#-ul(q$nK#(y@vFZKa{1e6B9Jcb{@cCZ>k{9(YdOkz>jbcKzt}S{VdGRAi zjY-k%9MqgyHghMckq?q`h}w4r1~k$IPiY87tFqA8j005*=jkbkkuFJ{N;v(BS5~-W zP{o1uQ}+0AMk?9_=1D_1u64$3yrc!fiJR zIk_UmMc{#L1R2T}ShrW?pAnUm^7hutn=`~nGy>a7k`&#dKdd*??XrY*4PNm+sYwkX z`RqiBt9ZHJjxsH#S86^_^qK;7ai*D(@J3ZxWL$0Dc7jg4Zp(t6PF|e09}m1w1cH!Q ze8%NL_@>%H)b~D-VPu}o;JlBuykWrCr(2=H!lm>=wF=RI%{MMeE-$^wDI2)$6b^b# zqAZl=5dJ~jT1##DWujIEbO-x%GYJYp!P;9M5QjPF<^ALiRG~l56Rz*r4$aej%;kN$ z_x+u{nNhJpp|aX%kZ?O#yK5i&f0l08Z{A>eAVlz8$4d7M;&$hC2Vz~<-jerIJK%`C zI$i*i0m-KCs;-+j!#I!+)afTC_`KKByX7pe}NUttHiFQ+^yo~b3|G; zqDtN%e+Mn}@4(iT-iMO5>tU82DC&cS+VgLI0oR-D@y|L{`8#qs&9cy5EIdS(cK+ze zSdR25ro)i<>y%Jp9z<7{5T0D0eH^-l+)Cq{4*gPs`}-S9(}MfYJ72Ib%0d4!UO)k1 zvj0)nJXQ>&s%kqBcD_D#qCnpMrI)x-B7@f3c0aC#_K77#tT9$1y`v)*1^Q(&qXYd+d~ z$3ybQ8x6OyQG`mSi~0k!B`p)*Jh{D2;j6|EPuuGf7K;_JD-7cnR_=zDr^r|Ex*c== z_Z_;ra&THO^4juf`v*cY%uyuLy0&^g!1ho&bY@jm>H`AVXxBIdeaxly$rlTzYero( z9$i_M8zB^)+RonFDdu;N&6Lv6CjDtF-~fEdvfA2u`=|sW^Mn$ z)L{=@_rVeRN@^$EY~ocEe(pQD^9p+QYTE}gyn8sBc;XS#)>P^`{|+S1+cEW7|6J4f zlMxu5B2AQZ(C5&H2G%Zk%6A3lXz17CJQ;Q&gL`#QLLtQvnRDK7st8@(j6O!nAF(^O zj{12=avvmk(ce_{hmsiM{vHzPUoPyy@XFS*@g}K@3;lA@cCiu%GR&JXS(p z-lX=bXNY{%z9YsG2jq)$k?=Ra))ycps43vxj_pnl6HwlYv9%2(2L8NnYeZ5HH9KvK zcAj(17Mj#%`S&Ah;~P}J4bvLS6*K$XZ1T_KNHN=`%6P}l+tqJ7WYXsLgHNY7rm1L4 z=SLl?olm-F+%mI1$t{I5muO*!`foROQ=fPP(&=szDGZ?vlPFPKAt-!}F@?t8Q0wgU zd%5RWlcU=!kXwf>X08r_o|p@(KEIkQES~n4xhazog*E>YEJhx*P?$YD1gHO$i869} zJXz^+Z{JBmL}!%PBB)=+Di-T&?Q#2AUp&flo1JjGg&QgARmUZtq9ta2neXD}T} zQNKP{SWVAy-u2R>*LhD{kvWfcQbKRF7DH!xeBrImFV6HtP4{<2N~xsT=x2*|`O=2xXrrJxdz>3-J<296bezlLOA>W0 zYeq0KU6L{7x#y z@gCfvG5RMJo)v;Jw?8t1QGy;JT$7+{&1^>53Mac3!Ht%CUQuH&)=~w?AkPK_Vq{Pk zbC;%~m~i^7xPs!f$u$K!Rc1Lwn2^x~=YQBX+Fwi>&Pgdx^YaR;@2bg}S?zL4{@r3F z?ZcV5D~WN2h9Zk}@czyoc3C7ESla5=*ViX6%(BWBc7sU_`T%uqx*&CqCfMNA@_ziW zjo4d7Iq!#NlpjceOqa?M8ILqYDt0;Y(D>c8XA$-We0&w%B86l{0;Xh#s3p;w%#l?j zGthEUayN1A4T&-DoE5fY9hnm>wApqKQHR6J!geYS5k(cFGw*Xgl@np;Do0bx#pdft zQeM@fN+&?`6ZD~xFVu@uxo{G85vUUQur{jxh#S$AGa+u40TV-irl0IF+aJ}lm`zC2 z2wpO)K74kK!si0S9}aWKqjMDZ=lS_qHN#AiqbRfGV+p~gOFiM7FiqA2=+*3B3=X~s!HykFBYMY*w;2J*_I4K*bfn+NDL%Nr)39_RQ=q- z28h35VYbl{v~%mFX77mIH|(K^)E~dY$SfkSnmg!-Tx3Jb6O{XEd{_12mawfNqjI+P zQ`>QKYmlHKJ{(tBJd0?N+2HOkA`iuIu3m;k7nh5E-GWNgqPP7WjW>E)I6Z*u)p^M1 z$4XUw5(-ex8$3`Jj1Y(PoW0_@^fRe03&<9F6P&rp8I1@Fs9wP=wdwEot+^9mkIT-8 zGr*~y46R^>i>U{K>yw!4L;3Jcc2xQHoHUY>lZjpv zkx3QLZJJMZy?}WVeRuGd__h4k;EZU3a1RTES2ABCoHbN_*tff`B|h7HZAOF2Jl|rt zKrYBU7ch=z$evVE%bU6E8R<8GoP%Z`WmX{cvnJ2Xi6Cziv*A#XU=8o;yzpdrp?gb&fqBsa%v25DM4G*1&_`g2vxPr>4eDjKu}7`KlgJ&$f>pt2D3|n< zQ3lNDmJ<%rj(s-1;Fndf)1$4p!52`hvSl_sT;!kn#t*`gnXKX`|BXw*#VtOugo&b; zBq2V<DdC`mecFcNN~=Rz!k17}v3 z-^Huu{MPf`-5RTGrh;yuBEOiqhDq+sj1EM4TCd`4C`rzWgR;H0sYKslEJo@j)aThQCFu>F1c2CF+lSe&D5{}@aiBZ1uW+)n={YC@Z z9G0eQ(Q5Y$5Kq0R?VCCb4O~?jj-j(wR-uKOTOf6=!ewfD1%J4Wtn)pSEtWU2{+8MZ9Rh8ynZ-gl)6lrtwS2vP3nkq$!e}Doe-od?X}RKv zmdmi*=7I>QN7S}?UOQQkWX@U0>^ye;q3Aq#v=*62*1Y#os`r!I`LITp+ulTtil@pb zO?5r%H;ctt%{G`P%`30*bvP z+`ORtcTz8>-$j5TuSFsQ89fhF{-C_7)RcI?8}+x>N8lXd&n`{nm? zNF&m6cD;>9{a0F&)1ex1n{`@;=N1HjN;l&ilgd8_n__-n|0n+qzc=YLPn&k|S^Xaog!XQd zJ?**k_5e@7AD(}Kfv*oX{k9(7c6JG>m##vcf>;~R(0nX>7FzypSK*2sqs9T#T!b2M zV7zXxafMcjx~o{LP}ZNU|N7QhtNZCz;%M^x5kU8W7gUx%5=kHjzY_H4(fcL&`!8Op zAJw@9UPH=z=a6T5Hg4ti6DqY1?5_|a++*r0@gitqIn<#Ohw|42VmX4vwZ8*N&Ez%` z0%%gq9NociN6~m_a*oOtN@j7crPBG|r5y0i($Vc9eV?q_h4PF+9h}aOTr2iSiQINk z+$P6*JduAE$*#c}$`yzxuaw=SyXFX!juVbQU>t6JnOjmAU0sI%TD^LCRgh2DK@sD( zETCx>AkVt9$`R9Vz{Xs|A-#-7eH#D~q3LH6_Y2={Y2W9Iy31dQSZ zlkP0O4U6AtD#t3z_1RDRHi0P1Zlu(zMj7<+4pqn%Za?&kCh3q>7f;1mNe{{8j1uB) zcX1t9yAUgU_6jP;h74Bu;TplATWj&@Te`Q)apW2`w9Al?^qH#NONGBdwb3SS43$^_ z@?#!sC7vep;|!#X(>-(jX56Ca?+eH;yi5m8r+pk|o!qmHD2V%DH_3~Gd3^o$@;XOU zKinDv%I0(U=krV#`GN2r(bLoYVBAUWU1W1ME(#x6xBL|LYK_$mj3`^K=-?v+2mueW zMcj+=tJGiBozW570Sthm06=pxBESVNatl?-EUCK&cMjd9s%(lXy{Y#(3s=l=nO@1f zUZlvr8Cohs8{0a$a8u5vB@#&~Jlm`+kJ-y+%(@s%1sm{f9j(@??3Z^=*~MboTg0!V z33A8FwIA22i?Pj%g2RRQjJX9`8g^(A`HH*eVMNvmv>T->X>s)F{iTG#>)VWB9#2HF zzgG}#R8(;h2az0H@#Kthet_AYKG|c2IG?D@mnOmktKpCE$2uZYQ6Ng$JCo|m>#gu$ z@UL+V1*Uf8#O+x#+J#Hg$Z4C3@*JFw&0GkbF(4nQJb5l#Bi3VM>>@g6ief|{9fn{u zM^74VDtyMzX<30W$uIg-5j-=DF!38(TkNo=)>l2hQN+TbHcj^){AT#(Sk=b=T#wFLaGiSWWFnL8o04FaJP9Bxd03^55-!(0;W4F9tsVNmmb-3}EE zRgGNcmLLG9KI|B)?;}tTu|Q>F-z_VCNSMecMXo+Yr?nPJS0nZU?MVJk4!p@C63fN4 z!i}o1$EWZ$|g(jD;iornN4RuRhoHX(;nJ^X)UuTb}4Vdps$ap?RNk0(O zn;-_->4D8Zp&LgC>H}$zOq^~YltjD;{7#;rM!zi%6Lxm!^0c58TQ!V$UePiXrO1lM z;T57$swqtmp@))+*bNIRGd&GaFodpr%SB$BceuPpw#)T;44m^7gMo7(-Ib1;S#p}3 z+q|e2&sRg%o+R|LcG*T0H{LWKgt;2IHa4ISMNo+!DlE|(3}R<3&UX)VH~|UCLL47V^?@Xe zV@q%d3ntqdaWc}&?;bxA3@LT{1X<44QOCM=O^o>0gOLPI^uV!6wXEzN;zfa(C{|E% zqTr>n5e2HtZ)!Tjg-y{}=6wc@n6~MU1RD4rGn-j0n%0{)S9L1Ft(z&)M(3;j z?Sp1uMvsiUS@%NWCj zKAZB)`KyncRgXdR>^RdMj+`_X-3z2)sco{Am~yvdp4;V45A{V2d#2 znvq$$;|gJbP3`b4Gu0 zQ{{M278+DBU_;pb*Gb>hZM^NqWsDn#zD0-?;)O%eJPQfjNPK?>nx}9?Z;;^2pzXnh zcgbiyuu|H`>zhIR;s70F)o|-?GK8Gz@E~UT#O?qucP*OsMkal|QC$O%VkSe8Z8pqg z2xHyP&=Ftf$$!`6vzKnV6NO>l@x4*RBp)^3z|)Pe1wY+5g4TyOk{J*6W?a*0W7yDB z+Fx4AM9CbJFh5o?%> zql7bQY1KVoVsQ^(STY6ECPToq$pedWJ{KFJrbYq#C8NX9#^+O4s|AyaAt_*HzVqky zvly{|P&(YG;iO3mYIU`WXc=W5RS zCq+nPO0+OqCL9ZnC=BsuOz6&1G{jt ziH}DimwTCRL3*3VBWy`=mW}x5&rNgbnDlu6zvb5%)zE5$w}TDa$53b|Exhv|h<`#G zAI1o;Hy5md8H3b%V$cf(3hrBdOXFs^-wPFCjWn=33cN3S39W>r-EB`INBs-Boc$aE z=lH+!ut>InB6ghXklyu12VbDpJ{M3x@W8?84Nz;}ag?tAUmpi72+i{aksENW`|nX~ z7zI1nY%Fm|W+O6dGV*>E#&n36{rkx+*3hPHGh5OLO5GBw9aoro6Z?OJD#3?230{x$ zw7Q=>U3>a2Z^T~v{r}mfv)8R2|7P?edG&ri{+GMF#U=TKlN*28$L)=-3%Ifqw%-JW zHClVm6kmQAe^M#@IV7wX!UQ=#s{V6u>|y4$;pV+BmgTUb6>>fjt@TV1yS7^DeB%;q zZLz=Lw7b@k3pMNpRYcxi^nPA=gQ_NDK{fhClQ|h;`*#PUcVQwgVJ|Z`?@F6~H{CBA zy&w9Zl;g*LoSE3w_3d*5)6-=q2{h2a?Gcz+y<#W$Zz%O;byTF*_G0+QwCBIe9D=`$ zdcybu)Jg1V#rLg0JEa0g0tWxpSQ;Qk=onA&z}!|hUkw#?JfwBuX~XwlDE1bqOsV@ zzEIw6|Gp6x);Dv>l#^UDNe%7diXew_mx_;I2Kk_AdRD|0jH2=oG*Pl9BXmU z%=pya)NP_ly_00Fp`wC|BTds?%tY|tqI%&_Y0fZpF(cYnd@0^28YeKhA)DYWt803WVrH@Je`~8kt zYlO6zSMs1?oi3{$%3;o8!W<#1p<<_G_XG-kdW&?iG4C~7-#b-D1(;j}1YcwOI_@Ae zlSBv&teg4-~q}_w$Rz&0P8Gr+?HK9M5*k_7{P(CiMrr=4$Wl zMy1fL%aO&$Pdo)-v~{tFsl+zrvp;hbBN<_S*=;@PyFtsPju_4WMXO58^coj1F;vFg zaMY2ab89N5qbX_R=L5!C!BULV4ACqtkj}$VHlapjBbcaIMB#L5U{tUT2vg}dyYB|3x$4MQ*9{w|$Bo>3 zb#0fX?&}LgDTW8No4eJLUbFtmMShDK6^RogN@W}Nyjk={Rf4CJ^r`uwsYYOr z_MRF^`Is-PP8EBh=}HAXD6fJW))Q3-`JmPqt7B=5w?#~fjs&G;iZAwL}Knh=|yNr>}^_S{1 zl#PN^S_-=P0ISS>D2(0H4!l{H37s7p z)>Y-{woSLRF8cx+m4IjN(hsDogRwq!0&P7^47=Z#(Gg8;p0sT$W4Re< zeS(Uiw>8**8cByiBzU$J=pPS(xO&C$T>HUrl}KtD4vAn+5Z2}XwEyn~h}d1f!zw=0 z7bVn))N65>hN{(tCA=h$E%)0{!x=}k8W9Dr&;rRRIG{8MrBa@7JQa(g=+@(qZ3{KK zz|Sh%uw_ZZL0kjcpBk?cF`PLFoeFG)Rn;l zW^)F!5%=35Ai^NcHwnKJ{Tq4BomD(Fo&&mYNvsPAjdV@bcgj_te z2Iy-nMA4Ts@55to(in&4ch^=LVMo!DT9%0;DJ|fJeHkdB23bROuOG>g%0u6YF}#iH zjV5m~O{#xO-`Fto>%gM_cJ1%bsD6GPu81fP6(W<uyr9 zq(nPUQO$_cXlxTPAL>f~ARSUAy5fhcku%gykMj}k6P(qlThXaQ-E5dVUnL$Xw& zh*3&aB07L0C8nI)jp_}@$gLZrU>*9ca8$ZFh+{gO;$mAAV#dOfV_}Zs_OsATQ)Ikp zUFQ;|xof==$#N_$~8MH1VN--H4z_H0c1- z1;=58=!Da)E3ZY@jMVo}5#uM9I-c1+u_kPRkZ`sd57mgKF z`eP#l4aj(txS>et4RL<|lxMl#95Y1tv{AaJz)Qn0os_C|mKWEaY^(nH&T>=9W=m10{ z#389q&|H&-Z;&lNSZ!V&?a>)vh)&?|nTtw$GA{06s!M{;wM4J|ZoPY+jKt}N-$&&F z=pFjgQl(FI9FD@lamUUD%~>bbkz^~x;}uyv@w?3rK1ZmU1QRqZ>a z7`V|(>KaG8DGedBfGPx$ZpG8{dP_*oGyI};3CYew0*_*kY3fsin=;Z0gR@6%o^rDb zfm4FBzE-uGY-Ec(p-P!((Phy`$+t!^`=j#k>~e(G%XC!P zBr}Ts84pBfal2L)zbj8hFr>4w#8DlZ-?~JHX_wM(DM${3L*cIXindyxL^CDNTYLz(#etk*(lolL2~pG z=ufqK-mzwwjRx{Q&+_*FSzsZlfg$c<#n7^Ap&@4S8gt2d?$#OwTeAN}O( z`Mmg&-}KrEXhqUx0a+(ndmd~4vynve^!}R$twlSDUhgDd0;T`p?i~|mWy(V!V1seH zcA;Hny*h~#5)$7+opx%LtRiH3Z@OZv>tTv3%pgmy1`A;Zg)vGwDN^Z-1Cs0%pLq=g zn&7Y+kfv3B-o?diQl8f?Rg_b?TD`5PJg0)-J;$l_FR$d^}~|H zg{{~b-4nczeLYBcj|v15l$HHq!k?J!<|aVzOY2ScAy!3k9Tlk=)CBIS+aNdBmJVDF zZcJv}tRdme%*=2;x1Kvsq7Mgl2VA+Ts&&Sw%^@Xb?SCu*nwAjA@~auHd%r&Qg>T01 zT)vk^^VgZZu$geKC0z|v|I%vvi63=jVwNt9_45ROHt6%-h4(V~q$}BWYcKhfSfwh+ z7E}G2%0fL#IvsiE6PDL;3pF2O>^C@%Lj<;9(~%M-O01A99|eVtCr%a_yB~M0K*`3g ziDeP)i(VCi2oRwE%km6`@0M8k5-5i4{%Bf;6wU6+u(nGX0NM&w?1ujZ2BktcIJdl- z><}z)HC`?3hHeArh}gObzMZ#!%3c#q(*ecp4RXwUoSBlg`QID&?Dq8~1zYpRD~jw5 zZfpgMHh)w~51cJxbVvRN&aHXMyxd|(%&{cwq?OJB!Yy0Qn~9Xf4|@E%gVu1nIg8-+D6q6JNN!6E4bEHFSaCPw8w zM2))0Nwpf?;E+-IVb3-7>FCu=*3%Z76}}Hv1Ut&yW-T4JW`VlyoK#Wwj5frY3T2|f zSw+*i(K`&@9)q-lEaoUz5vxt)cXF-b?bxIciR%JeLbN0-~689(E>?Wv?A%i;hXkt{uys0y^8P&j%f{t_)a|oHJz;fZ1Wr;|bS{oY5 z#;wA{?j!Bw5MPU`sH=Fu`HhaLoRjXe9hb7T6kEKH3t00sArFlbzm_h*^dYu3DiGJo z-9RqN@qMP064|50=mt_;ji14lBStDPp95`7?Aq5_j8@^#7zK`Zvf(aS*0dwSQ|fuX z)dnoh28tE%KysF^P43a@1U` z!$vp}kGnBCj^>>juCr5$o}V1l(4pj2A}vke%?$Urw^!wdyz?pco>;K9jG5#ytX z*sIUpz>`lsgXi6Q6?a{{gp;Ek=A4meLOMM`S`R2Wm+VE|W zyK8Hf2xM(o>Js7x$vK*^N`}eE42U^;R4n4CMN3SodfzBBC}+(~wddJbGjN-Q=7koN z!wRVxd79N34g%#2;u)L-FvqdeO(N>XX)>y+({m;ml5~Ksu6rl*a0q^t@YAfxXpLJa zO@NTPLz`f({B#pZkSzLT2bge^i7_4R0L({R1nXAuYGR{v7iHQd{EXVnjlillC&@dI2a66D6Fa9qM|(jb)F^b;0@J2Fm#YIjo9O zw(MN*1C(a*3?gW0vix`oTFm*rL~PSRRy}hxjUP}^qo7tj%iUNPkw^24R)Mt$)}>&D z4xA6m4J>7a)QbJ#ppIr()CUoSDrhF`<_S5^5F5(qaGOI69yJV^tI_H!7d%GX#UT6` z&tPRRL1~_GLE=ft1y)11aj1j3IeT#!tJE!@a~Hz)m;@V!)MjGTWJazG=Akbw0@&IQ z(*B5u`y;pFmT@~vIbnyL3GgKl@4B6;urp=vdrJpQ5~Gm{rHD2A`siq9?(+<3I_zCa zu>pBg!HW>G5RzrC*VaId(Ol3eN_d3+2J z4hM64a2q2%u667HHF*rqtEbue*p8WL=F+;-E8l~iX)?VxtXF` zL>xB)8OfnG0jHu7CTT)Sv!0L23T_o7)-$hy!~S4BcOcKY*EqS8jdnr=6=Y5-%sx9k z!o{;=93{q=u04xu&peI&jcaHqD#(@8uM=%&22P<$S)2t$3XHxAoM;Pa9CC( zdqvkTRtxw=Ra#C@UDE@kyGTPA` z=0&r?gvg^-tu-1d(xjhhN*TfhhgFB$>)`;(>Sit;`DF&3Oz9>^H*M~VW6|BH&;%;@ zvmU^l=Mai5hec;TwFc#*_uSIZhcnTq(E_Pye@Tbfgmqma;)7|jT7=P1t!8nmwZ>#9 zhP~*V5fyWuaC~%x1V)t_&k;jwwN?SiD)6VI^GUMa3z-;jj098fshtUJ&q&;(7hwj= zjwIjC_n2ivNpv!z3U(@1X@N_plq~8-dk7(_BI@QG-jY=%^4z5l(WT*VI79?vZCcYI zQICv(D$3nCpE;YL!9>D2X*@ESh#`55n-Ra83J?ma?p1^^Rpp$pnppIRES_+F*xQ+vktQ|dsNXYz zco$|Ju}BL+r!zHa$Yb^(c~(oUo8c!($1jSAqD$?NJ-USd|Nhe(B-_SUYtmg#;S`i` z%lN=@ynwZCb6~xR?<(q!Y4rciH)Wn-)3_W9j#}Hs;p2Jjs&?wmAc_G(+Z@<@Fx6ea zyv@_SV`egKTxz4B!Lz!UljY)Ara{sJcpZkdDJA^Q``(Ku|K-2L0}nh9&BgofyAKaO z_)5I*cYX)gub-Pko~?-?cbr3Y)Ne7 zfWQ5_zr!a!@d-Ti&_lRz;X(|Q-}r_%;61Cd*vk!k5|NRgBF#fy$_6P9hH@_JV zKm0IGPfs_`YHJN=XJ`19Z}}Fy@|CZ|o8I&$yyG43z<>I)KkM&{HTS&XdwO~j|Lyqr z7^f#EF#uAuYTD#xgd?9A3CZ#dD;g{lDECH&H{_eBYh=z-;MHU}412>m4jAaFJaNY; z0Cp54Ifnf9Z_dOCgQkS>D_{A_xYl>w zbr)X$`q$$fKlOiF7K?gzUlb9|fCG>Xw<^GY|nrH z@BaSp_e^qPq^u_T*6J|mv!8FnJ+!U(Z2Uc5TZ|&L(bevPz1#h_o>#4I#nCO%2VIH= zu7jvxlW%X&h+fAO`=c1@tT~ZJ1_afRTiXZ2W9$ca!QSBNb+;}@R-W%Y6ap}|#+N!O zRiVz|&_KtD8v9q!apx61-`w$}dQe_bN^kB)?Z(^Mt<+A^@R{#;V8Kw!5Hn`O3CBJ0 z!BHJ)6D^!w@w^+^XY*$XkVeSFfu!>6a^Dxk9ml485Ani?UbCOCjdHf3u{roXdLuD1 zWh>ik2u%8(x|>5|V>GYK_bI=Bk!I#+hS61Ojk|R%8$p+gEt@HiU8$~4h}y69Edtmv z<6Y?knj6?QLJpU)v@T8|*&TcV{Lm*>|& zZ($31iIWWkqS)_&)DswccY3?f#$2^=0JlHK18GOhji}piibx$Lg(MIwey3>$P%}EE9r~ zD7e~%sR}op{?(`DJ!;@B4fDO&$czLs&kZwfh&m#G)0Dis=2x%hGVFYVvpxQ zB)hZU8{RIUY1~2}KqMe*^fjw_TIF!RRr@}^2DiaME6p1ngiKyf=~>H34^x^M!XqtetFgw#?>EN{iJ;Vmj84OdB%0R10Me8}HgwQNi)8}_va#=tY{NbJ4|yt77Q!6j|4@xj)vRH@eLZvr?A;lvbnWpQp)&>gwWRz8P4L5Ij}O9n3iy zG06yDYY8l(w1jI{uj5NkJc;MudoRA?EAGSD$uTA-P-AeOan1>oVGw6#te(}}1VSam zrix`xQAgBLK%)3?eXg73Pzs7v)_4JfF| zfa$aWfYC0T0K}XE{aBmeu&zA0h+qz z)>5z>7Gz2|+8yaI98gzkt!UPWZw)w<74w|Cn5d~J!D%RYO40j5;A45{Nm1`ffl);< z@^iAGuMH)sHL!`XN@OL_~N<5H3U^zOV03Rl7ql2P%G}NB}usmdVeDu z#o%D%3*Mh6q}b5-w8EURTUPXuu5kztk{p=+X@l}vI*lt4mQ*L^3pHtX{i zK)4u@NvEZ?hz@=@>;2-SeSO^$gSf_7_YfyittL>^3~%WL9xH zLB&COO-yV_y8rkvl8kbdaz>gE&eCITi?|Ii+2M+INN;c5c-cvHNNo`$37X2@3 zgZNGbo24k#h!bO;Crop;84{55uEz$LxNt{1)Y4FzAW=Vfh@Ca2lvGfev}Rn(8uXQj z4Xp*$>q0XLq^x8?7tfFVFJGrTlCbxkRzrj5ph{*=5#LhkYQ54F5l>p9iy2ny5NQiF zHcc5VH6%(ZFp-9wj7|Y1LU=ujZEG_~otY-Uo^_@3ELfY0MjPvpz7*Zl^sF~&Z^!ZO zwMKlA*Q8D!VK-p=fYwC1wd$FL6Jwf9xZZ$LSEaq0@nBsg#DQb96VE zo5^E*S0n-`Wz?e45iasie6%GFk|1l-v^Prqut4T~@LXB;++HG3>jgQ5IGtkwa95V+ z_K_Wsm`UBB+_QANus~^Bac3ckA3W8c;JBt;+jAI`OnAqeb0Z5fAiBn zjiaMuJIq$R@eOalOJDL5y#M|0$7lZXFK~2n1`%MMX1x2|zm9MJ_HT~?`aI8g$xB~~ zSG@e?_{&d!+J-d+4?g%H?!W(jy#M{bhtK@wU*P!k!XUzEog@%}&*LDDZ<|Rh=74TR zAuuska#W?~>)0Wo)rz0_*?)@VU9Hw|eW@Joi zplQkypaZxcAK;!J}4C`7k^N`0#-6feLBzWR2G0Gr91gSiDFx z54<>z)7K7jIy7{5i|0ZGHgcX3GS6Ff5JPgB1AxsK;(0^p>8|im4G+#k7e2)9?|apq z9PiYxsjn4GTdXU&bK09lHsBxt*REgRIEa1C@nF}U&rKWTc#nVSBDqaHNNGuHz-W#&(B!Z56c{W_b{e zg)38lO5Hshcf()2rYdaBF&hLqA)?U3h}VcwcT110QN?%~GRO28@I#OjPxKJi0CVk+ zIQ29h)*?SVhpWIFibWb^T{onI&9ha+LFoVhAOJ~3K~&#*{lUzDA=3JJ!H~W#sPMs) zxp?Mz*VjbLkEDbiuR>c~{3c$(GF@|Ki0B&Y_cN#sb};pfL=0h z3?a5xCEH&+Qq&QX43-v%HUMZA4UlX&D@}k(14YR8Vr+BW$2@l#B13ZO8R|NaEPX9? zXE@rh$8m_hm_`@csq|qSi3UJl_7HMcQG+oP+Ini5-98uppG{#M|DP(lcs8<^x zYmJ72QmKk%fi^oU5LyyQ)$5QYKQPzJ$WBBdHM(Fm11X&hCpV(*z} z)*Fq8lQpU|qr4hkmXq&m(e+cOS1FKIjRK$B?$UOj3lnTy*RC{-FrShJ{|@ZdBB zX`WcQrQk>lBs!QeJGsNwo~0CINrQNk2A7VX2P}rhj4m!lNNk_akDD8+t%+LM7f2cK zoBDk->kvj?c?xqye^-roU~z07L&>bqsSEhmRmlze^Mhge1*P?MNCzXy&Iv7=(gNVH z-(!DckNvW!n?13LG8199pOGddDBZYnH7FbNyu<0qF%qfK;&9l<0G+1^!oczADR#%l zn5J1Bb9utiZijS~Aq=D`AtNCR>w9QDG*V0&j;yh)gSH8~BgRqjx;vps#j+fXbOV%f zY;>4r`LrftaZv&Bf*8p4K!C$TlC2_~_sskJC zb#cIiw1P1*4Z?ly!b=ywHtPK%+6ash6gi2#P7eoSF&s^FKsL=sIJ$TNCwJe4-GvKC z^K7~5&Elt4`*-OX?4$y^QdQhRwoa;)Qw5${ewYy3&vrJb;gqaDjG&4!dLOWA_%r5| zw8vnS9x;qNu?pT?h~}bi6_Np&vLVg^sk$d|>RH-*qu?-8tb3U{sZ&Vf8P&PjKzTwk zjQ VV)9cRP!~X3uf}E8YgtX4KsLM4=KzJ}S))jBQ>Y8Ekwd4RK`(dg&o3U4^zVYp$_fBy1n$q*Vb&U|~>&YN6 zmPRqVBWBE#3K19-+2BqTbmu$`BsVg;jLual9NTUnBT<8d4vtqy#I9sW6{8U$Vl_aW zGUV=VzceOcGQ!Y7`$wGhd1at3#mo>C{aZATwrue|1cvCh-a|6~d8wtx_<0>hi26OA zpV|PbUAS&*``A-pdp8nv+IhZXNAJ`KnjZ&MMBTYC`Ui=qyWMPP;-8^A2DiDT|l>7kjcYpW!jWbNVE4t=8>!3`%@tR>koZBh4tbV7xasJW#~=R^ zKKaQ{;*D>7BQ9OK1OT|_o_p~6*FTK^>*szB`|~}B8T%X8@x9;sy#Rn;dFQX<;$3%} zN=6lxfBt8GiqC%LGkDR9UKCE~SHJqzc<{jo@&EqCUjic7-?)yqz3pwNwc?k4`9FYC z4mZ@sR6n4Rk|8*yF-qdwx>_YRhZ=77Xy>*DU;mq{&g_~0>%aM1{M}=Z;l1yBFJAMS zug4Gk!1v>!Z+HloE?wH>;HH%Dl9#*$KlzhCiJ$n1pTIBv(l6umM7iR z|NZgVE?&HZ3uk9|=E@a7x-!-=jm;D}wW=DPJfD=c@bK)A1}i9Rr_7UK9c^$hr5p#A zTC4R*Bm^L%GRWV@DP@S*W@W#ATaiaqRhd_2Y|ck_6*`7|o@WpU%ewU3Cv#{W4hP-D zrwLC#{S>ZUyS{ODU%Yq`_kYD#;G^l|NakV?vZ28pVi|}vb1h{(kXNT_h&m0z;U~8r z=#dq5VjH_QrEIWc!-XadPe1+i*0G&4F5i6_$y`sh>HW#b3xr)+5XSr zaKPhVd_0t%Y(=2E$mNdSWr{V*@l*{Ra}(mN+HQOOrD}65r(}hIK0As|^a40_%7Vxp zBhbYh13El0femeQqMHp2VMRtXmtcnm=w9Zkb+%0VWnC?A@=kxd6;2i5oT}E`AJ;G% z=r9uasR1obUMP!Us6SfSv2WUN^g=S{Z0N|Ucr05BJwMGAtxSl0 zEi$5Q&+z7oUl*+-WP`VMcfC6yMgif5TruE|M8*N2MMFRZXQiy0OzWUEBo(-*BiGkw ziM88Z$cg*?_Dm}(g65e~6sggc(Ms`sVR%G!VGWsma5SCUPqi*}Vo)HmjZToK90wN~ zm(xLoLIWX%?NMw+_oB?*i9v}r?tX!N|3q8Nz3*48s>49sJ>CUNY#DB&SSB-rkYST9 z6M~x12})ORfoX`P2;p}0ND%SdX3HdV2eptpt2@fR))oh)7~uM~mQL5`!XmZ|D?|i{ zHlPbc8m7!~*w?dmuUDi>I&jzT~)o$j5HEc2BD4P3uTA| zAl5@}&uZ&U4<9W1aCWtLsL66;o7D`Z)F3p(!E=aa+K6dv=<0cvdPXrq6cbw0dcPxA z_3w7lhZ22C{2kMzO+6PSr~(NIj;8j8zJV?r-IwZqjh72PRYZo5`pl z1RZkATA~KgGj0m^nMY1YgGHt3XV$#)DfT>XG!X_7uB}@&2p=wJ(Z@9B1XPAV2WRWr zkf$6yf@(u+$JBb`ERUp}l+jRv(4kch$2IePtga2M2x>Xt+SM!g^3zY_>8GE@#gh{p z&ok!v2o(*xT5z@;us`f^SP$T`s;Iiv5V9xESS@dzhv5Nb29vtDnq@VXQqW2RHO=&)K-GErW`(KP9Km4KOcDrh#Bd)@DK zXfZ^4snARJg4#N1?%)KPruE)5&j2;7r9x`KJk2&#(fgtMqoO!DD4CsLGEY+&D|(X} zaV9QCNML59IjOT$#3CfJ#;BMh?XVn_fWsL;i^wpidnnOkHMf*Lr+M0;wTgAM;YwL` z(3Q;yv1(M1Fkz2%Q-3}+pnM&*EdbW0*``OkIq;zqXY6(}E?&HV3=ngOebW#(WggGs-m0D22l`;e)(&X`ne_Wnf+G ztU*S!FrrOyfuXsy%d%iu_S^Gj6|8oxMJ$eES@g_J45|9-(>&pP+2i_+8!Af3nt#q& zamCY=A*dn5(pUu(r-(Y5{otuxpJY8Nt%p4$wvmbKM2Gy;ykpRbm>#K;I6+t<(k{*{ zL=nAGYgG~khKMEZ^>kSaN?GFjgH-IAlHNO@S@fu)^F+nk)n+z4n2`gcw z+O^wR9D&yUMMagi?^YrtBM_ESG;6!b5c?!1nj)msbhu5HS!=W>H0@k2Soo)eH$xKAf@@mJBF(pn2j15%!WENE>FQCZ@QOi6pEL};Wxgc8LyP+cyu{bWr_>1C^r#xXT#YDUa%GME0W@PaAwT6@l#7F7?Z_R2Y+GIMF zR?$ksBuc%V602hvCfuY6wIu)(KpD$gaQ*rXT)lD)SD(F(OP4Mv$-v{U%DTxp_BfDc zVtFxxvk74UC)b(WV~lFO*_m}#*|4TJDVk@OWo3*?a=D$^fySjvqLh>t&1Oy!bDC4ky9iSByQXQEZfedhE*2AGHdHBSwIDY_stmZ0$=qvVgbJ8Y z$j`u9FJ`1kBd4q7py!;`&=Mv%-A4*lGd4A)C9s*F&@iVQ{S1wREMY)kCxn%TiJS;f zL5VRliEnbouD8V^%aAkK2h24Pyl#QR?HTQ!qv)uX?$~O9r1hUCk^;-+zpvJ=_)v`5ZAN951L*Gc zaID({#zc{GB$0zvHZH5NiT?JpTCOc+aoD8@uDvjtUzF6rRl(d+WF3?QefOUh#@oM5g=b%>Th3{6ReW=%aY-vBz|% zVb}bNU;H9o@rqYOv-ef6dKF%9|NVIK$*01NET+8bjzM>i>vPzwfTO|nMH=*k)&!T% zE+{69JfF3h!&o-%+i<(O>&Je+K%0PCEB6LC-63YcvwR&BE5q;iN+p|Hb@t)uOEnK*87CEZ^LdM`hwCOu$SXUa}=hoNmuX@po@cG9c zv$ccq#mAr6yzfMWm%a3*rnF8Qv?;7O6pNFIY}umfx5!H-!jz}LFpm!OC%*Iq=4q!r zdqeLv2vEhPs46eUpiR1s*VKCH0_klZ63`WXI-)9}6!!dvqYlw72VI>!deeQ(ogL{lzNg+6ZGRgi z^x<#-FmIwByoos3;ac-6yHiF*4LJsC6#40GqY_n@0BxdNT$vj+f*ekoHN#p1(kUxG&|*M} zBAY$Kw-0k{Ey^is3%&_o@6HKV0CVC^mS8lUoG#>!X+Mb92H0?!iEepsiMnvFs^oc7 zpSU7h-2*KmFp{CJTWuj29i8xztHsHhK5ULH9s1N_A{&+vGWa%6}bB}5IpbW5(OKb!M3X{Kp&9AmDJ5ICYtMal*Phi4DwI>V8=7n>LTt|gVdFg2 zvrP{2mWo1hAFK*#K4u`?)nQ6#K`ZcPdM(8qioLE($;2PFzIh`S?%t8E@NpruyCGrd zVP^gQ*@o^xP_ZmmCW`f1EDKgr+w6ai4CmRh9liDwzjo6=`LX-b#L&CiU|~wyShuxj zo^sT@1Ql=)NHe}o^wO%KXYHKhXE-9DpyLy@5y^2sB?v2RIKy(R=S(_W7e5<%j-kD; zwKc4^W&w&d_B`g+)J=?(On{^C=-P%RKN?EWeCIUf$gWjagJm$+(nUR`fC-q>Y$7R% zxRz-qtkrr@%7lwzS}R?I zXrd!d6nTJoN}!fe>JWKER`;(3H0k>}*_pH0V2o4h6e+`lHdGrh=$@&fHyr{c&Y0#I z(>xiP(_%Udzsrd+O*=zPm&lA~vL=>&I?alwE(|i^Wk$lBXBE>WhNNUei>CL~7U0Yo z)10xci>@W+fEOuH?J!52g}b12JBiB1)%H6fH z)`DWl;%m=d#o_!Ms4e;_ekRMdKBkszFX4_Y2WQEc#?w3Z`kco}$Fs?E~9La19qd zqL;`-iW#=QH_sDtng+3_N1LP&Egl~o>lwc4kjIZ>)!fdttSIY(WnBhRV=*H`R%dv# zroGd;28Yj&E!($xK`y~`E*Wr2`jcXW*7lT(yZFwaNGh6`pU zbt0N+>2O%kYQr?mCbsK6n5aJ^9wbE+=US9Nk?q;?{<90Ygc-Yew>dLM^r6>r+@nvE z{p@8~P^v~@PMlFmMNj+vUPXCBU&m=unj6d!Re=@JPf&q|V((kEjC!O2bKFI^(a*5; z+6fgZB3yBPzSqw+O)+E{TO2uS=IoTGL42>VHX7xYkXu5f1f&Varx$SdJB^5Hls?#jcZqN^~y6izy2)hxRLj^VR1+?`fnYb! zsD@t#7_F`*&@@CoR5*qvIIIO}%01eS#bN*~KE#G+^Q`MqT~;i00XIdQCuX#vFF5UH zTeA#JZR^z98W=hRZx%;ovFKVeCg6CUftrw{qo6q_B(`Ch_4t|H2@NzThJ7s+Q`5|B zjbKbYmc|5ZLGyDwGV68lvro#CMN=uIvYJ4xCPl%QqWdSz#8sBX_GvrQnB%n7wO@}k zS>F4E)6O@OJrv{B?oqR}g4V)iL3eMg6Q>rJtW&4g45lsht<427M{ zOw(%9wFymoLS|H=TFfO&CRkTNd5@vf8fYymsOZ`?M1RZ4hcmjqRFe?GZQW^MG}=UR<_8c;CaMnJ~HvD(Sl+ z;MgbiJiZzsQ_!%Y)ovnYCW}I-MsYHNqO_PjB+6i+=v`Avm~sND#*He*e(HTf-{0+d zp{&h&|rL zq@@m#PB!P$A)pT^w@ule4XK6YE!jp@>>_ih^TxqPxFXDX(n_<8Aqj*g5rHQT)LRWl z)i^9^;ljST;oWl%JAT%io$g%G=U1Z9>8N@U?#?=Kh0%}|Lp1!$!@)pqYCh0Sd3QZ8 zr4)&SNj8LuHo99Bdg*p~yTklvY+%bMVaso;)FMDE4Md8#2dulgk;j0UIc3QK?Fr|L0TxH$MLHkKv^+eW_)V z3ts%<7voj0dKEtSp%3AyFFk?(=AZpDT)K1#Kl8Ic6NpY1hAkUy^M;ZO>OQ42u`;f$Ozgnl=bVm~eD*iubcf zW^soRdOz^l^F3fH$=5bl6%7r8@%`($lJ&L&*^b8I5Y#x<1axQTuQ%emTM6NMcG3XT zZ8FdYSE>(gVXAfUhGo*j)8VkkGtWGO=RNOvasMBA%Om(#|LT8<2DeBrR#k=Avnp#X zrZi14>~uE)1h{n9C4AR+eHZ@Szx#K%^6axnIpOigzZlPy|MUFkKOZl7$xHCW6ORWb zsM0o@xq0~(Q64Gqd&GpZvs3JjcDD@B|MD+BZO!O590W)Fn%qXL(g%Iv?nu-D@cwJe zcXlHWZltvq&7j#dei#4%AOJ~3K~ywExzjWdRE~z{rulb*Nk0Hu0Z_{}vOqefO>EF4 zftxJW)Km4Pul>)p4Evhv8Eh)J7zc$uJSB7Hn**C#cMk`8lJUY9yZ~SGvX|jM{rR8a z+!`hBc=Q2zV9;FsGu#_%WNJ1T4Rs7{i^CBUJrH{Inj-MuH)p4h z`H?LeOg!W-k2&i@X19GtcaV-l@{!08DM}$I>~43@b{@qgLfh}+K<5z`u8zJ6+>90; z!-a?I60{N%ayh`aHAPZ7StD_$4~%)`ez2~3<)HuGf)wBGjF(LC1v z%(x%eL`9Yz--IBIO;kV-7c~wJdPT5qmAf~`!+731IeOlmm5pQQ7J1VfA;+lQve6yU z9qTz43HVU3@8PXC2_upPF(AZ{cfE}qs^Kv4Ys}X0b#Y@C&Gy(RcZ%I^i0=D0r#{%* zJb#1OmARiqoEqgB_nv#@MNZUYF}zM-YYe!UrB;a=+cR-wM zeukKgpu`(7XtC#H`7w|b12)j1J@f_{E*0c=~YBxEa7YP*r3(eCsQ6h?dMU8?%V9yS#RwcU;PtT~)(|tY4fU%vpcN%pM$tW?wf42D}^|zL6(NY;T&In z=4pK4vB&VdyYIrKOP6qTa;%NEd54qJ6V&wr<}V+C(hZ>K5GGG^IDylY!x?4?m#Fdo zG#`C8O<3!KLs@hWB@QQYwH#RngNwttWFz|YXd4x)A>8-b3;@Yu-PT%c{~2oTDnaI{ zvI1+>f$8J|L&f@PF6XQntd@T$sC{1~^>b;at%_Ahbl~XD7ZnA}y6;$8H*rQvD*k9i zuu8?86~C;psm+|E4V-|rX|6gUBTo}b)8WTq(O>hmb(-f*PNNdgSFP8C)pf_xRi6U1 zq8Z^iTWx0MiFGYl);+FYzmCJX4jP*@%<~S@G^-#*6a(yH!A_FwaWB#uigcPpGg=rq zZXGR*8a?u`6CGT{pz$axOr~du?G^&doD_NAs)~oa(XIDco4W3cZLQa@PSkT_M6U}Q zm~|iY^)96p;(d>H%$Cs!%hiOtkj%k_rY_>rDyme=2~Q?&QK3xE8D(9ul%nD9d%edX}~lVqcfFg&Ms> zf!sot$vFW``6mAzj2N^XYg(ZFk>wXm}hmEvWlmYxy{K2 zltcu|YG@+%ctGpj4t=o5-Yq(S*wl2)8^aDWtDpc%nDMon9Jxy=-dV3l{9O%!sUxIK zd=cj(A2#P~8OTPgkfsC~clQ?+ou*2g-fPoP3L8|JFv)V5y&rry9IS_G?n56CJ8swN zJTO@bTPK*NB!l@&hS)a!%uIyR8miPly^$sZ*kM&g=_jWbaPQ@NasTCeaQE>kPV$5q znrpw@xQ_E{S8#sg8fw`CQjrZiUzdWJJWj}IT7n`fQWA@IfDLMV&wKX6bQ8Yu22U(a}oT7=RL! z_RCrYu^@wxsG%;4x?5?7iIvt=q#AQVLR9I_WJ(AjKy8{a#+EzGwhwrZtk!1zyo8kX zzLDjy$N9!*9VV1>{5cCl$cVZXn5G$tb@1gz#MUZW(ZQe7S=$&{s5uRoX2ylH3%Gdk z67n?T>a$Pb*(+DDEGy<|>T#1n255ahpG!( zfPPOscNMEGV906}IOLoRqpk1EYJyT1$E1{O|FvP?vV>FH1&5S4#QJ^?^WP6rF(#)3 zcGH9nJbiulNTMlmoP&J;T+2Y*vVO9fdL#@!KJ4|gCUe3(u?-@z>4EC~vPc~^p>LAG zjF~LPL6k1jnnq*Hv$1GYE(uEUxn1~9)r>%`SZ!7Z1Bmxoe4n#*7}U)fL3y)!H!Ed} z7-3okiJm8zRS*sRvkF17;eGS-mmi`tcFx=C_Ne(or2~@Rx|-s zGNvv?B$!lnfKPe0nppS!k_hz;KU7Pi8T8|6v@dNt#>82i9^x()S4{neiJY=J|)5!r&^VIk=6BC8troXpk zS;1h;DXY23X8<-RX8^)oje^J>xO+jYUAa56Mz?Qwle;>mH#WD<*|8bs2VWWT z!(AyJ{C#reI2%T%=OYq3UKnwBb)@K>tbDy0tb;Cpu_PJ-+n3pM4R3Zzj%aeRA#FUc zHUQAymTv3ji-sdn;0N8UR85hREpuXQR^BWY*ybenyo)ja{ARW9SQz#Uc4)o>w^-Ef zx#ynv{{GL?Pd|;rVIO$#(f#TI1U!d}QGXssCe6*W!rOLS9rY9LBZ_AGc%RuEQ0{7w zX3iR0DH0QQ$0zu?pZ^8CE zI39oeaeU`@ekab(&cZSMm0$UlxNv%g>o=~03CQyfAO7%%@qOR-z47<%b~}9YH-9sJ z=XZZMTv?7yb40JERVXH=RmD*`*20z60-!7he9!lM4?gmdkKh9z{9t#D6Nj2id-^7D zY1pW=X-FtV40GhBjpEj;x<4$)+#;*2M=K!60p9cpq$WC^OQLD2>(Rvv7jbmc5cm4^ z>$q~|N+4K0@7=LLcSLuaQ?jn=>`Ezb)*!M*$!))w<@`)Jhicl_ttw5GafxyD+BH1- z=%e`7Z~fMIR_?p+K78AM^)~$O@BRUHa~=j+njezvT2>IKakx0yG2J#$SoYWOPygwU z;_CHlM!?V^*b`s+5OkC z=>Yxs_y7|@?7n#O%zys#pT}oE^A|X~bhkDyThEbg@$}uE_7JG`L6ry_;5g#d8z{FO zc%vg)Tj_fa2{sP#I}K#V>|D=EM%xVcbPsF8TGNNcF~A;Fx}_An?4>Wkiyn9pKKju|aig6BIYm>NHt23_oTYYb z43Umvd+v;HcSW-A5gP$c>%-B=lVaKk-aK21d3%58j$4*1H&Zx^9q+hNKw7MUXZtz{ z!-r}8FxxiIK-)m4#|GP0D7X<=L2enAkI@}{f98#wyzl>Xlkm=w$Qvzy9lBCvM7P?D zevEmW%t*+C(8~vA6rzvF`yDD$Hs=Ld;8inx6`SH+NMd~(AUA_;HO%KBdJ*g6huFlk z(&M>cP_ky#MqprgH4`tz-7u{6h>iBox)D*Z#~iUCl_gv;UMGpv2siQ_M>BjoDh#fe z_JM*ixXB0)@$9f7oLlR)RC8C5;U}54!~|i940#c4@`qD-a12GAsew^3#PhYszk)xF z$(-Pd&9x@2Ibb?+n@8~a`T|-h`S0Jfi*{ZL;{9P%TX;oiXLcq9w>&-F4pzz$SH;+ z{tnlu6^I2Qxsy`{orx;@n+3{w151bdJrkCDEUx7T`kpj8>OJ$c7I#P6K{@t18Hgq5 z&SXCm3V_tt{&9Gq8KO=jY1UL9QHs{!@Byp6BjJON+StFhXWg2+rwx=X8$_s(rS+jj zJU;{)^YfU%Vnnu_2KSjn6pf?bL@YkY&j7=1Xs8I6BO&s$ZTE1Qr+qE@SI+*`3R3lN}!<cCMV-$kob>!m6NHdCnVgj5Yp`dAlM!?@50g!Z+R&t+)Gn;k1}VqA7gGE@ zCms5gx}XUolREH7JiAylFCHAtXNc%9!rUQT0Tykxlc720W1AAYO70@&E*wACzoJ=MS<|w21`MS^Rc|GMGY2^Yw zP6KUHJa%!xa#&E-22_r`cgJ3@>w*S#ZaL0gLPSlN<_Wd5IA6GtK;zPYDecUCrst)U z?fX@$F`2@7tF#b`XSn|h`?(%@;90Jg30#XhNv8x(b9~=YDkv2tN`T^QjjWLcY_S_D zCB+HX1}R1VZ4JfZ2&C%3cgi^svSoh&a*l>J8+9$Hk*s2}S__tC!934KxU&A-O~kQq zIdZ}@XC*sKN()FP1Qk)Tjk+f-p1{cirDxN!k(G2k%t)L&7Ts!@f`J~AC*(oY%R_Xb zQWE`4A{%l8*>@i^Vs%)q0#EPhxnqybL^jXUfD~_0=jC~dz5_;rT=c5-=X++clNWrr z1pB^D5-VkiXr-uG?cT;MOCm1rftV*zcEk&o$~w-GrPH)>g4DE2t4Bb1Ao2FGbt;V&oR613e`UAt(}Inlmc1 zV!vC(T8hS_7}aIsNdmdz!tQ~{;CD0xW*ty=Gx;S;(ZiwX7E1R2c+^8yu@jxJp{ zLHYATUN5t{mDhER9%;4Q`<&CzS8D@V$pj`$gFqfep0Yl=2}hcpJDr5kWVKjHqh?b^ zo{v=)gD7OIzdUlWRgL6h9~iqB-0HRB zMjKX)IvMe4t!w1c3v{Rsk3!B$D^h2*;l z)~XCbh~6XD{dJ({no&b(3~J76_Fj-EiAY3H*U|-XW{URr&g1(u_Io=&^E0^9A0s}C z21+p_MB~l#;k{;oKv)f%(`0lY(K_3OS{kWY^}V-q%(^b9{%+mWPhw_d$GEuj%oirb z4=BpjA9UKdJNv-daU5|dsRc<=^qW`hsJVJ%?c&5*lec-jUbyKyLZQ$#G& z(F&(h+Tga*V$Tb`VhdUymP-`Jx?mJ&50C<_+B49n$V>C0@Mgzj&Ut8f1C4m&wx(!~ z>1TGd`|XA`su<(}#oYQsYlnO<>ZfcEP?K2TRjH{z`@eYci#JVnBEn-|_yW$)_nQHH zG@SVk8R(9EPFeGij83pw_?}|`60Q#B7{a?_((j>WROHALb&b|K&wS1rhij;E=6S|$R`|i6BfAmLxgunW$zm6tCsU==sP6@a(Q$& zdBN=Di6*L|9Hd7Z;mWAk5D^@1TtPa$(A}G+jAyouC#fRZZM{A;$1r@Qp|O3>J(qEM zdV0$M{mG}E)WU7R`cg{IDIU>*1L08X;0Pn2QdeT~o!>ja4(p{2_kZiWyK?0!{`}AX z9B+BcTjGzNoSfi){*fQSM?U;0u3ftpE+tj)np?{pR5>98RN+p6y4)__eJ>t)t5>h#5B}iy@z6uxutA=G<7;1wU;f2kKsvjqN<&k6(^!iPYkFkbTCw@O zd!H9hde1+9&u{(~z{AXhRU79qQy=%;Y@P3r8LVHt{b|{f6hOB2<-xwWCM>;;VYX#97Qv+_S)w* zBC$R&$CgH6MYlJTw7F4+xShe_YXekQh~F#_^gmBj?|Lb+dkCD z5040X0rUSy*qcY|dewEF-{0Q*dEWOu)17js43`XKf`YIRh+s=15I|{!Vo+m&t+f#7 z!jkIN9@MhisE9#27-LSJ|YLf{=?5NFYXwkc5zdBzHddocDS5 z(0}}fy`Os$Ixdz*?mg#ypJDIc{{6n+&$qgXQ0Lbb(JEP1rP^knUc6;l*{Xz((%`j; zSQTgF+UTWHzfX(hggP$;4T-{zKo#@YYiwehEHyPFJwem;iY7t_A*RWJ$Q9Z_>QO3z z*7U79KBX!I*5BJY%eV$eQtv0sW-}Xj>pG|oInsdx>A<$g?9NTx|1m~Dv21XRTvV~8 zhq=0a2!>g1V`c0Bm?+8_gubC-1^#|xBWj=~QcGR` zsiIJwNz6lZI`3ErP&BsB+}v`O!b+N6hnHVX+txDkzT z4m355hb%QGS(J!T$&`K|*~-4_QNVT6IO?8IrUD{+wp*=_l7F0?f5|cWP4B73G$f5J zDb8^G$cevmV7h{4G$*~TByJQLcEqeX!rZ7L5fr8v5s~3b5YaOKoMq%;kw)HhQX3(2 zW5$F%;=*(k*u{wiCvH^VRSaUvg@<->FH{_mWtgNm)r{02Zkb{b$7ony-47rG!Gglr z?Qt|Bjd#ul#=4xREYVjguu7ccIRXfM5AwD7VsQpk8sP>vKvn2Q@QmDq(i1qplylo9 zF3l+cNF0{UKB*!!ZW_{LzgF^80bw>{bZk~(ZXwL)bL&f-Jb4n2J^mf+J?}iM@7~Qr zBDt2{cUWCt$FMyh4+-1bo4nsU9?r%jQ4k@>nZ=2gyqH^jjO->3UIt>G9qeOHpiY{v ziO|7YP0wx=4<9(zB94(8Y^><8GnwxL#$jZkhPe3)cu4G=vwchNW7l;^xl}i3a3Er= zr zMhJJkm$jgnv(cA;<;d%cCqnQYy3mVbMo^z|YJ zA3Do*ccW%94#+ujKPfoG!g%}6^Dw-4{@LcQ;0LXW2_Su8@buH+(kSjFACYUC)H z`#>xLAQMn%Z=mmccpuTD?pfQ*B|_&hp9kcWF^mJ}0K0&0=9$9Ob&RA=8OtS;ApG0| znd_1He9k!FZYK2;JDqb(CX_9{ut*=gKg_xwLGah5ut+4hFgaThfFRKqb70cXoQH+g zZ+Z^b0aa*fT#{jwll8o4e5i9kK;3&|M9G3wH-|N^n_JskjOzBm&aS>0I5KU=8(q!% zc1?td(rqjQy>Yk$zbT#!%9DAQ$)^Kjw8-&ZQ|_mESAF-mg6>ZSpp@(W&WAI^E^l?oCmI=-w^maW)z76 z;U{5?Lp2)|5>z!|*7saTYn^IC;}PT5fIjp>C9TA_MkZX{z$w8OX9G6h&ADeT&R-qm zc+Vo6;5}wtFV}g*P$B@y^exGZfRw0-f^;Z3A?AeMd#1_AIu}bc0)P{TcZvzw@w&{y zKqtLR&lvN}S;9U9l$4O;zyr8azf&m%!*YNRJSZI_@9T`858&_(C5aY^evZ0u#*AFlv0D(MIOsFSnza zJ9GhN>!bUomm#rLY9Kn2cx?P{Md z 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

0*4h|SeF6`F;O4SXfwc94u(?|d*e114k7)` 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

    UM28Dv|MDWAgM|FS+ubnBy|OY1IaLTZ>?+`w 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

    MD2R4C=l{hd3Rar9^ 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

    }j4it@j;g!R3psEvTAn20E?>vh|sh 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%0APt5|< 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

    1PRp{z4gJY8msl%EusI+`hZzcx}?C0#JiOzErl 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 literal 0 HcmV?d00001 diff --git a/frontend/src/resources/bitb/favicons/apple-touch-icon.png b/frontend/src/resources/bitb/favicons/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e93df1f495e225dc3ede0795b38d3b2ada6ea749 GIT binary patch literal 9042 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 Ef(45-i2wiq literal 0 HcmV?d00001 diff --git a/frontend/src/resources/bitb/favicons/favicon-16x16.png b/frontend/src/resources/bitb/favicons/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..336dcda94eb0b5cdc15d598d95579c7c66a1f7fc GIT binary patch literal 485 zcmVPx$pGibPR5(wqlQBzzQ51$B!xjlhGaEY7{q8;Q^WAgqdvwglCJ+I30L$d~6}Sa5 zKtq-2l#eyw3PV&wCAH8mrECt&?IfZ1%OUa#YHI%zhWYU;B9q_EXl zK&ezB91deJ7zhS~#N%;lwc2bm-xmVZ5;RStQmGJ)Mky2uDr5{;T7oE&$s}H{7pv7e zSHho~m`ea;B;>=w@n;g6VWk6=; bQBD2?!)cpL0pnU?00000NkvXXu0mjf_a@G< literal 0 HcmV?d00001 diff --git a/frontend/src/resources/bitb/favicons/favicon-32x32.png b/frontend/src/resources/bitb/favicons/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..ad5589e65fe28e70f9bfa6924a85a6fed57aa956 GIT binary patch literal 1069 zcmV+|1k(G7P)Px&=Sf6CR9HvNmrF=ybr{BfpO*v`w1!Z$G%qA0Ar&GadCP^SqDUFoh}4Ly+?1%e zsD*7*EH?=vPKlOCn23us#S$Aa7hMc7(uIi$N_j&}Oeg!ElSe+j@jK^C^9{^@bKso! z@|^eoUY^&5^YbY1GVl`cEbtVdcjv$X@EhZt2z4MYkt5)9 zpbhxdO2-O781O#u7VwBe$KGOp10MnJU4XjFj4uFB1785o{7=W;YD>VYS4HD00M7wm z0gwC1xoPGPpx`1;E=_v_NCCcm0M0!@ya=qAFFXP0&cE|x*nI_1*YSdx6P^G*0N(M| zs;#Z1sHlk8*jNGr0*ue6r>Cs0u5x~Uj?3jDGBT2rlN09V<`^0pVry&5?)ExOUnT&B z{%2p=E++!e*VjjWem?8#>m(#37yxtv0|Uv-%%r!smzbCs>g((2>FKcoq3TdC`NahA zG4Q4x?1qL0+S}Xj0$}PTCnvMCv_x=lFolJMOifK$ne3BK0Z=#F0F(okM}OAQ(cu$- zlxJsW$;!%NczBqKiV7=xe*sSjzzyJ2JLmfD1ilpwMM+5sNl8ic_xCe6IB1lrgR>(5XR0Iz!k0O)zrRmwYpbE65{-_I zCMPF{gM$M`Mn((}l5ueU5r8|ue;wvNsz9ZuJ8x-eVS9UE^q-VuO5fopb> zPI5ppYDP6RH5?rsk&%(X^768k>0Q4jp**FgrW(yiSJTziMO|H;6#yd%d)#1AUjV|w!r0l_K|nN^Dl03kOjnt$_;)9K&q*iL zA5Tn77*4CJs~H#=@C87;@kw(Sed1=dZ`eh_97Y=(8^p)QU-ki0FCrqsm<4HRX^fAL zQ(9We*_o>R$|IjQO#ouPKUt0AxVSiD9Ovfd8b;I8(^*_xG%N=N1(BVdO=o8(DJdy* zcX!j=+|2Ruu`lNu$7$k-o`mE>H@|<|TSJ6IZB=vLBqWkir(0WFGoIn$;T#?wvaqng z*w`4Go11pQl&^XTJyeuTfJDb{KVVXtWjP<0U~-@-?W}b nTvU>%kJfYblCObrr|bE@S}BLC8+wkK00000NkvXXu0mjfxcKnh literal 0 HcmV?d00001 diff --git a/frontend/src/resources/bitb/favicons/favicon.ico b/frontend/src/resources/bitb/favicons/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..9c72cced08d26e6d08ac7fbd0c14b6066b324fc4 GIT binary patch literal 15406 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 literal 0 HcmV?d00001 diff --git a/frontend/src/resources/bitb/favicons/site.webmanifest b/frontend/src/resources/bitb/favicons/site.webmanifest new file mode 100644 index 000000000..45dc8a206 --- /dev/null +++ b/frontend/src/resources/bitb/favicons/site.webmanifest @@ -0,0 +1 @@ +{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"} \ No newline at end of file diff --git a/frontend/src/resources/bitblogo.svg b/frontend/src/resources/bitblogo.svg new file mode 100644 index 000000000..6c69a2a4c --- /dev/null +++ b/frontend/src/resources/bitblogo.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file From 54c2d7efe50d3578462c4f3a16328c8e396c9b10 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Fri, 27 Sep 2024 21:51:32 +0000 Subject: [PATCH 124/147] move custom wallet sync to services backend --- backend/src/api/services/wallets.ts | 39 +++++++++++++---------------- backend/src/config.ts | 6 +---- 2 files changed, 19 insertions(+), 26 deletions(-) diff --git a/backend/src/api/services/wallets.ts b/backend/src/api/services/wallets.ts index b20087ead..eea4ee129 100644 --- a/backend/src/api/services/wallets.ts +++ b/backend/src/api/services/wallets.ts @@ -9,55 +9,52 @@ interface WalletAddress { address: string; active: boolean; transactions?: IEsploraApi.AddressTxSummary[]; + lastSync: number; } -interface WalletConfig { - url: string; +interface Wallet { name: string; - apiKey: string; -} - -interface Wallet extends WalletConfig { addresses: Record; lastPoll: number; } -const POLL_FREQUENCY = 60 * 60 * 1000; // 1 hour +const POLL_FREQUENCY = 5 * 60 * 1000; // 5 minutes class WalletApi { private wallets: Record = {}; private syncing = false; constructor() { - this.wallets = (config.WALLETS.WALLETS as WalletConfig[]).reduce((acc, wallet) => { - acc[wallet.name] = { ...wallet, addresses: {}, lastPoll: 0 }; + this.wallets = config.WALLETS.ENABLED ? (config.WALLETS.WALLETS as string[]).reduce((acc, wallet) => { + acc[wallet] = { name: wallet, addresses: {}, lastPoll: 0 }; return acc; - }, {} as Record); + }, {} as Record) : {}; } public getWallet(wallet: string): Record { return this.wallets?.[wallet]?.addresses || {}; } - // resync wallet addresses from the provided API + // resync wallet addresses from the services backend async $syncWallets(): Promise { + if (!config.WALLETS.ENABLED) { + return; + } this.syncing = true; for (const walletKey of Object.keys(this.wallets)) { const wallet = this.wallets[walletKey]; if (wallet.lastPoll < (Date.now() - POLL_FREQUENCY)) { try { - const response = await axios.get(`${wallet.url}/${wallet.name}`, { headers: { 'Authorization': `${wallet.apiKey}` } }); - const data: { walletBalances: WalletAddress[] } = response.data; - const addresses = data.walletBalances; - const newAddresses: Record = {}; + const response = await axios.get(config.MEMPOOL_SERVICES.API + `/wallets/${wallet.name}`); + const addresses: Record = response.data; + const addressList: WalletAddress[] = Object.values(addresses); // sync all current addresses - for (const address of addresses) { + for (const address of addressList) { await this.$syncWalletAddress(wallet, address); - newAddresses[address.address] = true; } // remove old addresses for (const address of Object.keys(wallet.addresses)) { - if (!newAddresses[address]) { + if (!addresses[address]) { delete wallet.addresses[address]; } } @@ -73,16 +70,16 @@ class WalletApi { // resync address transactions from esplora async $syncWalletAddress(wallet: Wallet, address: WalletAddress): Promise { - // fetch full transaction data if the address is new or still active - const refreshTransactions = !wallet.addresses[address.address] || address.active; + // fetch full transaction data if the address is new or still active and hasn't been synced in the last hour + const refreshTransactions = !wallet.addresses[address.address] || (address.active && (Date.now() - wallet.addresses[address.address].lastSync) > 60 * 60 * 1000); if (refreshTransactions) { try { const walletAddress: WalletAddress = { address: address.address, active: address.active, transactions: await bitcoinApi.$getAddressTransactionSummary(address.address), + lastSync: Date.now(), }; - logger.debug(`Synced ${walletAddress.transactions?.length || 0} transactions for wallet ${wallet.name} address ${address.address}`); wallet.addresses[address.address] = walletAddress; } catch (e) { logger.err(`Error syncing wallet address ${address.address}: ${(e instanceof Error ? e.message : e)}`); diff --git a/backend/src/config.ts b/backend/src/config.ts index ee95be62d..794421551 100644 --- a/backend/src/config.ts +++ b/backend/src/config.ts @@ -164,11 +164,7 @@ interface IConfig { }, WALLETS: { ENABLED: boolean; - WALLETS: { - url: string; - name: string; - apiKey: string; - }[]; + WALLETS: string[]; } } From a7ba4a0be8ebe9af3d2e26e77b30116bbe7cc954 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Thu, 28 Mar 2024 08:27:57 +0000 Subject: [PATCH 125/147] Add multi-address wallet page --- frontend/src/app/app-routing.module.ts | 10 +- .../components/address/address.component.html | 2 +- .../addresses-treemap.component.html | 10 + .../addresses-treemap.component.scss | 17 + .../addresses-treemap.component.ts | 145 +++++++ .../transactions-list.component.html | 6 +- .../transactions-list.component.ts | 90 +++-- .../components/wallet/wallet.component.html | 183 +++++++++ .../components/wallet/wallet.component.scss | 117 ++++++ .../app/components/wallet/wallet.component.ts | 360 ++++++++++++++++++ frontend/src/app/graphs/graphs.module.ts | 4 + .../src/app/graphs/graphs.routing.module.ts | 10 + .../src/app/services/electrs-api.service.ts | 36 ++ 13 files changed, 939 insertions(+), 51 deletions(-) create mode 100644 frontend/src/app/components/addresses-treemap/addresses-treemap.component.html create mode 100644 frontend/src/app/components/addresses-treemap/addresses-treemap.component.scss create mode 100644 frontend/src/app/components/addresses-treemap/addresses-treemap.component.ts create mode 100644 frontend/src/app/components/wallet/wallet.component.html create mode 100644 frontend/src/app/components/wallet/wallet.component.scss create mode 100644 frontend/src/app/components/wallet/wallet.component.ts diff --git a/frontend/src/app/app-routing.module.ts b/frontend/src/app/app-routing.module.ts index 1f2e3f531..f385b7c20 100644 --- a/frontend/src/app/app-routing.module.ts +++ b/frontend/src/app/app-routing.module.ts @@ -31,7 +31,7 @@ let routes: Routes = [ data: { preload: true }, }, { - path: 'wallet', + path: 'widget/wallet', children: [], component: AddressGroupComponent, data: { @@ -112,7 +112,7 @@ let routes: Routes = [ data: { preload: true }, }, { - path: 'wallet', + path: 'widget/wallet', children: [], component: AddressGroupComponent, data: { @@ -153,7 +153,7 @@ let routes: Routes = [ data: { preload: true }, }, { - path: 'wallet', + path: 'widget/wallet', children: [], component: AddressGroupComponent, data: { @@ -234,7 +234,7 @@ if (browserWindowEnv && browserWindowEnv.BASE_MODULE === 'liquid') { data: { preload: true }, }, { - path: 'wallet', + path: 'widget/wallet', children: [], component: AddressGroupComponent, data: { @@ -269,7 +269,7 @@ if (browserWindowEnv && browserWindowEnv.BASE_MODULE === 'liquid') { data: { preload: true }, }, { - path: 'wallet', + path: 'widget/wallet', children: [], component: AddressGroupComponent, data: { diff --git a/frontend/src/app/components/address/address.component.html b/frontend/src/app/components/address/address.component.html index b893d7e22..41d8c151f 100644 --- a/frontend/src/app/components/address/address.component.html +++ b/frontend/src/app/components/address/address.component.html @@ -117,7 +117,7 @@ - +

    diff --git a/frontend/src/app/components/addresses-treemap/addresses-treemap.component.html b/frontend/src/app/components/addresses-treemap/addresses-treemap.component.html new file mode 100644 index 000000000..1c44f9aa3 --- /dev/null +++ b/frontend/src/app/components/addresses-treemap/addresses-treemap.component.html @@ -0,0 +1,10 @@ +
    +
    +
    +
    +
    + +
    +
    +
    +
    diff --git a/frontend/src/app/components/addresses-treemap/addresses-treemap.component.scss b/frontend/src/app/components/addresses-treemap/addresses-treemap.component.scss new file mode 100644 index 000000000..78510203f --- /dev/null +++ b/frontend/src/app/components/addresses-treemap/addresses-treemap.component.scss @@ -0,0 +1,17 @@ +.node-channels-container { + position: relative; +} + +.loading-spinner { + position: absolute; + top: 0; + left: 0; + right: 0; + width: 100%; + z-index: 100; +} + +.spinner-border { + position: relative; + top: 225px; +} \ No newline at end of file diff --git a/frontend/src/app/components/addresses-treemap/addresses-treemap.component.ts b/frontend/src/app/components/addresses-treemap/addresses-treemap.component.ts new file mode 100644 index 000000000..705941caf --- /dev/null +++ b/frontend/src/app/components/addresses-treemap/addresses-treemap.component.ts @@ -0,0 +1,145 @@ +import { ChangeDetectionStrategy, Component, Inject, Input, LOCALE_ID, NgZone, OnChanges } from '@angular/core'; +import { Router } from '@angular/router'; +import { EChartsOption, TreemapSeriesOption } from '../../graphs/echarts'; +import { lerpColor } from '../../shared/graphs.utils'; +import { AmountShortenerPipe } from '../../shared/pipes/amount-shortener.pipe'; +import { LightningApiService } from '../../lightning/lightning-api.service'; +import { RelativeUrlPipe } from '../../shared/pipes/relative-url/relative-url.pipe'; +import { StateService } from '../../services/state.service'; +import { Address } from '../../interfaces/electrs.interface'; +import { formatNumber } from '@angular/common'; + +@Component({ + selector: 'app-addresses-treemap', + templateUrl: './addresses-treemap.component.html', + styleUrls: ['./addresses-treemap.component.scss'], + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class AddressesTreemap implements OnChanges { + @Input() addresses: Address[]; + @Input() isLoading: boolean = false; + + chartInstance: any; + chartOptions: EChartsOption = {}; + chartInitOptions = { + renderer: 'svg', + }; + + constructor( + @Inject(LOCALE_ID) public locale: string, + private lightningApiService: LightningApiService, + private amountShortenerPipe: AmountShortenerPipe, + private zone: NgZone, + private router: Router, + public stateService: StateService, + ) {} + + ngOnChanges(): void { + this.prepareChartOptions(); + } + + prepareChartOptions(): void { + const maxTxs = this.addresses.reduce((max, address) => Math.max(max, address.chain_stats.tx_count), 0); + const data = this.addresses.map(address => ({ + address: address.address, + value: address.chain_stats.funded_txo_sum - address.chain_stats.spent_txo_sum, + stats: address.chain_stats, + itemStyle: { + color: lerpColor('#1E88E5', '#D81B60', address.chain_stats.tx_count / maxTxs), + } + })); + this.chartOptions = { + tooltip: { + trigger: 'item', + textStyle: { + align: 'left', + } + }, + series: [ + { + height: 300, + left: 0, + right: 0, + bottom: 0, + top: 0, + roam: false, + type: 'treemap', + data: data, + nodeClick: 'link', + progressive: 100, + tooltip: { + show: true, + backgroundColor: 'rgba(17, 19, 31, 1)', + borderRadius: 4, + shadowColor: 'rgba(0, 0, 0, 0.5)', + textStyle: { + color: '#b1b1b1', + }, + borderColor: '#000', + formatter: (value): string => { + if (!value.data.address) { + return ''; + } + return ` +

    }cU#bVp7%S2uLr3zqHO4PPnS9g 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 z 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]PyNj0Lh~gBQ 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%0AHtaGLmlM~H^!SD zN4Rh2;JecL<9^SX)EEOM+zmh;@8wQm9V1-nC3csUbDi(cxYs;*Za-6FJRxXckQA|L z#I@Yx4mT=eCNjP+zs1hj$NbLYY!b8+FwKJ!6Nfd#72OU@Q;0XrI~L^qa4yhk z@)1%~lSp*WxK}04*_vw&3THVF&%Rpg-)&FlIZ!c66_aQFAo|ulyv2xJ<0_I%8WdNY zmoJetXMeX1_|y_RYeol=-iQ_>*f}>rmICl_-HIF(DR1*3{{I7Q9&s{2)V9m+=}&3Em=mJ8Mq3LoF7V2dOn7Ot_eVEx2uB+)ELa z{jb?5ba#*-X9%WM@bU4gcQ^iK%$kv|LCvUVfZ{$F-W;B8tyv2JX z{4;}qyGSVOuJ@YB724cl9@_Z5%@P#&Z?Y+2lrOdjfF<4t0p)QX4^e0BDg0?f?JY#M z4S?E;2}qhrMMkUOY$r{iOSBK}9K%C(!=~Y+Fu*JNb3#34P^}5xx2-eGyy$V)h<^UW zNBx}nOy=Co`QD6iSKpm`)a>u~8Ae28W@1#FT{hRRX~rR%*Zl$RT*7!Y(F>nW9BB=^ zR35n+`VA@0gx$x#6OXO&16estAlhmTR5-|V)B)ogf;yY~R4j`q&fWtjMpZK;iZnxG zqbO?;#=&_$IJLlMKR2g6-13$6%tmp}bb%Xlu2;jnXZZ@hc>HgM%-??HTV^`8rlW1n z7`~kP`^)kB@9n?g<3q`_24AX6xx1EA@qo@TsrrsV-M%2sfnMvYK|^I)>XuVTw~+05 z?m4jIB9cQ-_#if2>Y&V}$5JiwrKcOJGGdcdAhM~F=5uL^eL0N>N-`8|R_?@=Nj=I1 zkQulCuE?wgvxbWPAPBfIcbq6P6t;ThwCA=-bmbB)*VkNlz7|TYoMdJ(r9{v_a@>6( z(`CENY7oKi%4?WSG~d>=_TQG*s7&WQbM_(T;Bro>giI_p%B{BEH%sM_EVsE7YCD(8 z@-PO6KS&DkTS`I>Uo(2*k;WtPa9C!Zj!UYj@F+f?jq}PQH6lvN4Z$<4l>JGGz*XpsKANNbx$O=$E`p| zy|S59B6~9brSdYF11np;=HrVgm-+fm)16ylAP$X`IM8tAq2BkTgn*9hZ4I7Wz!+@u zIjzTogNLMCI2LwAsnB#G93@3iTb62yRw^yr940KbQ&nbks&N1{IV?#5Obt%h#Ai%F zxh_PiP~P*jeWx)beZ{t`mp{+A2eY%IkgBaLR;IaqTYx6*AQy$J(30h% zdWhaKb|V-1{7N!Ui+{%Ms77IomLMvhF&A4uN1hEFR0s!Vz7cG6TUI@@lH@l$_*z=x zQ3%hu9L&OO(Nb=6Fk1u{JxahZeOBZ}{yES3Xj^a#9`5$sN~ViI>$6+SFUWfCRW=k9 zMGf^chuA3mnbmjZ&!v8CBvW)M<y~cG4Q3UHdc;r~iQo}Eml%<|>I)`Ci(# z2uh!}n3PyczYU<5riyuZszoH}t%uNWyW3L)iF{TQe^^UP-JH>kopGzknatf&+nkaV zcU5#qEq3S>@X1AU3&B(llV$%|{Na>Q31Zh6gQ5Z5-bK`%AJ4TG1!v`UO;VQ@AIZ$n z`oY}d zmL4HAUBV@N?~y6~G;XpCv7k*ViX`?^Vu_o>nZ;yTgdC^vhn$?KL+IXVyY+}AX?~9J z91Ps|6-1UE1KFO#H7;n~9Gru35TwLcTgB?s-NUmsBd@?(7ap-qtJZP4-mL~~d5?>9 z03#>>bd=w|M4fI32SquIh((pm)|^G*3ncDI$8W?TjX6mfNO5oymSoGaw{j?D-{{-- zrENJ?RJK_S=K=YgPg~3Xthrk6OK3^=P1Q76+ffu#J!wW5$(j#gAjJ(+V2I@DrHyIg-ItW9x1_KP$Z zWUNo-xVj)H1T&t`$=)((NAbPoB1trs5$AE1Q2XphoOxXQ%`wq5s4y#2bQdCqCPgY6HI|6jE4x^>x-z52 zM5Cw78PMvbzj?5>7(dw@>sbSz$3a@b__tHK$w-r=6g4{0tDeLX%Y3gDbH1V?I2q69 z9&USi^h)-P2!cl*tcX4Oq2G)=6y^1H;E+JH-g5?3LKO1)pbOXW9$&DpFX;QkzrOwk z+;RQ&7vwn6&vWIrKLnPf!ib=C!MFwmW9N!+9J3;#;E2q42U=IWapOkBk$vDIhjnPS@Fn;&r zzSz%7oimk%?JHU&5$IZU&k%#y^oah*6{|19iF1%%XI{D$x4Nx}TP>m@MrK0e8_`n* z;`6bTiT}L8P2twKNn1jy#Vxc&f^^5YSKpeV#iVim@BYuXztgzKZ_ivTC}y~8xBJ7y ziVFDwEyeZ2M)xyI>rGA=&(y*E|-`1lBv{umKiG%ctv8Zjzkc*VuYW^BvvtRg;n$EVA6 z#bHv!R&lV5!~)xYp3Yzyv{7}6yYW*K;S_G6RTzT+~)tH0uALy#JDiZ3nWJf zq+($6osz7LNm4S>tum*)tKvp}W~3wRv!d2;_72(^jA78Im#a^ZuaLTOrEBbe@*=@z(W;9}JFiE3b{GsE%*Q{_8NEc<1AaN*pxi@VOXQgh#tuX^(cu;9F zi0DptR4%g5^DO0MOXQ|MU!-gfVD>*| z`_o5*l= zb7Ro4qseCeW41Z{*5Ej?mqVx zOnd8r3zEuf)lEcVJn$DHv(TGOYj{_P81}MzbDCI-%)IZ!ow`kCWoBa<1EJOg^pqVZn}X1bmELEUsN{CDN$SyUxV0Ok_pPC zu~7Z3vbQ*rWLmE^?DWR)E(Ur827b<>?X-=(aFVC(4eQ-qG#f&+}Sr^D}g2l(lqW#xyj;x%vr;!T(}h4Ih}gGiwM02QiY`?em}(_;kFp-zDv_qy2etuj!lfo zEV&%!qJX4~=tCd&7GS5C8xm07*naRGde|1JG@lHE@b3^znObxO7=!)0xYI z2#0#2^8Eo|D4I`itI3VLIyOFRK*M=-)}SYApd1`K-B%@4%ZbERA1}1yx8d-1em`q% z)>!;Zcad%&+NqE@ZWrDzQbqZ}Vvlkrb7j?l` zX1(OkIw$K*)Uu-%@*5>cH}?a!2$Fn9ghS1Iw(?osoo-1TX{zW4Gi-ko7+HzwMhYDm zYRV9eGhdcr9(lb;E!_FB5y4XL~+-V~qM)8wm~hIVrK@ zP7+EYRqG5+vWQD%zL^_dJcnW_NuhKe9uh-vuB2D*tAQ$ZiwKHdf{FMz-tRYVs{K=N z(s(cC^Z2N}B;DG!iNa9tMPO9#qC6D+Cq?c}(a&BrZHT~c_?&1$+RRqp*Kn9U)Z`*2 zKewazz>rgLmVe*Dp;u&&+9K%m7I;D~NeXkBpBbN{^K}y6D}|62)=-h}nUtPZ8Gwy- z{n%pel#~V|`Z?z$*kZHpaWm#%5z5Sb4TfKzXk54so7))@qJqRIX00K77gM~dvM5Us zsovdqZ%k%nkNd7ZQUo~qfgeA9lyfn@=ke(GRF*km2~eYlPhmn1hRt$`EV!?M>wVSG zQi?9&6+fa9%RERBYMM5vD|`ep)GddV1Fc6b0u{7=gk$W!135io@ZYpC>psM*DS44Z zJu-TzXT((XGRzw$C2+4LCu1hA`{wdQ==5KhV{mzr!$zM$X2^5Zh(qtK#rrM9q!RaA z=Q4+#&xk)ScegQOW7QyAFPmARd`=E#+q*l?aKRb^n32K-NDgp3Eq>BzE4{UCz6GKDf@k!0ien1&-G% zp3SCs9S1&+6a6@$M@KsjoF8Wi^!gcD+8@V>KYsj-&zkX3<9?HtMzI|!Bwt@&7`H*C z!v^r{uP^-i^@Vxg7}tgS>sKt%Rq=IS%((?{Psoh#d(MG*57;#@uZYR``_1fB)@5Rb z>+1_&zrKQuNs2>!pN^w-y!we#dq&XXwxQh)z81jvxXq#F5&e)h^YRDzjmG{ zdha1Z+ja>e@;IN)^IWqc75x19vp)ARqlY_=qoU`M!jMsD;<4~ZV}p70smBqqCj!Ko zKdhG9Y2IrTRhBVBdFHxd&dBynq0!NfIA0Ld$Xpa=zphR3I#2dfR)mq98H4vJa%Qg$ zHU?ULwiK>+&fEvTr!i)T|1v_7bHJ=W+7?5GZ(`mu9Wc_RAH8BVuKOKkFaF=)_jDX* zEUt8kOHcmXVgMN9l5?eg1Pv&Anw$}}?cEJAR9w{e9n=WWRhzqleq>K*MS$p}9nEQY zU+*QX9{C(k5Dihnr;m@1njKb5CIy1|yiJ?9=FL0t!0RJ~KzDrxN6j&MZ=@_ly>gzf z68!IUt9o83dWf0#QSS{>@D0Q36~fp18YM6d%AVl!^HnibW5mzV+j@8AjQL>`jrx^T zg`38yywA-hwD&M6ZN$shafE|NjT1%XxuTZ*U$5;^T!d3@9Vnjeu$VL ztz8v?JSC7XaxC_ebH#k*Ea3C=lXC~ua(XRLr1p&=Fg)v>$asS=bWYri7PiOEOt#&f z;W(q$xW|qAy6Zd68an&M!1Nz@9cRUSOwRG0RFa&vmq4ut?dCX69A}89j-%E5;yBJ_ zj9?r~x#@ey=jUhDg<84sUQxofiQzPN9MftClXuj0y>aobYX9+{|NVc&gV>+AA@>cH z*`o-S=c4Vt2XoVp`cQLtt;`bFEw@Fe>Jw?(GFamx;o_k1R~#hfmufs9vWQQI#hk|B z=K50CvQn^#rAxJuFWq{1*04X90r^CxE4pZ8na8_jAePI0L+Cvma(E)HdOs>ZEeF;4 zdnCpqktiuPXe~bHRq*@v9Z6l9yNkJP#odmj&!T5g)tL=^<%)0lgZ1}Jy!>|Htbz42 zqaqM3R>Q)|?Zd)kk1?P~EQZ$Lyj;xbT;_8!nB$PRpnTy`Xsb1dPiOjC63f347sPQZ z`J$xzEfs-|O_9B!N6mh7OUD1UhNqp%`$D1dLc57WOa~q)N~va?1I!&ktC~(XD`jgQ ze477knW4@CKJnUGL*2HNk8DB<@ml%dOSPCou3f!-aJZmbhCmMQQ^}(m_K*CWTW>hd zBQA1TImP>s7*i;!;Y{upkO%gz!Q8_f-sS3-%EtTt-{z>88=5%8oN2u^KGxgE*a=DfG zq4*i|tPSx)Q!39n9Riv_BHT@QWP!6$euv2HuH|b+tDIBUcr5I#W#P5;9xd=|tg0nJIx{DhT zo%?6ByWMvbqyrD6Gh~rh_Vc;aky!a*`MmEAD!7!Qc&F>^SxkFu%bo!&n>#u)e-|}n z#aQGS06N`ljv^x@Vt7G0d~1|@33&2u^8HTRmRWg69>=k8y;v^FL@7QTz}0}Sx^0g? z*=vkcBIiOW-2@D&+Ga`oQux(nXx2hCBzd=q?upQ1@n@dnt4qW7gf8V#Kx~<7I#D+@r~`9O!v1 zLafAbYf!t~Dw}JIcaZ=OM|#$eB|O{ShpH>6l)vv;krT#PBG@Kq&~(yMsJXena^agp z`&=^C{l5uHG9%bGwR@6}Qk-TM^-JY_s?`IY}>Qk~vaxUy{o^yq_W-OGphIaI#wESDvl>aXBNKr$+zk+Au9%8B* z+~z3&+nwX}o-pfn<)FQ6KI%yNA?!%FO9N}geqjHQ@d)3w{Aj~0$Fe)nF&s4X!e82PD(!CE_A~R276c=E5 zUW@L%RA0DWE-5RbL{{w2qzkb3V>{#0wMkD7@4n+WYIw3Qu5uBL75BK@f!lE0A>r8Y zz{rj{agDobxx6o1>$UJ&B5bMW!QC-@hQhyvTX*taax>TnENWMUPp2r_s_x1@B!*_W zSd=Bw%7tjYt7(`@aV#C=F0F*kRg0K!=M@E~HsR^u^F;`WpO2zQL1nKivoED-)xf>? zMfjjlNOs|L#nQym>!k2kRPZ_jWuMr~$d3$%W@lPrH|YUZnb*;m33KlU-dE&gCL&yWFUmn)`QsiK*9hm3 z2hBk!(vm$Ir$}O}uElN&nBnp{j{^tAVtEz@sbs*0K@m z9U^hgYkcR%Epd(cL_0cTJlKQrnf6?Al8m95{Vv#ME~sUD-n~Z;;ZWZwLh0mu%!GEV zd&Yh7Ts>OH&!2yUfTieFT2T+jd7!mkg4NYm*l)2%NnMj9w-hSZR`gA457Bw$dT+gH z^~xfcFieU0k!&@%3E(X#51O;Pycg)OvW&doGt+ykMP|fPfM?N3r=X(g5ublkXa|l{ z(O(^C!p!=ZarSngF@siGhf5=c#UrN{g7f3V>vhH;y&cdN&dRf&G*tD-qU|Tn{_&gUnhD<`ACRvab7;d3xz%^@-a0bhc&B*+oFOC+)b zMa10cVdEYZo#?yShUcJta}Q#RUb1PA_@G>hrEnz|LRnwj_x+f8)V<3)E|+aHd*7V* z*lO}K*6Q_o;XF?w{|!sm8_&48;kxb;4hB^w&g=6$arDgSW*=?7W`uOdruj~x`0)|K zjHbQLBmqK*H7Ch&f%Hzn!ng;ctTv6J0Ea3*KR(JRD69!V+QK~tj@Mc908I|O+j7X3$H|3YAE$%jLto{5`%h@UtbC29rT`^+0?;7__p%ki@-D~>$ zzHr^|*j3r6dNlfzR`W$jIGbT~FAo|JSi8pjAYwMmqGksP0G3YY7ISX!ez0^#b0=h^ z0l5I}Jm7S1Pkx@$tzvMDpQj-O0&^`*S>sC4v#e&LOBfs^rxf1Ew|J9`fKo=Hu07Z! zb;KS<)J4rxij=+fFN%d*pQ-xhT%)N1y+eE4VZI4qQ=Ay)uzeqhwYbinpN;GLeHTSz zQsA23pm5EpG7NWobVC~{CrXiK%zC444Y57eyVZgO(vs+!MhlPnsvn(u zLaEPcMRIVS&^tapKH{tzqwdHQFw}0*7a<_$Ndi2?Q#;in8}8>Hu?E9Ww_&{CM3p37P_TxNg_-cjV9?Cqs%XM5 zOC<_02fvin^!MWc__C!6Bp>`(LVrWkAsuNh?oX%Aj`Q5uH4i80IyAf%Ij(D|kna4}*3Vihk4@E+$mU(;n$C&+ z;ELrfGsJWi2KPN`;NDwcYOv*3LQxscnKy4ytpU^MY~0;D8VXD|0IgIY`5cDJc5W|Y zejoDq?DN;~$bD7ifVKl5umv(;h+EA?ug8Rs0!#RlW%$TM*6q`Mhs0-7%~@i z!@N(W`&C!Q#g1-Cw4>vD=GOL|Z?5&s_|2v4D7V(r=>xN(x>Zx1WPo(aCJJ7k+1k4c zwp@zS9;l0oWk^Ljd{ejQpmnp)J+hoPWOHWyOoz$J<4nYQDpq$DCc}k^TnXfLQwwl#cVp8~1e@~)NU7q>Nh5wPrLp9qX z2sr$SAz>7;2YTUpJ5`{PXi_dM;y&OYDpmb_cB9B%gEQaM%9+o&hAHvxW_IV%fhPSM z%9#$nT2ieXO<<3)F<%MdK4bNJr8f6X|^Vm}j+_cqDYK{rlP~QpF z&BA*E7JnZ?ZfjxweYu_YktpIml{GM4$U|E>fBw6YIX_EJ3Pq~-t1#0&!J)AB`x4b3 z8N661+EkK5eiIRtx>a?{o1e9?wB32^e9vXa8^vdsO7Z5pHTS5jsXEj9(=D+7zgL6{ zR+LPMj-2_gD<6IrAg;v+9;)noC(@B$IK|D8Q;T6)nc1~?qsl!U8cA!&4EP+H?bMDW zdx$^9Wwn&f+GWdS%iL(}C^1<=uY9NHCLoO5K8iQScwAU2k;iIoXjv~n9^$^0kL`>u zVbgQ;`Z-25@>)xoXRiA~cvpaitOXN%#b!XaoN8Y=vy)iiy0wHc}6 zW*BZo$@z{NopY{OjYn=LMLxQa=fCBAZqJ5QoQo759$S>i{{1#Ck8Lh-QRRTmKnk1N z_7W|DOX)##0qiKZWBi%=6xeLSpb{!nJ{5@J)^aHBuH??UBL`_w-}w>@e2XB6Kbv9{ z$;E4`#tqH2h5?buxd;eG_h+LMaplu5>Oc zK+{*Bl7o=!Gb*x&wM^E2AyVQHgc-yze}IGY?8;D_)&$xPo(q%0q**lr%E7as%5^sg zo{MMp47(7>;LJu2v~w(Tby3eaY|>4zQISO{?Bm^%XQvl3c102)YZ%$H6`A=csJy*& zncF?WwbUBWIFR>MM|;-G=?cg=oh?&d3%jlhS?7!Tm4fM1{|ADTcj7eoM7gc5`wn4I zZ%;a0Q=I*LV*7~D&vVF7e^t7A+1m+VXq&iBm+&t|pB@9U>KRBYYQ3Rrk0pQ7g*1jJ zox}Xe`nIJz_+;OZizA}bvybn+Ienlwg#EGhtq zqU@|uENdY4PHrngYZv?HP!fhx$mEWttHK}{Go#Gth#zA+>vs{m6!vq>MSFtAoj+%w z)gz7~dNX~9q7VaMid4LaJdwN17a#K-bi3m?(9T!}gaCC3&~}Q#%mG`*>q+3?%_gq< z#z|pbEOID>dlU zihhWt6fylN2=pz-+zetNM$o2fA^Z>$YSkBsO$P)YuUELq?+fBm_qKkEjLX?%EqWA5LD$yMUQhP?Xs^WdU@$veI$gpqy!s@NR&DwQ|uJ^g@5*p3|VgnX&0xjkR zv7oe=YbZtj(qbM;!K+LwU`hVIMGs3;6jp>}{+d#dwt7$g{d7gv?6v$Zq%LZ2?KV>?V#&frk{n=x{Lb9zGE{iQBX$Z(b6?OT@{$Dt=|{ws zD4(x1L`hrNU-J^Gmg_m^8Dd=A&@jP^D3{i{Mv-ye`HDva@4e|30+`+~5s{3>`)>88 zo0wpWmD{5p_Gd1itwKyQqNl{RA{dW3?205X#yI5+Gers&on;iCn!!dOmP52lYTCT{ zck7%N1rbJ*UT44<>v=y~WO};|$XGM!DG@uYXG80(<6(HeuMpcDksFL{VUVu@sJ6Qu8k%zUrh9j$LOUf&}@W_@2Jh+}^j!cQ&SbjIU0 zMEwDesLCXMmf1x^v^lt7&-rTg?1@x~&H$Y$QzYnh})Bo4iZ zeN!+&VH4loJlp-7naU`DARG?@ZYacr|5z8HSLFPV`BY+4Nof6M5m4BFLqXeh)C;mZZ;rHW&N1%owM0K~*+)+V@;al;aUBwsS$7i-5fm zNY{BfXml$8_k62#^P%vJtI3^nAku*G7?jiqU4+W|bgr$1t@*x)LpAJsu1a9NGsid_ zn1}iUg_DZh$MfY@@jYfyDD2sl&1rPH^Rpd+YEi*M`;|@ zhGW{hp00|!AtfRjaYG~-tOd;eET}ss@wl=rx#Ra*go*tgeRqi?bH}>pl}42(NMe7$9YAFD*p8WOOs(#!%yS}0 ze7HYeB&HDqS+Dz{=n9T|QLr32B04a!*m3?y#VU+Jw7gMRCzb}XXd&5zvl`WkPTntgW zyN!r{gJ?CV0;}S*n(#J;51K+cGi%hDSk466au&6#*N(gokUyC3;`1QZW|Yv9!)WHc zrzkFlmj>b0F^~H;6jHeiU&r$~H5oMk#xu9^Jl*$|sQHY;Xp0dFmFRGyBkd$PNZTL? zxJ^ZU;Xlp>EfSLC=MalgL1v|IPq&B&7yOnBeMgi+xQL5*B}DYa{!n}vYJLuEV$jAI z)B}P?4K`~q;fm+q4;C80DIZ|c-9d?oZ25B{>o5?^6Th#C*v`IH4bOp@hyi$rJKnp9 z_M8&HS=|jvwEaFW%8ZPvk5k0Gy=iGRMNsD)K@gRUf$x3o%<;D4vexI-%c@VfS3Ri) z9L|etI0%vXdf%2m8-@5)hn5Q`2I}a^iT?8=*LBH04kuC!`#xCO(Z#v-$aXC7uPJ-S zLPlKV8bL4!vfT%c<5-T-Ku|*WHju>68AQM-Vne<^k5E^2fTc~rhl}V?83Hze2VP^UEkP}XTP7PaDWR(0x@2$pmwNK6K|yNx(Ze7D@~7qy~A`ylI; zLR&$6M~Gevhi~j%5?Sn#T?=!^%KA{m*MVs2$gwSFYC2o3Wjp!_0>kI?5xXu>rx1Ci z7o67+!iEiJM*sjI07*naRANxhCBE(w-{v#LxWVf}=RsIZbtYk_H!Nn{w`jetNN1NJ>lfMqO-Grjehsohl@`=w|+O#!md00Xl}i6i>0{ z|MUGPv9cAPrmrQ5LNL~20P{N-qs>@11WQ<+XWnaMD{nZ){we45y+F^FREEc$A-iS1 zD;6(JOspxg_M&|;Zf8Z5zN6fTLMKtntIV7+#pR`d(O`9 zQ9(NyYH*smn7OzedU>VOXiaDX$$jsH&5(I@fls28OSchcwc$gmO7 zlJm-};J9m6-jlPD&`K~HwISzv-=A+eSBU$zzvIZx!QIdV_KaM~e+R-lgBY}+Mxf9c z=Wua1J)bAv|KGpwaGW2PCv&qkDRLC1@ht86!=!{VJDXG}MlPte*^VNU9q$n11v%#@ zzFL;N;&GM0?f~lmQL1T-90?icW;QF zf}AjtjN>4sIK&7Cb0fo9O-Cjd+VM=p{BNKA5;FSUasF8>X}!Itz5_w8V(;hEKz0Hm zd#@#eSVtL>!o(1d*$e$I5QM&B&`8fp0m2CvavH*>Tvv!?q}>@5o%(_M)I+@LN96Gh zK^51(Lu^~rz%cMdWX8hWEAZm;x_+3OG_&k!&Z4_NqHz!*gILESN6bwk{X!w8gW+Jx zi()t+#4{E7tRfPp5hdsN1Ln69pI&pOfKd>2GC%@2a2dz$uX5!n5E4I0#^qeAyU&TR zzI4cOgD`<{k|99fXsLJjr;KqbC4}$MXry{_wn&;n z&dz9@5fyX&%N1RYb%mg*5ZyXdWP=!Jh^_d1mzGInsMT6n4?5AW|7L(YQ=LaGvMmmrJ#2s8GPOkMWE(cMn+=Gd%rdsi#=S-=i8M7Q^T&krpz|zp;==X6hsK>M}P<^sj5Eg@2HYgCC zuK`it^SOBH;4SBJ@sEHd{uxxle3yYCxO9)Y1ec$PTi zwl0J+gPOfmlxsaP#JGTAPu6&Q9#1IUjjC|>z^Emup+p$Wp>;THM;B_T$`HvM&F5KA z>`M+`(jC^2)I}`NbaNHm^#^%GL-9!r_XbDTQkB;;qesJkYof4~E@))9GPmZsugpCE zYqA5!|6l*ugPx#?WDcC@pYLxuK(GnU5@N0T(yx@i{e)~ zu4WrU965rS=M-OauBAC}SnFwvUH=R1e!)_(cUy{UxHj?5xy8Q48tf;P? z@op2pr?y`XerTA*!TA?T+b5c+CXnc7)xmHf2b#o#pDiXM@nHwG zksJ&syrLIUg|3#w4!W->5+hp6lR`nE1@1^QapupS5VSef`43`x_>7olq)4FG4u*`t z;ZBN0pQP!iMb_JW-!T9_=dXb_2hE?)BW4TEw68iN5Iyqre61-m=Oy3r$oYPN?$V~M z(;V~_v0{jN^emtD{S2EeGN#pnxwwlapMxB+5~(Z@6!e-YsQMsM>Y7u&=4i{l%6*+S zf|5X-^>z$Om^Ht$(M~Z+s&zZ+ANj1!36$?Dgj#Wqstk$xX0I(e2jX0QWgoGCBRxmp z5Y}@3VW1Xya3hBYY%D=%4IEuYZxl-IG?DH0a1Bag$y>xu6AdfrRf3#S+y%@tK2X@_ zf(K5LqEN_72wK&XWQO$KSj1zo>DpK3aH-pndEa8=$bKJsa5GIN& z=DEoBEpi5JQlbmdCwj#oUPX?EGyWW8Vq-YBjsq!)IG=Sy&L<u=Bg6Vh^RShq0bBlRK(ZBGj@$B z$2HK`{*5|;L#VVBRWuce1&ZarndszMu2r_Z`cAi8;%>u;7CbL)y~UPYhWZnRLW6Kan&6g}CONKrF}d)m|C0bc0EA z0&^a3~PBuS>2mD!aAS=tY-| z@A5{pz}O>6DSg3FIlv2~kCQ|M=9p7p-HDEUL8?EZa@30-NoQ7~a!=GdL;nB&U&rnL zHL&(0``IGPMf`ytH|pYP2GqIb?CouS38Be?DCDy~qQm4r{?~s51#P=r29l2|!;O0A zwe07}@+W$PI~EV_5wj7!v1R6~pLqAPkK8W0L67o?Y6vIf36hm-nnxz$WxhWjx$aBu z-@ipfDZ-UnXcue)N%H(gN7(3aP@9k`y*$md_g3%kqaHQy`>YIBJ+cq zWFcm6j!W(@ljA0PJrP4@1T)0Ri5jPXcRXWb(NtJ zr*KY)nf5sG{trdm3*v51%&w!x`iM*9sQ>!<3W3GhvcI?NXUlUQkW4Pj>+#H)$TpGf z;X2>kJ)DR&nY(7=Lx=qSMdRNVKP%kS5T257%eX~~x=03?Hsqc+K9eOYcU=eZmN2Ug zED<575Q!Nq4V%%bZTWl_YBfvTH{XLk2V0_IIx_-`XzjIEQ2`|8ush9LQE%CR%UVUA z&x$#`yO>=v87+xtit$8@AbRkf++V+gyl^~?4CWH#B+O(Pb&?UD5aF{{SCEQG0Hcs& zDDv(xUt|`%a(;_kZI$@F7X*}yF3FxeMF|j9`g_JmO!pX?+2A4Q-Xdd$aAj{*wZM6F<-A`G`spJ;KO9%FD>u9-5fG5 zh}a$f`nP}o&&(Wno*yumIO3wKkCn;C}OUumaip|&1TWjdl@w|Ii0XwcK zU-wt$dD3d%mqzYKe8%Uesh@T?ecqpk(zUe4SoL|D+5*Em$?@5?L8E) z9PLn<>Z{nUCc|GS({k3l5#p7vS=jiE92Zr2Wv`#i$@N^uC8jk804#n+xYCUZA5Dcz zDudc^l&&K_uqQK!nI}wD)W~J}$>F;t28>F_TmpGKdqj?^MR76{n-&czU3w}SSs!dv z@p<>p=$`^B^#@Yc+Je64c)l_}_7)p69Kpz!to$JiaB=BS89RV#`H6u~luL6oQdE%Q z5;_8AWl7T!$ii6DamH-soodq8w!JNNFQESt&y>o;SdyzL@-N>~;MMXP%N@w&wx&=d zQA-Lz!7#BAIenU$6K`i{e+w-Y&xIdm#%yAniG#w$An9zbjKA;C2d?w_b2E!wTz=hO z;Q-)4N*5PD6Fci6c?=GrPcFozErUE2>Y6`W z{{Q&QGfN&Z8R_~IE!5J>kq8_LT%<>^v~m8vC(pdTq!zdX>9(1pa^RVR?8s#WJ*+U# z(s9p~hdc4?g_EmPYZHS>;-i@zZ`sHdI)|uw4#=r&77STRAxYZBPGxgn%6fBTGyWj6 zo~TOY=Yg~6KzZ)%4x*r>nTivu*WL7feme+S?J8$ z?np(`moQA5Fhg4`0M)(LkmCH_1ZRU$$%;SM8B+pPhiN?n(ldRUW1BG)N)#@aH(FR{ z(q~kgQdT?_`gG;=3}-&Gfvc6ja`u>OM_wH!&-X z?xz|Oj-)$q$ysjygB(Y14wcc~ty3`p_#D?-7)T-_!Kw}*?v=t9ZyB0AuZgVW`AWz8 z0B%&8uvMA^ijIC}4DO8ksXKo)nhgiuo4My^ud~b>34^r^7knZP7r{<96NgxH6sbsi z-V>=RQh|Be1a5J+*~`(HDqlL~@lKVi7A~;SC`>=FTl_mCI!CexNLN3epRfCtd0%hA zDC!kW{J6f{_MN!En|d&l54cVdM+TQij9Koky9V$IDg&sm3vuE;lr##!2cT=MK5W`9wZJYxkK(IzpJBi({E=+~^*cwh1} z31X0m{u4!s;@##d66Et1+8$2ah7n9+2Xf7c@m$Z2g(_l~NC8Wk=S)#a3LdQ9 zk%J-qKK>G1^_o?@6!&vrS&bfH(}{>d=RO;`o%J2C@9V=H@7eXcFvAA76yF7Hb>J|Q zd4&r`+5%#XkvO(E8lSDrA> z_O%XX9y6CKzC7b36hoDLyoB7OW1*J+JWrt9v1}eAMAQrJa=P;mu*-oPKFBM?U^U&N zC7=m3uhrsM`+XZxM3FgM81{U7Y`_7!P_OcPtQdz78C~yT8s8(^SD z{`~n9f6sM=tI5+Bn(o$(dWZKo7q;JjA_sSS#Ukch%2BtE(Rw7uy^mUY#2|I;5Y!NQ zMRE(z!qfT{-UA$9CwWKFAIaObSR&nn`e&v4l#veieZy37p=OECnJz{~vhaS3ISpgo zq`9xy+eP;Cu%Hz&4l$#GTIO>OqL067t9PAsBI6m^*GFPW^mW~GUzc2nd?Pmano}+a zC)O_N#26Eqz!zMy@$Sb`+-2v&Ar@E9^9d2*^(FV$uMiUNCI0Lbn=@jC)Tc3tb%pEn zMW~E3n^^M0sK+LBO&2)M)$ivcu8OStE8_!LN3z~D4<(r5PR)o;-dPstKaWE!)J2*9RBu~Hh>u!`aDg5)zlyW_Ik-&su}GkaZOFU=6U>EkIzRW$ zMO6NMr#?%OSQ;@J#PGZDei5&lru=VD%uJ@Ki}QEW0Y@#* zrJ27+{5$?4yc!nd$6c=RUIatA2N92EEs`^6M#ES|Bt6d~pU;zh)J{6ACUJmtyENut z>2+WrQlJ^nSviYz4N6W>IR(OZ$#|Tzw|syQ9@oTfVx?5O4J3~EK=um*^$I*-GN%QB3L?zxO+Dx;bBq$OX26YQ?C);(F8gUgI^tQ~ z*g4YhAU_1+3!?8n&*ptn@3kq0j zKV$bE*{O2fSZaa{6tyVsdKh#RW*-HvLm>ii7y174E#KeYNuuVyF6Y_WNELXNNP78# z2qX*@91cfcNt)m597V4wFUp!{6s>TvkNdsPB%bGqUh=w28f~D9(W`pJ$~ZZqDdYIGc&H{gdKiahG4ee}#Yx3wzdY zd>%7qLt~E09*N88yx;KMXUv?{?1M%Y_L;HVF3}`w71D@Erm7tudgB?Qk^8#C$ea?TZtT9C;MDXZcE;G4N+frB{rZRs2+rR&3Ur^0!rUJd^#1XsEaj~@= z!P43*AB9;o%q#0nFqf&liRIwKkhej1Rb-vbDEj7=c|+H@qA3DG_v}--W0~P8nT1&e zr{{u*!`GgTof$MuxzQKlsTOQFrd|l0<3EJy*T(JuJ*pVAHVH*#xT<8Vp5SeoFSvSu*AgH&@`akqak( zVQkyycUu0FwxXWHPc#FKM3md*Hm7DT$U2QCWRCxTDC74`9AQ=plZ(>)~Ihu#uYBW zTyE3NmBJWHf!Fn-dEi~#7|dazpOG8V8V0zN+^NPZjP!-Z$dTE(eW#|Jd6qoG94|{Q znIS4uItb|GA)>uk0W`r|Em4RHRwAKK-FcPEz3VgP`J$D>oDCDvuwDbgJjboMvRTwy zxpF)g%hhlja>-sw-G=G+mZo4<;vm6dHyy^UvCMO^p~8CZcAlv1pZ7%yRhrt6Y-^v_ zKg*>o-s4&laADe(@wqSrRDP(mb8`z=P%;Gwd(HCl8x6U+%MT=_1gFrTd+*&!k1tGcw0qw9<&vW@Dc95mp0Vjdgs)?8#;3A{MyedSfp zi3JbhqwvhUGgMtvN27sg{{ATjIQ85ZoO!H6`}yYHGOF8Mz&y_U?YS&aX^QJoeY2Jz zR-R%l^3UM%X!E>2p0Nip z1gh+GHP%+)QqXj%R?c1uakcJUX=v1n{_u3|CuyujgK)si_l)kIb*gVkG#$t}^O~SG zgqT*ESjKa(vS!BT95q*QWk4YkLJqU(c*Vr@rAj*3HJtAvDsx`Qu?&~yUQb9- zlxI;4j`vzZ((8l+DP|Zox5@hGl;cgXP>dO)WzVn32|rJ}mNMAJk~mzhEGo#7dsx!lIcAIs=2M_>B;*Kg1*0&h$= z9fer#k|LEL{_MOz=}ya~5owHEqNl(GZ?Bd>GfTXj=f(L?!Am$m!{OOodRTviXyLk( z$RHx&>i+r?8@IR&Q6D&qK_znJBA<zVO9D>q|i=ExqAgu8SE&k#*$L(=cP^4zZT&tGIEn#m3pu%cQs$A)|EaYiBX zIOQ&;2y4_GF=s5X*N!aZT>9m#VCN!LkOl0hvy!MWEQRjnTD4s8b;K`cX%ju0{+P!` zKVQR#Tw;hOIb}Nq%_F`Gkr0B2h|M6~L?lQ&3%q4*XucaHKrpv5qgrszUssr;21Q{~ zl+7_m&Ioe6K%o@Qrf{5sR)c#=PR&IQjDehCIp1%Xk2*zil467z7w6yUaz=g0`4{tA z43rNu#_5(hW{md&u17&-x<>Y2me2G$Gyq77+n> zkG~e{M6L4*lqLYn`>OTf(jpyM6Azplw3qX4WJID_)D3b3)X)phX_-O{qH~I3hskSp zkn@9_hm927#aZ$+(~PH3(9uWFaWx~7WQP10L77v>Gc1M3K1by9y)eso(|&XWN$5rS z^&|6+ns3Z0*L|U%loZY!n1F0xSC@|bib`coIa++EtG4(-Lw{1l!m~l0TML9%^nFyq zRu%vNAOJ~3K~ybg`=k&&#Be3%nEQ*?y~Vg}in-2? z8ZX@Ap1Tke##FD^9qx!lxGuQQKacFSYo>fWqL9?{xpo2Z%2n30=#Yr4tHsnWBp-sV#V<4Ud zu4t-vSPYyU2(iF_tt$RFz}hA~4b>OsTzf4!KO(XHoXp4c z9Lmqv^1KhXBO}m$EKohOuQM0EAzbF=6vY97IH~0y6>mTPAKjsO5dX;RuaIR}Dn7nj(Lk^b3Bh|8Joh%@0IEgHg3N|nITeE;y9&hE2&N1S5%A&t5aC&=j z1o`X!`hGgvnwc5lq>i)7ae($q;CLM5gDTNnP(ye@(NE@MS0=N1EpN}+$edB}!Da_4 z+F=!FBtOIsQZ7Wtq9RaF&8><>c4p4=8Bx#03o%w)j%d#YGkxWd5J76qr9=#yNFbVA zE25%f8Di*QM#wOO0EtPIUIq5ogu~YyjRNLENPF3z})&d#N3v;R0IXO%ZT=S8U z-^I>+GP+hcjPWdVwkVde18RS7IQw(9C^Cl+7ZvH!(sUOXoyN#Y94a|vb7mFe%wmDZ zr3;nYGu<`P@T$15+k$oD=OdaqUAXE6{O3&zQ4!82Eu|XGEyQPonBgQwG>6ANCx)zA%Ox1$BL6ZS^xho&&9R7|u~795$!n6R zZVtx+cdSiR=1p`UNkiz3e~L7kn*AV?H~-soVn+dI?Vc;)Nsrgi$~|t`PQ=&NB4z-W z?b+ma_y6Y5H;1{FIZ~(LzFTsA)?to@n)#CX`$H+pAy5ANEsvcl9?PN4$sq~v5No;h zdv6ik3mmY=kQfc9pwat556Y!_nIGT=Bzd8n*@odncgwTUFdJeRfE|PdDwcyR(Bm`q zQpn@y;X*YUkORRUA{5RMtbhU^rbUc6yUviGcqZ>t39m)+z%W0>nyiMb7CPxpL&44( zkz%-7)E4DL;qXa!)j9bd#OD^ZzMK$OI2xg%J#g7p`C3uGt|ks`&hiwNNTM3!yV>O& z#o{5c*_}jz%7f7zhsz;}s0(HY^0Qsf%4v$V{87g}a{S2}Pqp434nTR8<@1L3*yX$; zGU!;A)V@R=nyCBJhrFJ3kUNq4@r~}a#Aal`_Bx&vgcxSk&*V^lFD^#+$h&QO45hi` zD)&naLpKCG`-cNFuL0(E3*FO}rCRkwhKxZ^w}WG7BPrmDv+(>}sG(+yT)sH(1&H%p z_Cqv794+7VeU>Z>T%e#I&7mN1p(=r{Q{MBZM7KQ{qb+O15QjkA^Fag7!2uBJj)r_= zIHFp@9m#%EN{FO&Rx{Em=DtTvW(}@eee0rf;L2cLA6?8m7lLepti~L4AeNymtvQei zw^BrLMa-G!ay0sk-JFagqIu-N^ z&}!xoIZ28W>581wuE92+b2mc9ELp~e?^D!t~|alfYn@@@BL(C&<*VO_vc##!U*<7F@vhQWN$1ynoBMT zY!oM%h)>VKS}r2-dC8CHwR6I;OEKv{G)K6o5xpm;h*T+1ENpq?aYJZuC1Iw0<*}%qv7jC`jE@)ulV88C_}$Q>pA+*X@uHMf)Xf%=lgk&! zzn3+pBp5EmC?e8CxthWZW(B8fSF0vYGM|Iea6o1Aiu56hH=cXsMmNV69bD{-Ok(-^ zIZvER(`DKS=RIZv+joVFD8-~RpT~+u+#>37UsqB;DxIiE2qF|{Swt&=ux92>1Zna) zOV;O;^oGdx6!Bva-wkmr7g9964r;H;1E&jE+EU}bri^jP=h^9EHeh8(pgzz?x;TUf z2LwUIImji>Gz}`E2La;QM+SskgU`t-iV1tVE0^aqb$N>_tHqu{@^tAycD0Lak0X`6 ztsU9RF@w?Q%dBR!@lKV)ooCdGv}f=8>?iHS$B_MeGP;fL?>U@NB3l^uv^ORBChgI} zu|4MyUvM>|o(yruC1addOpYrTurXztb6~L<&(wp6KE@Mdjf4X7oD;Q_vp$oIDlzMy z$rAUGPHqFiK$=);<8Gv&hxNB--{eVO5^-_u5oT5xcy1;~&Co=fQ+Pzp@W_c^BlJLt z=tk^N+&Lkr9#a#S>^o5T2V%*j3gqlFmY3_#|Abp|Ou6P47M%NsSU>966NBNPmf&4l zd&_w~a_NoU5Cl;jE%wn;3{!*c5H=jdB}7k8Dx3$o2utO$P1cVtwa@*!_#)@F9>{Xp z5jPZ3XypzK6FLlRXMrlhGoVa$`+#P6$~d$37DEkbSX!@#E_s>?K=&Hn%!NnR`bLz@ z#(N%O%rS=8(2T~4_rf8T<9IgE%{1FF6IxxwF2OlbGnjKCl0j|eT^QmQ!8ssN(@cDG?r>ynk>}Ymr={>p zO;hmc$6w3y*d6JM65y!A)kH3vS=&3@!9^b~ligY?YH}MOi%LGL(hQBJ*5DfPu3zJl zZH#BWUc%ftW8SRT+Z@~?8*{M>I~9?rwLgvaZH-pMyMz&gyvL-?dnj(^{%y=5*EJ(% z%po>>7!Pz6J^3(}F{n%2351{*1XOc8ql$YndN1E3L&W||hlw2(mw4}|#+_Fu|p4w$IoO{5eraQ;2#Ul?j zb$TjC8imLlGjN9KjEzXw&aY-~k5^1h^8 zg)`m!RCbo)dH_S;6PvjJrD}Zw6DYu))_0~dM#C~oI3fmz{ZjclW}zrgx0saUkB%Wl zhFv-sc?h$qT`>fi$Q-43VKj9Wb3NvqnRg~_@wPA^a-bf)4F?9WP{h(c>jA>b-Vp(< zIMg5SyqU=b^`n_eL1YEXn3Jej<Tv8q`f}6W_w1Q_?p~FHnQj4IUt*lYOLw1WurUlER!i_ak85T`gP)WCeJ=c(>zwB^hfVp;HT+2|b4~8+%0YpN z7Rp}=jr!~BS1D)RUojv&uhNm5$j>N@zMm)Ys)>?M#iq2OH8Jq@&R^HeJ1U#AHhjtq z;Z~d;Vo|k(A#_@CA-eVw-zS?os&$!z$ii%Kc!r@txMwW|4s04NQTLYLP2$@y{NVzX z&&k5GTkiFP2DbjZ(QsgOCRoGcmy3{YD&l}#YjMqCbXQOAz4CKP^xbvkFf1DeoM&q- zd7hPbt+#B$%5&5gF0bxWI7)x~E-z)~PggL=A9T%Fp0EDCM+wvzqfpB~gliPf@g452 ztIP(e#6Vi8yQM5GA>9@CO4(h+0C^id5xMik(s zBG*?$i2NW)q+`}JF;2&ie1Q2f+&y#5e5P6ChQf3wg+i@dzr2I0e!@AI-@PL@c2-_0 z>JZ{h)vPV-3Xj_=%CR_BvPUGZ!4SI7`L7N)9*I+Eo`f)Gvn^eE*nVyPhS_J}Km5z8jIF-s+mn)dSl6 z!n626uB?k9+c7elU65~x!LO0VgqRdAeR{7Ws`1~?nYF^S5+F@Dj5l!IUteEx5yj^s zU-uozb=>)MBe*s+HU?ru?Ot^1@(fjb)zuweKP;5$bQEY(3E)FFKzPmC^7*Wa1Vhxu7*{yTo+pKqBv}l8A1&sHk!CTNcp@Ks4zU^et~JaN z89K!#mLOh3Dn5@NE=E}6(h(&UYvU>}*C@rc8<<1(L(h8Jdj`skRaC=(D~huRKL?bG znZkMsn;1vK$Ok{W96mS`qjoa+x^B5fi2Yq$?)#QszyB4^#KWB1=Y{}eI9u}9}H0`#E60X^DG(Tsw`j%5b#+K#`=lM=Q%H=&%o?xBey=>P^3Uy z^8449jO&sCJZ%j2Yr#v0R}3%1bvEXV!82U-@*b@?NQXE@u+SM9Z8hdVY|qKL zSVyd1*PSR%M*DOe?K@u1Dvn4CrHW#xL@@YHu6fC?`>U2xT1yMoT0{dYe%DSTy2g}W zzkUfGm$(D=LI3hMy7&9@K-|fC2j>CAcnc;M_Vm0{kDr`bM5gw)e1AW3cJ(=XKiMBw zwr`8tu^|gs?UAmspi)en$w5_`$U|lfQ@l5E?}XXmx&slrodvq<7I-{xIg7b zRAC^17y9G7A_y?s%wEBF&VS?GFlXY9MJ^`%_$Tc_;6NOKU2dCw~m z&9RIb*?U*NS@TJUP&ZxY8H2K9Jr$*(pzeKrePxYIboKMBin7W@aLkkM`wl1Vfaw0L zhg+(HGiHKwR?#6kuB2o*mUSTv)HGy`8K2$2ot;sm=sC*$fAS2WIRAk=l1uzK z2Hu-b2@{ia8?vAHTyW;k3%du-uTRd_>6-P87$uiiozC-*a}83vg1mD;gBXc7W^R3t z*6XB~5Gvj=qjyd6jp5x@n~C_}`+#WCqt9Bext{hJZ|qp^j04WuFhmEjmpSh^K}3&c zO=M*v$z+h^^X*;*0kuB#}$6}uHeh|lLi zEk2_+og}msW$nK2d?yA3aKlW#zAhP)z3fMxXW`BsRg(`ZH$LbnYi$q=#*1o1G3~Iz zo6(WXcVP}wi+ z!>CouxfkbQ3-8l?-SV%0{VVTq3i$Uv^7%ZmaDO6NfwaP`+1C=qIm=lbg^{ck`nkn< z3+uVQyybfxQC7G7{`FhtobleScou(seaZcG=Xc8)%|Kk!bzP$9+h}lbM7*A}<+_Ui zl2Lb!l3j@PnKk(<8XLrxPPe9jglEFuTRzX0??0cH_<-aL*2}|2?&`EfhDJ;c=KGj~ zAIwdj5ANv}gXU?1lQyIKXG2Mk$|(f=I~I(+)Ytu$!j`I;EbmW#uY0egB@fIRrTv-u za_PtYLK@)SD}>T*pTc;VjcAQA8`%`U*PqXKm=tgZj9>rPzx`(-5T&qR9m7I2Xjg?5 zdOem%iTc)tWNEJ896EWZjDG+A6~#AQ(QKaRh;3Pb+!+`b4rsPmNDxc7a4Fj`4CQtz zb0)A4JS5{%SecK|v#txTSOrilAgZwTjyG?)Y8}zu2jLx6)?W-332bVag_a6SJk-Q7 z@#PCN#L5P;=OOeVVBwzqA2QM^W<`;`}(Dhom!0CAOQeV@F z)`<(_nwfd0%(a9A;Mx1NtY9-iXWxO__OwM_pw4D4BQl})E70QmR}Gh#4+_+)KqR-p~eGSQttkX#YHP1b5O(uO1jEChnB{R zxG$7jMOAriC(p~mw%3`L7h2{u^((eg|#`WoBAU&&`B0xj(2ze z=ol{)nzsySYu~xIv#uA*^+*&}Z2Y+Q4win>B3df?MKcn?^S&->LkU_u2ONw-$or=` z!%t&;d28tD>SWVvCbhV0f&dn-t~I>u%W5trN@P}dNM_XHf0((;Mb=1lw!E^V3)TKg z??}-YGmmpPkq!LG;W3+lVbzf3d%>LRN&~Iv0f-w%9{^-+6$>Nl2tX;p5dVMUdp81$ z%t2b6DW}y872O~$PN~$?^||SfdW%cHY+{-!*k5ra_Nu+|J0UKdwQT0hwVcR?lC>6L z#9CwTE#tyMwF!c}Ibcp3$W26IP&^spGfP?m@1zuD0{1HI?Bma0VgUbcjhwqv*gGR7sm^!J zBPa6TdQLsXITYKe>I=t5bhc>aF!Ekp&m-I6XqRva^7Ah-3p3W@v-5LWZ&c{^F&g8I%%6kOjW1O@AenpYmT?8;WhGS9as{*jcXBw1((;`j5U z_|PO4pmQR_a16O1E*WqebNRhlA4_uu!!uv!4en(`a8c+%r<%gmxpz1;xQvhZ6U%`c z&(ajpVv(HG4v1G5gn}0rYpCT5ckGC(B3Y-Nbq`~KoU>zjK4-YUcpqs9F+OX__xB%p zKHnKpz#&pD^f2I3t@p;y0b#(i=e(|~vRuvD^BTj;<5)^hgEMKTusjS6JKRrLbcPeA z#EcZCuC-!dj9!NG3bWZ3^fjj$8U5lZVkD)HeLh9TdxgWq-0`_bFZBIkeV~-dkj73K0A3g>@H&Z}GEe=DG6R+Nebm!+a{%?=*oF#T|(}pEL26 zy}q%`wcYR84(e6L240NE(^?{ucxVYPiX3`5M{bZb1dGmdBuNcxM~}kT1^1JKKi(y^ z7*n~gJAcktPSB+n??H&04(bk(IV>ZA&Jo#LWR6=@X1cxvqSjbYPM9y^eTyY`#h@MW zjL{m%*5iQm7orKi zt}8Qr!%;t)GnBRJkp;B(J#UCLf+iqli6AfGSH;Lw)@XN=f;n$7 zn>mj#AlV(~DaAP#X0q-opXZ4)0R$uWxP#?5@T@_|`}OrJ78ZNU|NiqoxeSV$whR&! zADkV;JH}NRq9g{gcIiAb3!#L9czHD3Y)jxkPKwk{lL3Zv^{gG2&-0P>tXEI^iePGe zB;$zqTwYkNa7Hob1stx)S|{CZ2UON_0xNLKAVONqGbzLphAJB8@&52#D5tatX$zt|K3MVEG~* zaR8SUCR~+*)mgo=S8T-rA#^99O;apmplb|Ku@j;>Qi|f-u9#b%U2{(Py1yXqIP!VE z)AYcObDfRl>XYXqpUL~a-!pupD7XX;yk{QdG?zf5p3@#h%LRL3(og<(W+i;B*n<8Y zGt+(MQcO5YC2;@*9KJuC+sav>B!nB*#e%5gDn~@tIbz~6wM2k6M%FIeGj!^kr9d+T zQD2A(a6frRI3q|K^?1boKeLHlZZ{hX{4n zHvSI=&M~9c;olXei6Z~-{=M%zdI`>axRY~fb1HpNUFV=c-(k3{*%oWoEnbv9DKYrG zufqK!nr{65_y6ZVE%OxHAduNEbd!wDjP=B-q{+j!HTr35oQGJL{nO_ z?L80ZM4(I0K^Ek=qG8=f{4Aicyt#lRGb8RSWF%eT=bRT>rW8r?7dAZ}x`ASUwgYjr zJogDC@_W(nF1GB2kL@UxUWk>Oyk~hjF3HpK&NcI3iJHto`j0Ha{;+F9fOWD!&-h6^ zp;Z2S1{x#p+9;F-aSJX{<0LJwCF-$uixZQ;Bshp#o2-kf!9SO3bj z)`rP<>Djm(YPJKclKv+Izs*2M#9| zFiAPgHqGbC636H-=Z(BRgIaWy+p1hgs_#xX`FW-gZ(iz6&qYPLjI}bda#*V6P8H;s zA9*YAN&X1+pH*R+KZiAhW)TZs%ivSl?1gC?f4QIN0F=^vayXbmn_DmqVMozZH7SyXDe(i$MSYAOJ~3K~(bI zvN3x9J$YxfyO{{hPMhI!*BkLe)nu#y=!NvtecBHK;9oTG3gwxx32bV3QH7!4tyV~yv)Fp`` zZ#8)0xZ7fum`-v3Tg=jO6eV-)Eo)2W&MUzfFV~H}8Xjvxsnf(b14I4(-y95^2AoSh z8&dI^gnMr0{Sl4$%(^LSZHgJ&S$ke0Ao=^Vq<~Z{MOYN`2!|TTnqfv-Ki8y*YUM?* zh??V?jlh-pXSFQ4=%j8gQ!a*b+1s*;1ui}gokkP#vNlQ4<`@~H5@`C7i|&d@;zw?o z@f=umFM;$=0hv`cGiiP#GEvMKXtkYD24B}*&U!dmR9P={w~MAYwdgONQAxRImUlhP zW!LuB^ZgLbWCmjs`Z`cE{yJCdj?yN&>!galpouziS5`gU*_pwO8lKAl)KdzgSq?0P zcgIG&$w|zuwdf1uo^o zJYOJ7xeVLub z-=A(2FTtq|M(=p#isISY5X-aIP0Z%c-=)Jp>&w2gwLIx;#m0((2#Rt#*B3`FUD>GhVL8fwS5X$E9t~(eKo7LYD|iKtAD; zE#?=F_fMK&n`f2%S#T}g%&yjhpZAO@VWTLfeFwDDuj*$pd zZ#8<{1+5Cs&q`kI*DeNT-^brEmh6%XqjY-?%`-)sxU*9uf0D0Wy*g@l*Daz!hWI=Si>HBF z#WKEZG}8%VReT*W^ zQplC~VC3bhY0?)&g3_R%fX3oH7I`Lh7O;j85Q8YroTw|pc^f(7m5Yu!1jJ1ww{eNZ z?`0w8G#8>2yi-7~@8>(tPa>>G?jZ`@EwA@ttq({Nr|1~be2ZG`SrzE9m)G{?I)J>QcC>= zvp^EoGPV$c9t!NlU-Zp%Lu;EYY4<8I>ZE2dIRo#4d^x#cH4Cy2$qm!46k!=>5_^@l z90Dp+7Sv~1|FX|)xdP?O$kuXeZe%k%f6l03Zs|L&c${{f%{w&g&>kQpF zzu@yup+A@WMHp?=yhd+eP0#-+p$Z~AwchOzFvNRWk!cXcT0|7_Jnj*eoOh8B{@z7m zZ)eT8!B{{kf&x+OKMk*Zhl?CtW|WtssF4645D5DsKFt}}|Jn~Tnzpzd#u4-LAmPc3w?BpO!vRhmXCV!8=AufuljD&D7QB1;vSdVfAH+m}of-sgn{)*Ma=k=|T{ zqFCAj{GrQhAgfJ8;y`P8UsfIaL2W>x(3XXTOw)hF2K9A8<}ILkuNHcP9r^xHcUIrPqE69#llPB1n)5k(ZslXfM1a%~U_RRV03x=a77uZ9? zT|T681QQF^@@7G>OpHoiK01C}_&;)`1$ac{?p&^mzBirI?;;W^H0k~YC!q2@fYS z8JWqK0}X*vG4Zu0GD#Zdh705rP0*!*A;som>zo`=?S@$Q{(m#eJZP7;@ThQK6bsF< zR(?h?F?r-^u>#d_xXNFy^h8_X{8La3+-l)UrG28#ymGb9Ir1D1eM@BuS-KF78%v(IINh^`lKhQ}H2=GpXnv z#$`UFMEtsKcr>h(m3elZ9|L*KL6n+{ zo?3Vca}0ZJfe3@+UYTA*(_^Ta0!Mo9Dm0=sJ)3St}18apS28Q z#lXzl5^N&^D3`(C&kWMf}J7OC{vm^+~c1dXmT;_C*0p^D))8Cdf*6_ z?uNJa9RTI7o;YKol(UD#Y3>m5QB=v_%RoXSijqrz?+${4g|~z|%Q-NQn^iVutcuJ! z;rGWSjBuG5-=h;1=zS>31zR}fZyR#vk^QU^22o&Qd5na6U=EoQL*qJYV|Eclqa(`$ zLwY=_iGksksK?Mymq9CWFLt3#N$!LGk^Gnwdt{Y^{^(EL&Y&GQo-fz2u;e#(U&Mo)H5206sKNC zr2EH9^rQx7F0(#O#W-U*B4RPNW@OMoe<&EG`aYtkW?}A{`Ie!!(gR2s5x4n=aKuGiIvT0AJiDVmLpnJ6X9>jRIg$D$^ka~w&ww1 zNk#OuSgUY1Y0?E_xJm>oi~EDvvUrDTMj#LZ9LzQ%Zm5=rTTY`H7GhL`nJ*Kd(%6YYJBs$n>@4b0U*8?#zwYj4K28QanB z?vI$wjHfzhiEqj1i-X9KeO8G&Y>4cQT~A=i;|_S_G>4?MSfh+K0*x$gwD>dB%3UAd z%gNkZkx_J0#D5qU_h<~b6!Rpt+q4ogns*_F$70x;Gctoi1%q{dfOnh*$kKrP^LGK#EVN;6G zt!9Fpf$6NDoFeU2$|xvUu?qy0RflRDc0YAAu2S%`Hgp6V2_&AGG2!gDs^P6!_!2xkywI!C+<5%Mm>?h-#7k61X=1~LDB z;FkW#ybO;Rh^RSBkc{`pMK5MzntQ(?D+zQX#r}sFbCtN)PeqIh&R0cWAp6Lc5cQDs zP{?kPb5#7Zg4Tg|gt1#MgYC<30rL`KStz6tus)ejk(WuSRCploT@JLKPs;=PzHgvh zwtRm+a51cw{inG>?YX=hg0s--S>QZ8n0+HCQ_h%8u}*>|Pf$_yLB@N2Df zz%hSUJOn$6fm^z$DNIOr8(e-P(5Tj2T#0x=aIlu}R?LhZgcgJ)LdZMYd(6P-? zvvHAD9(_^fbai6dpT&r@>3{ z375q0fBk+@JGvN)D%J^XCP!pabEU zIZ!;~J=_P1g7rw?<03=GbMV8Z*l7_MRH4l)5Ka`69HQ}XzA`&--j%yUr#G`z^dHca z=ZAyux~_K)D?is9WYl{_g(a6W+6SOeQ}gB~y8hYw2RK~IxzeI2HUtgj^nDWoc&_vO z-pGN>tU8T`l4#Z!slJm?ehAF?JkNA(b>zHc4UlT#R1coa6{drJVky!EEZsTJ$b_m> zs=oNCRwb4x2Cp*)Ir4U@BpKsWezE2dtum2RD?43()>R^MnZ2SrZaA5fM$-g8uUs?Y zzq?zrsW{?(z`MEYZrg{#p^EW{h2To0Q8-r$1C@i^Tv#+A;^{f*rMR7AHf(u3$Hd2b zDcD|DqcjAxd(lx0@5Yn3!j{+9@c--CNs?&^1#mo^6o%wo-#+^sF1F`_&R5H9_QH{8 zgokNc)=A|@;+ecg)mDk=Q1YNJk;;J^C?vAS#@lh575jb zKNrtvqb`_ZUC!o*_&zH1v6E?e@a4J~GnCwnQy^A9MPvIURVLmQ#lX6T;>0R*5J|K* z)zy2|Im8-|1Iq`CVuko&H1|D+Ih0*~-FHRyIQJCoGFpa9d-;Ky9oH3g3iG0AnlzE+J8Dok zR})A4dD6KpCy?8h%^2Wf*m2J(6K5Cc34XBHMIN!c%hVymqX%S7?)r9^3K!dPX$B^h z3JScebOftc-6tv$XJaNuHI^bI4!|WQF7iBawtS(kyL8BTmh9tlecef#Ij9YZj~p69 zwsc(`5BJyEh+P;mt_jDHhXaJqP1XRXMB2cAN6qEs($RwZ8_6~bM*+?6B{F{0zZ zWxNZqEXYk|HYwlXj4jY1aza+~>+4qz_UTaXhLWj6=D70ggv!*#$l17f?veHtZ zVPbR2XD|710WhyvrUgO(bPN%jGlcQD+pal8`OH0^IJ>ZHf7XK;;T6x%IXMTco-y91 z0dfQdxMP@n-8T#+iUnrPZJy`T7Jbb%DW0N7qFC80dvn0cKrP@dzrMcYnp3VZWQfXs zYQ{Y06*Hb0f`o{tiG0==$Paneg1{<%w(mcG;#oW{dg3mbW}-(hV~o%JSzErJN9J`! zR2^b;?(5EeG$R9u?0@A!TfSR#-uD^n0xdJ%M@w>|!bLr7$TctA`CH6f?t4Ob>9U?9 zsxyUu>Jn~pEJOD8%qR|2`l;I21FubO9ZejJ;)r;dRnJ443#Tw%RGz&dD2&=G1)_6Q z9Hkc4z0>;)=L|E+1KBP~iX3BN`4K(Hultu==ugHq#chgXsq?HY;#)3@xmkQR5SGi9 zc?G#+F9>*YLFIXlB&Et2QNZZbjYXKr&`|<^M3EfX^1YXQe918vyJ8;ydA?<>NA7!O zB*mB`KJOV3Iq@7ka?K!a$ccJ6`s0x`@Pi)a`t>X7JFmQEE|1pQh;Fouqvec|OS+XP z`VfTP_YG;3r^|F+muw)m2m3`3Uotxy=T+9UYs=^R8{&2?7d>_W>sgo&YDTE?c_G#F zl|?NjMl1uAWq(Zp;y`pBXK$TE=c?jn^6S3k-+q0`Z0Pa(>r2*l`JeA^c|H#ofmiFp zPl`5J=cU&SIan9~1?zy|w;R^8@YZOw+=HR_1Nv`6( zZ>+P&$YpGwHPkLIb`@h@a(~_O>({RoD@;81sv0q~*#F#Lzr;}6treda?|AlW+V&n4 z-K5EY#tc#U_3JC{4J^pV7?JHQDu4d`0TR8()l6XDquwPggARSpohBp4nlPnDw77sE zu|p%bo`~~VYs=b?JnLK5`alqk^UW1~uT`Yn@w}7wiSuT=XLPotnPOy}FdS<+5YER5f=ZHfK~sHNM9<86&=b+l zz2<~4lX>xy#s(nVzy9t2{?F602D@70fkWcHFS&6!cZ`SjMiZ^?ye=8n{c`DbhqoWk zJgg_xc_Rmrrd3>Yc0RFGTxjzH;$V_Le=YG>=E)AL#Z`CISO(CKR?u>&GLbLl^7({f z=Pz`F|DEBR&1ypn_64i8zb_H54Xcu_Y%gUp@$uXObBL9HcjiS|EzcXqv*SVbK5YR# z^7khS;^bj88;%7-*M??}X84V~lI|+>f~)?-!7*QNpdj{l0A*#;w&5Hv5)Sq6>#ls& z9}v}!bL|3wzO-2lnc**HN}ADg02>3EQudv58j+zXqqQ1^QqomUC7*}Wo*y~~N=)G? zn9$6-^&9|dci?EfQ?EfY55Q;TBIcSiGb8+jYM4&Gj?3vZh5QVUzZ{sS4e-eE^K>LMIt|~aPX8>0%k~m3 zQB+~6BGzmeMBc7n-fL>W9ygTnAxbW@Z%?{CY*^A%PRnlZA`N*J3@3AECn65=t{Zg^ zaUs)>;9MqZHy-N?Ma(#Wj22aG*_qbjQT_s4rz4+IRC-Gr+O>^;G*wVd}_oG(ZOM9*7H$M-Ntx(?IDYLhd zYEihjw|K$J>&K z^PyV=z*vo@vS}@+K=8n^+ge4g%AdcfzM=-UXhsVsoKZMV2j{*Yw%{e*W2eJsBeXei zhQ801;~6+JlQRw`hv3h1hX{r4=XCj>SpJhRklAZd=Pc&O&f|O2S3FV*jLzKDElNcV zWD{4I4mupz{up5Ib1^ZKfyI`pNdc5l!H&8=gl92KZFH#Deed={?G{Q;+baenYVdVr zRL1Zr1rti)Tl*!hHs9H$uSlsg#>0X8nal~+ayc}O0d@}Z^4U+))>`?`GEY`3KX^xb z#1cO5(0p!;O7c}Mp)GWgUqzoEQ5|-i#ktU5b35^rOSa4?EJb_XtA~KJX~W2#(ft*D zkTC;R_eJ#Hr^6#7$+pXpgoQ)E8zij7cRh(q(XCglPUoy2!kiLvv{)crW1zPf+G=J6 zH?8-swY^l%_s0rNyTqZ5rTfV8;wwSE-?0Qoj74 zFOnp4p6OX%6?zz3P@c`iiPn$jZq{9WM$1HB1ul$cWPN9B;951;OMz4M9TI}F%#1EK zv||hXjtB=yx?R?ykoP>#Q*5ubh)Ypko+(*Bq;M>e_nna`(%2LGrj^y41M-^xZQSa< zQ?r&h%@T`o3R3RLtPf)T5yB>(*BauH%rRAp#pd$@eiA1D03ZNKL_t)P8@lsn#~HJy zAiatBbAE==TgUq^bRi0#S*_^A?Q}DqU%mA$CME??TI6>>YgVLg^>wUe^DMf#n6ipG z=^^$Ofj33JF0|2u`lX6%bX+5r88AQa@u)u9X&lR?M$*T|U3)CXHTBO6ssOEBDH#*vsn*@gL#_{;tbqza6978U&L5d zMY}r8L(Jf2N1i+5EUv5W$z{6_Hd`fX9z7_hmNAuFtS+8Ub4?24Th+R`aP=dSB869Z z|F1%~gVavm=g0i0C?+Xb<{ajXVod^X2}Ftt*6Y6;6m#1lK5wnz^ZC?WTX8K})7dfe zRmJD)Qwz83zfYl5AH57>r-`79i4|A6poc(ku_j!$C^qLz%C}JuNA%xX3*Yxo{jA`h z73LNSrJIucvBe6{&rgVCM2^oc7r!`qK6_=#zxG0hi7xkCzavpnG3w#YKK2(WNKQIQ9}O;? z-P#srWUhV8yD~~=!eDg!hY(@q_e}SAVZbSHpIpx79cf4OV+stbh9Y%OSl9LuCfK?5 zE^CZlyMvr5`YS4Tn~Bc3NT*pV2|~)Kr_P812Qd2ekMFw(5+pvRP~a4Kob!a7J4KDM zUPcs&#*T4en^vh5sGr8#a|)TC&0^hSyifWyBBHT{`NYS!X);?gOstK4VSbj2WU@38 zON;qK*1To##*PvbQFQ&41sV8LDiZjB>v4gkN?~y+bmBvM4e}BTpf&hDAKs1q+Q_8e z*^78(LHIwy=5uM$+u^cZb7!WcD`1SsZ>{EeyP0xGm>-haJIkgV7>Bd1zGM+#u7Bhv znq~e$KBTD<+kd}UfSsES(?eaz%ZY zz`5cm>~Sg|6H|QrS+O{p@I&O_{$4hmNIOf#x+?BxXLE&u@l;MTi-m<)JAVJf*!qD* zHW*c=+pQ^?{n#4B)@~+cFaMD_kw?xUc)3{Spz*tq)}g(zd2zTJ6`!^R5|qKjaur8z zlOHHj{e_836!u2j)^qHMYCEC`)`BzZ&;4)*zH-mEDrqsR(Yc6@Ly@jy*?F!wa!O)= zpfx;%9*e)sMJjj=Aa1eLeGSO#z!R%xs0KGECs*vNz(x zwa)an5F!SK%rx0SF;EDd=W(9gbK)}wI?+e97(JcI>5#}`Iq`5F3xP!E^$}S5Jhxj? zERF?Sjsmi%t060OT>1U9%A@ysmg8*X5Rqu6%)&%w4;=>Tyc6SRU9Wp>=SK7Hk#IjI zjw+wg!t!vTl!G2Dc{}Pvj=!tZ;jmtg^1U$DXrWww<(f$?pG(BXGe&$P)Wa2}F;-FFGszo3N0N#M>Z6GWu}*kkmoIqdf<1q`Z^Y%l^rMtj!?%@ zd#n<_WbR(pJ=rk&N&-xKU* z-?_N^*X23zPm!6(YY0&RB62L$UjJN~&Bo5*??Z^!$hIU%I0A&l_+E)JC z3a4`AoxiaD@4Bu?Def=ayr@83%AJ4W54B0rN5r>FKF^JGTa_|8@u`^+O&1X=<9XE! zSOU5vYY?Xm<>8nFmO@UW+?erRc`byrviGF&&2m8uyvY@XV)j#r5O;4nLD2ff$sJku z`Rp~~@zM?B@E1#8`7>sX9nOvgoGOoQ7RC2_2x8K`aW30ZsAlCZG!8JN&c;&|RT*W+*}SuNH$6&u zw&nY8%g{O-@*{V4WrnpI)VJ$Ae|~}>`EE(YSY-3+(xCI<9Wcv`YGTh;TNb%NU- zfLnpR{SXL6%u9OdvwogjdIX}M=)of@r^lqo{Yx76qN98SV%3*sE0 ziAG*$T|hxZQs#uu6$o%P(NSY@SersaEDJFN&yGNuk{~rYB%?w6Snlv$*UUF`DKux2 z*a{m-h5hf$VO2#(40vn!FCi{yXeD}_YZA50#WjbjIdFJI>Ljtiv#;pkdMRNyN=O`z zr^!eMFW1KJ?Aatiz{1rmBH?z|_@B6ca_E%L?<%sjD~i6?ov3%oC0N9u<#@{YET}4c z9%2-_Z$}T}k^Y;w*_a8R`H(MEGI6*mvVlRT!Ns;HDBZ0oM%681PmI3v`TTI%m;JSVZUp+6AuRd^xdyy;OPCx^bY(771;fku2Va6z8Qd0f$Q- zRX2KxI`x>RiFn|VAI9&J@Ux1ngj4>*5@HE8a5O}$v%RukDK3k;g zIo*I+Gxy-7SO1lig7^pQr}T(7s=WAp7AMNq%K`R4c~@8FtVdq`gu|Tia85$ke1O(q zwS+H@b)na@{y2>gy7rJd9fFO{;50m_G-yUV`KnBJl?G|f<;$j9xOrjpn>L`yUiLE= z-gpj9#*XE^k@04G@o~h{^bT#|iU(&&?HZLs?Pf6y=g%O=vb&5aDG|vU&K=@`Jl|)H zl5Wtq*yR+fpV2O759N6EfcqJbMQy|batUsZX|sqpI0zelplQ#$#7wq85BqLNV#3hQ zx}5zJ6ivn!7VF@zT@(l`q=F&Q!f1IP8=4M$M6fh#lUAbSb%&!=wj@1 z!a<$b=pMCpk6zrrN&1K|#W-h{1^ynp9~agRLSdhHRDUiYjpLl{N{NOy9bwVXw#knf z(dX+}oN@lx^Y2>ycq;;(@Ev{D&6yR+v#s+TWxX*J6%wQZ9W8E%x#wt`tooiyKeqvE zp|!)!>FMx{^FVsTVy=D03#BoMUu=;@tLMyFg=_6E{OI*kkhj(>la50->92%=L*gEI<-tv8M&ST*Z?kT`@JoDj90^0!Pd*>lVcmkY46q9&| zyT0qD)>=eJ&jnx$@Pu(&_wz*TLkmht-9sMB`7s8Z#LZJ2mG9;K+)-Z90H-=?hS=K9 z;ZAC%yZmD&mrL|(T(5dhUhkBjQ`8OO@f{PKJw>Y>wp2_;*0(Ra=?f1}!Fp0}oa@M_h24)PFxuXFGLE7K< zjKuw^tzl9~5rW(C+DluJehqUyxbJ(58${5-863~5-UMA<4+35|-hM1b(|OcdI?UF4 zP*@HpHu;rTq_2TsF7-bBLg%j;#FF@{(m#`A<*gRxL*2Nv+80|KdSf(z!;F@hzyCnT z+AABSnmy>TJYF>n$RTzr%upDc^I<;RcL%=nM43yW(6{?H8<#?q=Fsw2Mr=CXt+2Sl z=6x%+;|xwGBRJ^9&MK%(PlE`Rs4QmpqQZ`0?y*2WP`@z@+wQ@{l`rPWs^A~)x~@ri{w~7=8!0zL+K&|6|nhDn5|O$rBlj|0l3=XW-27K*URFEV|AI} zu~qLw;{j=IP!sr(harWJ+IZL$3B=+Yh1)1Rej;oHhx*Yg?;Pb!JoDbRTdZ=(53FuF zeakJk79M_l%XXH-Vd<=__R4cU3d9sc^uBTLZWg)Or4T+3xJ?o@VuR;0XhSU9XaWA&n6>WVzz}=hbTcC-!<$3na@SX)nV+#cD+K6#ogg} z-ucJrERw=r0WowFm)B6WYvjzNSfDelUY_V-ZXwLRZUiS6^-4)49Rk{2fLq>1#lmuY%ndNXHs zdC&`#1@_*-$yOH^-GU3imN~*l{c&c6ts}R-#4y{fxrr-Q3po+R=qG|}i}n6NxHwU} zm7%p>R1iA_25x1UWNP6?s{ShOx6(`wQ6dgvgS|3>Q46?Nfw0+@bA^$39!f~=yR@}16H`fEdnT@M3YfW0<;GvGr z<``TE8vo8JhZv&m=S(=D&E_c4bUBzkhp<@}rn6LjA-GbkkZ!sh9G4nj5An-^_1g`J z*8sR&ApHBr&%58N{d`CKk%*S-JrChCvMC>*bTTg9l_l29JZIl%`=b2VCd=$UKixN6 zY8VAzW_zhyG$MI*1NnQx0qT(AE=JZcbb^)JYuC@q_xG4)q_tw8(nteRZP7zyBrogf zR;p^*?)LP?G~M~j9(iqZPJZ9IvF{WM%w<(i?o3VWeBdY&AZv@Ez@Y$A03cif`*Amt z=#^rZT`&_efqr?5w%B3K_g~lZ^&=xg> zY4x4(E%xlK?QHWnP+vm1T$lr~9H@SgTC3I?)a)g&&U4yq!EC>OiGv3O&)hCzA(pyc zlVzBgHPmpAMVYwn*dWpYN|buI^V|*3B$kYtQn46Ibu?<#eQ+kNr_oY2-#Q% zIv^gOUmqDm!R11e7%Vr|x3+6N`MqV|ZFEigwJ#O)UUJKvk;*qHcb z@OzeE4ySnP5NB`ERmQ38MXS3*yK-PT;m+si$j_!y@I{t!?B^)3sz?5{$l<=pv8n%q z;Fo>3${vb?ePy~_4LefDQ{-MaQdHzfVf^XjZgkw9&!-<*?pZxWeIi_l;pOrh$1*6z z^?r!^0{@u;K|6Z4eP5lTH)sf~HP1QDS(0`jNU@ai{L5M0Hb49tEieYjYJTV7JM~PM z#L(aQGr||t!G)}a44KPhw}pj;o8o6>T|bfYGph{Y6iTOf)VK(83vmg&!7QV2Eb`(3 zC}Pm;=8RnF@zW|7M)}OAJGqToFm`E}y~TZu{bvJ=5(y^=MFE^ON;=(lyr`?do5XpU z{eCXKO1#GzvMTQ?&U_TL&@M4;&iqy^02UV~UteG7z2m;`dghZxx5ebB=cLtAdH?su z-ap-fZjRnBsCEkJ9`q5Wrn$VLdbFp}tksE?$l6US&`pVmM2)z!HBipJjQR1`(Wj@7 zE|$1=x{wDW^_F8Uhhi0Wezd?fTMB`WUNX@2UU+dghw0nk8CUJlBE?;}8y- zNYwk0Ti>H#WWsPa z(`aOIX9jTfv5AL6zBHH#A_xow0!ZDlc71x+EIu?4!-H-S`dS`D9L~8~8B3!7 z(js^@Ol)#u&^<`|N|804$u+ar?XFcxdc-J0Nc49LkcI*7ANX#>OrS9WcjrT&^RsgS zrlRFKPpZ@@0%KQIM2^v02_z&%NFMW<_;dCIMGX{)c8EAS1@sjutnr;SrQn}A*S6wF zO>)|t5r@^sfVRB@i+5RyuHiIvg_f*w{ve#Y8{;JyZ9F4lc4h=t?vyGrXw&upmg~_KY+?X-1lDiPj?)cpAXblv3HRJm7Y$-xz(;`q! z(#SKm^HsZ4G-7BkQ-~z;7C6?v0bY0Vx#!IqwxidtpYvf<-M{P;o1)2uR{KeL?WNDX zh>D|+pn{aZs5La-LT;D1AC@in0zUuwisylX|E3KZe?c@brrCd~URLHOUL(|%<!1h9_$lOs`HNG_kQBw?wUyP14nLaBVzf0e82OU-5%$Vq^5Gsbt-JebZ&jX*?L(5(c(?*rm^W34rV&j;HQfpFZ2zV3& zYcc;Cishl$hd9P{#Q>4tLlywbW@VTHf$Dnh8)l(S9n5je@91>k#{Jx>b>IQD7Jh#2 zDrna86b3Prbf~4TpCSnnJbZ86V##pk#2GIIl=@s=*f((w4bx?_H-%{0B3HWgm%7=@ zb?KFj-BfGMsB7mjr&0>$m8Tf4G!FMNx6Ly%tnCXVl~Jj@MLaW=fh*?#_jt6#x0A7Q z5Vx93IqXeU?M0Ma5-=jS7m@EI@^YdCK_iyqWd!h~4$R8-NHwerN^P7NN(0bwA`n9@ z9k{b!NWueW?-qlt=XnZwVqv?(Ov*(qb6PD}B5QBHoOFSg%{;%3$z_Uo4A_;8Y&JDx zj6LWwgYl1TAJO5Bb8^jThR%6Q!M8*Alt#SHBVlM9A~CsDT)nP zzCwxH8hin_-3KM#UkmaSZ|%kDcEp_cny@l@{k_v^K|gSyWKztP&RHs1*PLcn$NHnCips2fxi<-4yzv42E zW4S~rzez6}ySg2pI5H8_;gQSZAS)#9?uf-O!$WaO=1e{J15*uzAsw3~COI-d&!1DU zGlSt$|9<9Qr@B@}Uk)wd(yi2>dLS%+-&1ceJj5JRHi_hPniZAiP)zRJYP!xC!SK5a z%i*q9^g_l&%XLS=Ab)K)G?T{(F3BX`NDu3d$} zZrDPI<&Jqz;^TMjs;Im&T?M)ktw)SVs{tdbA&3Fi#sKdub*-3_TEO`h2IiL&HQoLW z*1aQr=JV8IKF`(|Y;I?mrSOQ&aAVE#AlE+HBrHOW;lg-|Kt)*dA8KgdWf3BRd58q9&e^f45olBl)9hjvxWxd zPY^xKD4NhJkog~8MQR1?-d%-3Ul2Vo}%=|1r zgMICSEy3rDxadIk5xG9gt&t0J?G2yt!C&9sQF~I9FrSA@9a2nUB^~I=dt!`^&lmt4 z&ziM7i6!}fDv1ew;Op~+`~JcA&o_SV2cPRIaYs6EJYC+hMTmmzYoCg}=}mFz71-xf z6x^e}pXgFS+@5E_8u%WDjXaE5dfsmXfR*$;y#>JXwMQ1GH9;5Z#L znQ8gw&sScCSk+^BV0686D9gX|;i9XEo<^Zm*3Nl0B?^^G@|sh4cU>5hU_7tz# zi%C=t{EWLW$8)d4Hp)6FLukr8rXAraLmro<)lvsbMso02iO?MR{& zC1Mp`{QKwU5N+w<5|6$-pK;;RIctwrGmRZ36tgKDQIm$x=d-g_zbAj~eolHtK|C;{ zNQcktoHGQ*YhgYQzVN}<*9TB78lfT``G{+N(#TFVLl7%`zGNKRo_4N0~aTbdl1piULS!tpEG0h6n-pj04oCxJicq~ zjqI0d`4r1is)!u)BXWQ&TGbW7WJX+LJkJJwEtMuCV4 zmjc@`5d!#M;vRR5&lf(|i0oKw0!OQ;)%YEH-w|2)Jmu0f1&SF38qYCt$Qo_l zE9VtSzcMj=T~YUBJ-rYj?4nz$LS(%ny0Gw~0A;*V)>oF|Dn3h}>r;RB&(9B*EsP#W zr62$EQsh1h1<3X!e|cPd)X$JbXpKc3F-oZ0&zE(j3t>^*6IvPH@_ZpjI|d2`undUf&4ZHm>br;UL-y3T4%1iP~S$|nN zn@JH~>w&0ZXiymDGS=6zCmX$E!r;>&8e~7|?U-w1jS;(qehtp;I8S<3^E%()_ZZ(QRa-&38{z2ljjy|#vFvtl0_8rH*%`f)J^ z>sP!Y=RiL{KX2N$ZquSMGO70pr%B2H03ZNKL_t&?`)o9M#q)TFSRzu;(0jx6iMZpR zAHL6X9+7q1pd7u}cR1jQ_Xh-j|NJm^;6~F2qj!iMVrJRYpe}KyN)cRvnX}UtalX&< zkmA+%JUDbEP*waqKNT(M%DdAUiN!yx^@cVsjNalq%m~kDRH|3bY<1y&^uPc6U%aoZ zN1pkx2JiU%`NHE9-}46$;Lm^mhq)$3ANbFI{u7^BU=pAJK7F9SGH~++tz|l@d0Z-J zYrVekbXXV<|8pQ7L%N*}m=5RV%yFd)K;VVo!ZD~y%wj~L_}d*%MU8XlWiuA4xr{Xc z{WHQ9@&okzxry6JN4-=ICU75_6utLybeLN#V~;FWJ95z0kz@87#c(bSGA|=kL(U90 zq4H|yHi-N)|J9D-EDn&#!+oFi z6Os*c4lGvXc1NzKHG@{Err#3=1E_zcG~SC$;OPotXjDW`Q~Au_DT zqIM+)Y-c@sHWOSpOt+U{WAs+v>yX0{yW#_DmSn1fZO;z*Q}*%=5_ko?qg5HjVP>9aXJY*%mo-l zcolm)d#1$VNAxjy>_M=w8o8=~=mH z=o(wLv)btR2?dXr8b8EEYm)-_48^?=4On_aLoMG~$g{bIRJLc`V+V%E`1>bPQIA}p z%8`X(PI*x#)|yqlEoN(`+7>muqf)$(_EJ*DMDYp)&s=Cd7O^ekY6>insP9IS3pTb= zc0OLY4Sgf6^*{iZlQV0qETFkGtwxgzLFWRr@tKvh!&(gK)7kBr;RmmJAfLzjyb^ui z70p|zRbP=1B2*ji?#p6br2 zRxSZUl|J8S%{UP1Ja4VXa6wP5LEbVBxKmsnJ)YOXJt5+F*53*?W@uv;d-PS`&y8z* zFnZJ=+8V~^gLYl8HCclL&0}uzP}r}?#m}O+BHrn6a769h`yih8fg|f!o}1X@01@EN z=Mw`<3R|;?R=QH2^}u}LXBm2ma7BXp(Y%J8%MJD{W>hY^U3dpBC&58*KX)vKddFZc zXVWd(T@((KqZon5jpvCcqi6{wCdDX=@lmH(Qrj8zW3Y#3QDV~%0YDHpqCdx4_?ZtD zW-ZJ@Fe=R86+RE)ECq$aLBiQH87F!)&ig>?x86#G=v9xQ@*wpvd8FV!qnEDnRdtZL z(I}9;F)%u_i}UkCm=j!m5AHn%+!fgaEs}6XBsjV&MNayhOuJi3A%bjA}6zoPmaQyvy6Y7#PR!cUboy5vHgZk21IQ%tZG+M)& zD;87ph_O(?r+=!}T3pg4t z$)gS`v9m2M_dBjO(0T}zu);W@a5M{1-+ezjnu5LMY7whjJ z7erKEN2iN9YQT3C>M7Q*pOM1-ta;`$StloUJ>I3!8~aw))1=#7SFd^eG>6R{9g&fa zZc#Ige#IO?NG}s7K3!p^SaTJTDUjwFeH#7TXdTA)Fqiq)xUh5uDas}>3Q`8FxRY5M zd5}ar9lz2jC_(t>Nqn80V`ltT?+W*%#66MstXu-k6$A;1dPBQLe9dzF{r$t9H-sz| z3B!oWAPzFNwk0lEaeY3q>`!vp3`hMnt}xeJBjSOQdV9oGx`m_OxO-R@@3(+)HxdGo z{uzM+ok2Pg*F;jrdz}aTvx**t5%uWL_cv6Pf;!SNN5}QKAYz#J1DIh><7~7+rN{RU zMWZ4zjC$*p4_`tn$w;t)rlZIoAqp`7&+Fc{weVOPcOFceMKp++TAbA;j&X4xBoPUq zDb6+zqQ;6EEX8cO(9fPPqbeUd{7)kS{HJQ*{2#5TxrNpR9~qTC|8wu1Pt^2>Cz7|wjh&luWRfKXFAN=h&u28{`G(HGrk$o97LRuiGfhDb5ROp# z9Pr}A+{VC2I6$eK>m%#3aFjKSZtslKY66{?i60JODfL}^2lC5dh9kdKD+@K9dYgK` zaZ~5w{zOCuu5-J}&!xH0?YD7`3T-Dw8Rf3@1EsB*ox+1Ivl(;gYsa9ol;ycxCPpLO zP&iO`axB(EY1p8h!wcd@1G%ONF{%ICU`UGbT4xrmz61j)SV(NLCmQ_#!qyP=a0)uS zvbfG-dSiAYKQWb(CzeYh2L?EWx74BM$RMlrNW& z2h!HuLVOLx86zhS^Tcz<&|=P6&rGND3D_vmyc841zs@L&#LZSDfd7h~po$b5TZJML)JrKlUntEE zemEHx)#iT2F~F+`{#-dMutTverBCxjsrke@5NAcp&%Xno=giJ5eCt2BKRBW$;ydVa z1h`aQG1ZFa-LyldH}-~E*-bOIJ{Or%pJ@sfHrk1Z+r!NaBkGJzfQpukBlns))KXRA z+bOD`;3n?#bk`bW9r&#rh%p+(DL^a7Yd!-iT4|f4cE+=a3_q!yF*xAD$+2_oGH9y4wuOQMS`0(ec z=bjnWDgtkt%5a`DV4e|PIko#(exao}D9h(qn!M^Obd*3Uhkl#H%s8II(JkV2X335M ze`nZNre7fCjFg}tw%8sP;GOfHf`hYuG-ml##v9%!#Yy@^=4jPFLp0|*XFF>{hmq{z ztTXgLI?g$3=@@yR?G@PrqSor(&+k05?ELuoq+Vz)hV!#gD(z!9@41ja94=b~`zt1b zc+}Q39!xg3!i9o1#ma@G?b@ODv2l@E16KVmP(;q-ZG9U$uSwfkS(*ktj2G1{Lbi8{h|S z5+Ml8cfnS;nzaca9mog_KjJ`C_F{@XLAo>QA8TMnvvzMS&Yi5ih4BSz#-KRBS3P>M zwa_(&*x_u-1#p9_7tXjzD|gA!$VAU~MV|U3(sGNnl)jHP}$Fk7u5r$ zYxR7C%Rx)`C3_ODn7x<R_2vE8+S2>(bk>D)6w`?bV_Vc>q4GOVJ6uYS6^C2Z` zE|Lbf^Yocd{&jg@4zy;4ZOt(adQ>OFMQV87Z zS@xqQ*anOB693ytC_0=^uX@@2)f#2rm@~Y@_@kmb9OcMK@$*46%v{f94qb7N&$aKt zBoCMw2^+nHO>23@ebqhJ67iqJ%ep^@AlF%xXjrI=AbqI{GhwY#-!uGAGO84QS zC`Zzr4WgKPEbx}aOsO({wahYQ2l4H0g@*XCx#DIXbqTvu=-DD;$2_p|A!1@Csy%q_ zAI`jD@#;d1vNqlu&lbq`R`54Hb)6U6ooX8EQ1|J zmF#o!&M@D?z)f6uI}xL|TJ`Hn^wawO_mghM1vbQ3mu)jqM0^ApPaua;OY3|6xBuub zgTuM7jC1v=-mF~hb49PInqhAx1_Pu7;5A>BR%h$V#jIzhaKl`&gx++(gQAlZOV-WM z1HZ08*=TK)pexN=IscjKp^1W&Jl0Rj-Gx}jYY69{3YS>$jXt<|r8~2Aicn%fm9ZGr zZ|BU*!kPR~R9n~^NaB&Vh$;;V z8cQ@-8XRbN5Q;A>#bHEhYpeR+F?XzBZy0UFqK%PKt>Q#-hHFJ~R7A}h#wQXoWed<+ zi|8Q0j+wibfTAKRX3|^Z@34@uP;nnQXOQ8veOSA$GPd9_FgmgC*_R1L=1I3$lM^0S zBv&TPj0cWhLIjxe*1}p_)cv`vP5R|axWXlB-i;}ysGgDYiJE2TrqiWx{fxlOOzbq` zJo5?B@b4(Q+^=PHCWS&9sUQDr@!fG4p7r2af@^HLpR+%YB{2zr6j&?Ii3eg zsoF?qS?DwwK#W8u-qGr#$mjo$q%d%Cq+nNjWnUF>T5fIb?cSvWQVdovaqu%6* zc~xm>gCdV#vynW5B5qKNG`J*8d`87Ur}! zc`hu$T)a0kUsWACIw{bxOx7f#s$+b0*w2jt!GHhvU##A6yTMw}B+{G|H07&EfvQ3C zGS*DJcYJ;Q7o%U%!%@t2eLfhUD`tLzBCvvW%QY@s{CkbhC*}<+jbMVNv0xvq?9a^G^FN`Ck=Nq>_n+~~ zQ92qU9KR+V^ID5eMel;%iS1bHl@Xf*OC^T1vJ%n((^@s5;6=Ad-Mhh6D(!#cWp@^u z6%;BiGyb{IonJ}R<#{;zIl%uHHm(xEyYt_rFz{nYMFf=7I8k2+_i4H|=UQBhwv7|v zpK9s8J&HsArr;a`E>z;tsjVd_!Qq)UJ(tC(VvTc~P3Gs*cZn(Sm9*QszhHXBBu!tDG4Kcmc=X-ExqW(HKYOaSjcC z|5^2onT7hUUxi(79Jt4D6FaY|mMS~zOSs@lw6vcZ@nivlJ3q$lcAhSlxVZ&3u zZV%9_Hso_y6oj*Z#QS~tM}B}uzL=9r5a&=Ums`GbNgV<6Y)_F*K5NRTiHV)lRrtt^ zND!~Ou3{IkBC9SoU%T!|H<;{v+{%d87Wm~86L_dO^tdaSKY@sI7u987JT&>SMPL)br&j@$%+1q;gW3^6kV5b z&YlBFV`3$$$u8l}K`il%wqdOcu`Qa*s1Fe!v)JnS54Sg9RqIC2=ygM6Y!Z$-ExuFd z_sfA10G|=B(WA-1ph#iTp*@eH`lZp8Ll16$<}Du$fE3Txw@#uQn}_uFI}BGb$u&rbRkMVvCn})f_oU zU382#ygrNhB*l473geXK?VvBRY7Q;N7>xixpA`fG6ocYC|6L~+ca@57L zm*YuflYMu`Vx}tHB388)_5CxSqQ5z_?UjqMGbSm|q$Idh&6Pq=*7jE)Xwvq=sO?y+ zKCYs`Oj6Zid93^VXVz@hRTReN;;s7XLsYW~HK^>%%=vU9nzeQ2J#JAYD3BL(ERDRz zBBqGq8a>PctyRrFpUFCKg`jN(#_<%UN3>6%ASTezQD%OF4KTjgftxjQYFvYX6jzKB%c z#J$$Tks=nZ{}2OcI28Ge2313g9x>MnG2+U#kwI$qv!i+9?;A+&R)VN!CP^hkc#Cgdk~`*l_M*39>LSK2 zhsDyhoATj+e)CDEVV!MG0Ua0q{24rj;VN)Ou%w7M%=>ag+i4c~mHlpW!DYYW z=OVn~dMJ?G;v!TG4=SE?W7<`MymJ~xS_`M5QzW1iQYB%>e9wei>#zCarhEO%2$;3( zxj>J_D*tTps;PZZFi5kUS2U-PntIS+ZO@hK{$%f|((3)oTBG-!+iSKc5=a#De(v+V zOf-Mvg0~_8U+DP!yxWdZtovIcYdWJi(?F6lT96KiEgbD!v{;H=Tx$O8#@>M7Hxs~I z@vNvPy2dkNoTn|$p^7Y#ee6L-oohx^fC}#W#(m#`0v=H-q)5)!{_X{liN0s+f>XWT zdWW=u^-Pl0xZ8N>h&{wXd1g8h)joGFx`Mg$66aTAZLO_GZN<7ASTwRnjk6>oOP=Rp zWF4a#Nrzq9Fc~ALY7iX}VMHpAF_t3ft)Q4MXM5qY9$SEB9=~2k3EMKqIi0BUxYyEt zRB?xym5u282BTgxzucDLdE!0MBce4O!>^rAif(MbTk%~ltd;$umJTqUcl^r)S6*jJ z&ILsTpUzS`3!vf z!o>0e0}{XQC{zgaa|bW!sr8Sbo^2lL~PQF z4Bg5Y=kECa>lS;x zi}}nMW}lhfM$}_uKYT@z!Y?BmUR$ANTPu{1*XYnb@Z5Lc5}0{g2j=mgXFizs#GgMO z<{1e-*9X5V1u2EB6b3q%cq9L8#EURm!+HW|&{%-~{M;~$p~2_ti*7FCaw%TKM0xz% zLi`+l<+9BTRMhr={QH?RSh&BMy3H#S&tKoES9UfkpS>{; z6wEHkg_x?~b6r)`ie>dr001BWNkl4$nhW-wdszi_o_4HP?{jp>uaqD@DrHBl}8 zMmeJH`zeQAW4`js%nf<{%r%I}XNp+6Y)VIEG;j3Nvu2={v|&CEH1R7(_PGG){DaFW z$cDa^(k`57IC91uM{ZwcvAbdV0w$o>C?#@hoejt?G<%OhRzE~${}A;21Q^=^%KiurZ|`leFk=VCQD!z(X-W4;+-z`Ht^x2-qk%F3@rx^D`^+n~(&h{&$X zxPs641lBTt4!U@(ggcpEt|k1+Mfgl2PY&1L_1n&^Pntm9_jEj%Ia-ef(}^73j_4HZ ztQxwU;+P!vX8cBq3KL73xuBp5`E=|E?|>~3YPiPWQeo}0|HyOCfz#r^d0ZFO`g=%u zeh0utf@)JbcC7y0M#tRrJyhL;lT)O46}1XlTft#FrgHF^#@=m6q? zIQx#lXG8@Mjaqa1!aXNIOj&2mFNgR!FmHg!WQO6~?o!eO+@j$w;!C>3Ar&7ZbHy^R zNB-u#1IwNHm?AAiB=ezrpXUst6OvdU0Io!llh6@JZmq$RrenKxw5AxiaJL)x_fPHc z0%N}R_d8=j(OR!N!7}@-YWxLAobi%)zTRq?QzH?&RJ?iBH}N4Z=(vc`1#67G3}3dO z=-3s+@xLrE?GdeTVVU8c4=(o9$}`61D(T<%&n)rBB0HyRUIl!EZ28g*12ehi?JlySz)cOD1 zG1Tlmdhm@yms%EN&DML5r9E?rdm>LQh;chN8{17=ae}$9jI)0}QU8OHD|1EsRO=0& zYmmOOD&O5j!g0?U0a`2POJ&%E*Zd{uuF^Al8LTBD1-No2QMGjwZ(<-LD? z@cDf3`Fxl$8QGP8e}9J%fmy>=szZwG&1>-!8J%9Umqpb3S_?LxIA26wi@W*E$e2`x z3=W{-aYs;?pV-_<@o*YR{1C2c3m4d81l+6(TfTAYgxG%m=NF^<{5(lJo;`p2K?2yrL7dZLzvo)D-9q zZNx%iaCmDjg?$du+Cyl6G3cbVs4W?>mG=xz(U1$poQmt~3zJCY>KTc9Pwe#1_cydDuFv?*%8S}RDP|J& zx$lCvW?+LvApf?g`&IGG`20Vg3)huBQ<5_Fd%X@PW*LPH=shxcd*AV`A!b<+1+LG5 zRbQ)SwP}=Vq#32aWY4+x+!;Kp#^(c@De8C%Y26wPP^5IZ0L#D~gh5&78)sb^u@%uY z5nr3neW1Q$zVZ3`;OFPAh=|@V#@1vF&Bb6ke&>w7xwXg=w}UK|GyTk5KK_#tR_nea z@4Pk4XX0labqwqA*t^_#Y{u;KnQ)tEFz!Me&zjJ#)#ELjVTzmEu%Sqlv}3wP{n`}Q z)dA^5THg>DKG!D*PV=ekX(J7*mXcfzt8OZ-z03jow4BeZxYV_tAWn*qsv13*F)9Ep zj7#Dac$r`@P9w;H3*W5y1QHqEjLUsI-lsWlw3cxp4@6=I(%Qg%-}w3a?;!9o|NFT^ zgqsw}oTV8T_EDQiI9fR~S~e*-2(nDfMdaT+k1vCOS6{trlQKX2f2N9=MgBbDP#;{N zK6B#h^ZB(*k8`I>ulh(d_H0upBSs8s{TvJQO+T)A3bU!xkT&PytR#N_{JTpEcAD{Uv88La0#aV;lp>XSu zUKrA#+Oas(TX1~O2QWeF0v&u`6eaou!l;}iVU-lRhB#hZj|dhDBh4(%{nh|=T-U(Y zpD$eF1CasHRWDtkz2o!sABc2BieEf0pU=R!8XObXSDbaK4S&A=i$CKJx+pG$bgO>QF82MF752MNdcPCZ><%Ake-L}Igs9$*;WBA z=CvhqD4L}cZ6#Gab4;{#L`XM1DyP9r9<3-)Hh*S=DUiV&BiDk}Vh) zd~A_Ir9zioKk#1Z^nKhR_x(bI zuMn_lM9Q24Tk-rO^TTH4tY(&XtLASPYq>bV>GI*y*G?SwD=&0AFYUHi%0w^;(X59P zNn+9Kz7hKnq0$nShnGtSZ(N2fDzQ|laNbk`l_Rnszdz=g8P$b}AbHlr(6L>Ph(fRy z`OKY)g{kd4l0vHQLA+8OJXa7XVsW*f-NFm<*RE$)##}5_7u~sW!R{ptn~7Y+Br+F= z`>!YjiBFfx^iDU0AF5z6B6!>@Lk*`w@ugkdZpJ96GqZ3z%{IOZRS-B))4jzzy;%H6 z5f*l_?K1`)8@)t@G&WIWJBGDfJwg;d%xhU&F&7GESP?^8145!=i9u|Y|8@*vxCkgB z1zmBzES7V`c;(V+xnn(6VyJfHC{Gqu@!9tn*r^cn7g@C_PH4(P3)>ZQT1LH)`=P4L z!f}&9IN(TEaD+DV3=WK2IG=WOg|HZ!YvH~h^ue54Z96wFUF?}le2O-xw%sV?jnD@h zw}@y#-BFU!702>2oplaivbfd!ZbabVu;Yl0umeGfgHV{_A+I`P?kvWGl9Db|rK3e& zxl1h~0_+r>9Yt>8(sv}u#sY@pct2JYBS0_dH9xwMk))OFaAB6m#~fR||j6+QDQGu_wRBJa6XONZJ#12rjV$ z9q#24^ddX88b)t&#zsymmleYu;;rz(@f=xwRv{e9CDlCK(H1#^2WBuab}vx~_F%QO zR^Q7tT8UHse0@=burDMMK6x z;p8$yN)YNI7#c)|6!806Xxd>G&fHu~Obe$q1W*fS*F|CXvmSKxO-DHJmrY_R+(i|dh`ubdS`i0lc(yibgSNH>n8b;TVm=Gf!i^KsU6czm@47+C#DRTF*8J|S zYaGN9W*vKHJ-G+#+O!sFoua;^N!<6U8n{(d*mloa3Z?nEB{e2pZE;q&nk5Mr0x{d$ zGbT7fFn>fTfr92!I98Ev{175$=NzOZJ?s$p9t(xmDMFZBnx}gjD6w*y43tjmjF;^F z4>NpkJQUAvkvPzM;7b=B-Z2zi71L2>BEDyRw4ywvQ+v{_m0myqp97bDDj~!RXCwPh#Jl?a z{r!q+%G%Vp04ho&-+@8*8z>A@55rH^C(nB7nI06LKF`hBi=g$mljrl`@Bj0EX*8DZm*-B~OWYs? zZ2>`^sb&xEzaPFg1Ea@cUz@^L$Kwx{PyX5AWPct;?`Xq<+*R5=L2b6G~Ue$0ZIrI27*haVo{TS`m8$$UgA)Xy!M<6-_IS3Uq<0&bD1$m z>7>8Lfb^Jw6#0kIH7bhbhWqEn^W10(Jfg9zBz@rP>#CTH6gjSGCH`++uuNVeF4}q{ z&sg43j%yhvXQLTmCMxKRa#;&}7CSnG_+=WYq@l^egphc1*BuFLL&$yKyz^H@YGnWQ z_4UQOHE0M+R`r=_{%{H)ojZhBz_%iMp1ZXo;F|l{1z>&O&y9E*@U);F^W3uL4%-O4P$)4{0WD6QdC)&8Y4xPSrEMD z4}OfMi!RWsN9{4=p6{b$TtWEhYq1s_ds!}LEv|cpue;A`tREvTiM?HCt<^s0<16aR zE6#H19c>Vy4#odt>+O~-xp8Gp2S~=sl6vOM`#xtse|NXHY?t^A$2%cx* z{{3Lmz|bV>z2|obvs%`izUmp2Am_=;(e=hT`QdQe17FoFxaZD*%ZDxV5Sgj5T|a)f zJG~q#fyq$xHcDZCUDs;~okI}RArLux>5P__o5(Sz)eCEfGYXlVox@Z|IdXRpCH9j0 zK-NV3hcokmvtth93!j-++L6O}Vmabx??=&$a-YXAwQn4k?gBd&|!k)`^BUQh{0d_g_njQ}F?Nl|s*y-ea#RJ$D5~TZ7H_LL{ z`1qN2I#;kJ3|jeRi3V;>D<}P#>&WB{#aI4Zk>wh6gH*|9(O>9g+m180Skxvuwh_%e zv=dddvE+pvP5}Zht0WGzA4`1!QJy&*FN@8_JvEV9944+U)sXH|xg4ny&cVW&eO!pi zES@qCQH9wh%!}fpF&2MbIqH&lE8RnAucF&4BWuwu2`(c718s+ZL2Iy+DyfaIqEcJ~vVhQ9)A+%11Z%SZ9UITSwwyRRLH*N8=-}&W2WM5>-dkv!8 zVinS_e*h&qsG5THu zik-olh0cCAj_1K0V(U;u#t^NVG?5oJ85$0aRAT3lCSC)&h4S~w!Z|am(9lPGFZcHy zNLUDb86LzS10+r4wy_b}-g$l$W}H7$A+!0vJ;WvEFwNBuhj)k;nzt7cJhP`au24(B zQ3~n9B`bxn-GVWBEz!4=&^-#mNM6f@`YyI5Gn>!6vjg?JmO;~%0RM5XQfLIL1(P3n zbtnEh7a?*W)yqX&u?Rc9gmGGhhYDq*5ThwIluQ)UzVmQ2OW~$z<%HSqP%atH#v5Y-rlTrJniCl2I@33`#$6T`4TchC8V(mMYo3{Vo@Aiqr&& z``lt3D-@(xzUQm3!B)Yhn5!|%ZRe|JJ|5jhwQx@dq?Ew0mI1tLgc+#*V;Jl3A9N4d zZt>&pOZQJIw3qC2uUzZ`$RcSaGfA0Eoppj2-hclbHN?WkE&GpJ=x6Phc)3NlN+4s~ zk9RrhBU`gjgzFHrmFK#K^%N^KK9^j?xJosGNtnuIMY@mcPMluR$nH`Cmf)Ig0n2(NY@~lP*|0; zqLTzA0#il9j%LX_pf^2oF*8@YZHI}5Ko0CT^cdU}i9tvVOV`7S+{6>(CxWUSe?;Ok znpsQ4;}jn+o}tY_{Nl#(gNw8IOt{)RhCsKIr7=@A#gqbyE>m5vM~p(oW_aSRqgHJ= zGF&|cyzz@Sl2sPnX<`cVxzXZoZ{+?u?t5lr8w8W@c@A(R2bUrv^TVl2aWlekZWO?( zY0$8Iq1o<7OZlz}@g1W8vnu`KwT*$-=I=@oH%@1<>>%JmYL?SGKX2JJe4>okTKr7n z`&mR4DnG+h)R4la6nZ;$UD2DC(9SH*Ay5c7u7M`X0i2ZTQg{|W^8qaWjC9%7K%EPT z{n^+S*7`%s!jah>ceky@o@fhtH(rzCjV6bfQ7aB5 zV++*xbJe&|pSE7Yxr_nYead#wr*m6%FQA>zOU*WbooR?u5R^h0W+dhUn!TqADPOge zApOaVGn_p*&V{WU^CBm*x3!>%B;hOPFge&uH?Da&DOF6k)dd>I*G$09PibwJevzR^g zVED$T#5lE1lH>FTi{!`N0>f_>go_lHRve5RB9^0v&a>tfam2qbk?9#BQ?7ZU$iaxb z6xe%<-@~~$S-u4VN}*BC!75rK=N$_bO`+;=OgeWF)GKLF4Hvv&FFMi);vR7Ug+2-Iu*E+XlmE zjkBp$^QfE^b?p^p(o`U0lg!2#?6tPYBB`2rrY__E#$cwV8fOVfR+HzaCt=fM_XYsI z=S|^I4`NFS0cpNSSE}?@F=&gCmD;aBu=~PV!ulk>=M*%#0li%qR|@7Ln`u2(Lbukm zC{B5vX8+YP3qE6`AW?fz@SVbgwI<^OBlG>fC#E@i-LH=4xw#m-!X4V%UfNfmNTf5i zX#gJcoH+u9OU^sKE&9@LC$C-9y;1*U| zsAv+c@3!#19Nd*FEq}&TL$Nsx@xjaVS!kj)XCYAC4PE+PR=8mFK)yeTc2`BG(-s`& zs;0YY=YcmmEj$ODB0Hzu0La`~e`ZwV$yN~hUe0J<#DzEBi1s|_AyHhXLN^M_Xb9AH z=F|&+U&Bu=5y**<4GeJ(@7FOrr#R!tfbe7Cm_ws<)n*o66c#)G>&&qB1JAR{ZY=M2 zoCCUnjo!^mwM*kg7{e>b&K&ElA9>^Sc+=gKC5s*_?8+)T7ECqtKZY4K*vrp_n;7Y> zF!YrlU2DJ0654~D%yZ1C!N!>G?3Bd5i8GJKsa*%P&Vcn1Q#$Fb2Q=$~!N& zpXXOP001BWNkl70W??QCY&3iqrV9ZX*5;99crlnRLL z#oU~8i!9iJSvGWgiFLk@x%BWKIqD(0VSI{uEfK@Xj6%7ccgERxWQJHeW>wkPWR_GevvX4dHpw5VZeCN)nm57R%hbUvCLG7ry%H7XQ zc;DgW<%Ab1X|rz0Az7WbBJa$*raRlBC>Ze`)c`G*Do0$4XY2!Opmn&YHt{H)u@p^Z zgu+^0%}(kQ%Qcq>a^0k!bUw#-V7q496xF?alZ^<^ccJn$6OFH0if%X^dFe)9`+JKe z9qT_gW@j0WWEQ+ki`b4k9CztSL^zwiWpt=e^;%6Y@0oDeW)KUuo80_}VPJ#%(A6;p z7xh;4mJoxxa|YwAKQpD?1e9H`CYhvZ=fa-3h&bY6Bvt9NR1SSawzo6W)k~Bb3mfMm zd9fyrJn2Ak3pR?f=pU&>o^iG|ZU2fL%Ge~&_zAZ_U@J$?99p%^r$soCd+V<{H64?S zuCBG5i>nxfr@%6t33x?qL`Dq@_Dvh;A$lU;~6p%EjSD)HND| zI@@`cDUb-Ld3c3poS@3b6X5nmu0%bdA`1C z^BP*}kq1sU7kb13B%N!W3#wQEES@1XSV!K8zK7y2l`||R^?9Z^q4iAIfYV*EM1owI=3TxOy+L2VPEi_T~IcoP!P=0;0sb=D^b2V2{7D z2>b*<n z&Lltu&BQAg6BIV=D327i^>Pw74xwTgop)C&F?zIQ_CjxKq1hMKjI7(7UkC+T@I6pe z-3a#*CTe4C)51MA7cs{A5_c-8T+}$#fHWLC%p;|1Hw+w;VhakCx>a4jHRw~Tgha2qhT@3%#Iu{VS)qAPQ7HTA zz4S!IR6LB%OQXg!d5`jJP7y|-WO-gKGyMMkjnBHE%oELbAo8%EO@hg1z*0Pr%ix_g zJ{W%#`1eKO^E~<#R0QIVWZLt)ITx-g{+{JD3+Z-q0>IEg(K(>{7A=F=eDydx?>kWD zy)_JNSkKyVG!(Bm2V)J2tB?5E>7q_Lhat0>J*bHAa8-MV|99O8O!dfE)rk3wdhpi9sx-?!_mW|_9*yE+AWX>d3*zSE?kG%O6doP7oQ*q~TR;NX2KLrCF>$dg=% zLzE)!#y%+`UzB&vA~i{53$h|7HpZ;r(NRF``HR?^s*qpi8izro@0|OJW3&B znuvVuB~;EK^1p|`ZpAsGR`1waGlcbg?pr7=s`g9bN1n}EW)KiZEEO?g9!nhiL19h8 zRtiFjf>vj!ykP#QFrC0!L$go_{w+yxM~!otUQ(V&$HWwD%JT-c2f2w?VNqmQ8T@(jK2Z;}v{ z#Ehp%2F`ebIO7HIi4V_Jer$0!wgw#y%^e@<0OJp=Ng1S0K@|j1A1Z=gMmmNY@KE>> zi#eJ@=8DW~Mw;M=5?c<4t@=!JHEz@DJXZ*$2~@_>3vh-Pe;gOnT)-b>uv``|OE>>u zT-_Z@GehL6Q`8$IrFb?PbGWm|&AC*K5?!nB)}*Ie#6zXXBxthE-hxqdZ414N`iUKD z_dN3@YB`C{whVJQKA#Jp>r;_ZS%ax!$EzI?b?rP`|Krb1^3En9GiIo5L0HbiLs0l& zKC_;+oC#+AJ^EmDYP?r&3zO$hh!25zKQuw??^+bqhbHOD50cOsRgi`ag8>U=RB=Rf z5rDvpf4-m%`1^0)v<#D~QJ!ZNrn_jhq-o@Lp(>lWmJxI$DcPE&E+Fdr3;6o_Y_Z2d z!V+!h0EG0K6j#`?x?5ZXUw{6BcEIF87sc23;Qo8TXGBK#&%lF)rCtm5PwPP*YaJL0 zG{vY$#K!uc=hii#6gVbzbg?G+-=F`(=emx%oT69R(J+@Qy2K6)k~3k2%7vDuhbCCs zutXt!V6={*z^Auu=<6DBGEdxVqbV*ZCaj`}x`(MYve6?luOkFHW)3`zp;`-Hp9`%s zW8NLG30niEn@Fu~!~)+vh$n7XJ~1Cd>lfn`NvM^m8QbU>*To!qCv|G~lA=*}e0{#q zrQyDBJbp)=F(i=mUl-7#kN)Smaoa@C!OB`2x0ktwrKUR+Bst(7BQWcy$|MV4tL&G^ z1u#38?|Z4VGWSPEDTEWP(FT`5%l>t#7#rSD{Uk#!+%K(Ze5jC@06^x%^gzf22BTLN zZw@Z<@7PUeD`k$`9)xeV*UrQHiNBBkUrT6^XrVbltc0@Q3niL+9BSJUg7;F2xRPuF z9;$>Vo!5cDZPmyXqV8CTCUPRN27DJda6DW`y3odeE5&OVmO|MRln;hRU;4ekoeW&TFo$->D}Y_ z{?8}@Kb(&_4D=K6vJ6g4P`T=ixtY1Z?oo6UGA@U>$8b8L8gl!%5&I{iI4;XY*BPn^ zlw9;vq0}3n*<2hEv3=%2gN2(mEo@XeM!ftU0mi6V0*Fd%l+-(i#_*+nw*H z8&r2D3V2RJqxft29af%WlxZ+$woD8pwem!yRF1F6h0J2+Kt#^WXp!x_JxmMY8{G~H zSF(9qG~^`aHJ5kkb}m%DL{?nhA?lTJW(Tk8CwPu;{BWQ~4a`_o=?|OlLGl z-g~_>%XMyy;PcEnqgvDbXXS#zkC+Dtu5lg0BY&aU>Re$F+{Y+acT){TdhfNA^ksz< zw6!pwM70G{t@VM?v@$Zy7KLOa6dZi{Qa@Mrx4zstr=v6%%duS3iY`$)4ih;C2o?-B zGh-(3Y=uxea^&~oFkMbULBV2ixOQfI(OD|R_7EJL>MFdWBS^;)k(avw+&8w?BFm77 zWD&(^8+R!xP~U-6@nRqQL1c?CrRdDKOw*RwS^tnUA&8 zx3PzrXQP>J^dEuN>GTus{M{$+=MGnqY-drTxgn9ST^RISjQge%sOVO{&KdtavwtHx zVpRTU{;t>OL*a`-hL&412k={ot{ah;Zl@AxDC?Og z+2WmpWgO1DTmMTsM+2u9(G

oxLMs!R~A6*8#>&VIB8X}VEL(C9XaNcmCkk$owuQlUgGVnEu|c50QmMZcx) zLl5%6;KK4LOs1oiVgQo~+5PpX`c1j{P_l=x=m#|Cr)(kxjrHL|+WL&14BOTdV znr|dJv(D$qjdFQT*fJ6wp>HaKT3&=GHtJRt0P!9zfhDmD0JZK|@IdNa*X5VFHS5y3 z*FhihY4lg8DJK(YX(FJYBbh|1Av>?Kn?7kEy4~RDzRC99V(=lpmmQt!t}|0r`;@t& zUIRI>f>fXN(^QIY>u7$BG+_GA?C0#(-I;G;j69nOtj;0+-bf6pDKNH;oHUY^HFepK z0RxOYWiNnn^Ults5^;)4aW0GJbk5~9O0Bu!s*>ka6btVbZrcRfxx{NE0jwxd4ID!? z7v+6@nR9{(xP}j6WO-kDp1l%5?JW;(EXdC3OllsD9kKQ-fFuN`36TW~a)z2BXFnne zUFv3%&PAdsI>S+c(U@SvlbM}eJRjG9M0HCFx;@0wyx)~UjMh<;<9CYp{l@Eh;c8>o z1C)!OVQU+BbBLDpKOj#x39TARwGT%}tC|}@!o2I$BDajH8QM`%Lal|FMk`UFCZIru zEBSuXYT!WV;KIg=+M^F|8#n-N6oS%<^Z$r+{xJ{=(L~mQksU&p`uc1xh<-5AY#kzbbW@P5fs4(L0}+?6yD_q z(szjeYM%52d%Bvbp>eOF5YRBEn?h6tDuf=!1vMAXu8#`>#d}Q*Tz*$kh0KN5?R>{`#C2KoMaX=2w>UtbA}SEcZ@!w)-8Gv&2Zln zV8X}82V^bGdscNp_D7~bJEvf>!@6X;kYEPzt7E(_$k%;DQvLj(kT55oFcI4b{W=Gj z_iM6ak3Yr-)IvN8)4j|YcMUh;@YO)*P93S>be?OSg3%j8d&3m1`YEV@#Z6Ux4XDg* zMvuETw+2$f5~m+Hfug&)r}wHmtF`~QD{M5hVQGkqtp)1DuoAi1I}rWsNvlEJG4nI- ziGK!-7PTEenf zWuqo9>H{-*3>fe9If12og0Q?c>4^?il~|!uat%b)@M{iw2r4<(GxFy)JKU2NyA9eqVB++b9tJ;O z&(FK1nqu9b_}4%Gfq(wa>2p-*}D7 z`=6(qA!G>zj=TRd^$LZ$2XXY1tM9>ZLlKP7(O`}6UK0yW0LmbOdbGD_9)`7NS?u#1 zU2b~v`Dw@Xa`URm^4|Brg}26@2+diFM3OZtK;yoXGgehVrX$!}nC)A4fk;Crrsh?I zl!;s8sxqr*Qq{vG@mi?4Xe>r<$R)$*?4SEslRGtx*AI{h-fLk^Kbx@m-Q1$S&6oHz zp7J?W2&0ki01#xUzNa|=7*nO`+^7;c5p1dWE-{9LZ%=@PRn>k+@^WXJAgn z;OJB*$D6lA!W+dbV9zLhj*Fu%dYcOTC%4ijOAiwTRd6ZukDIR1TbPcb#wX{{8MyNE z^%eThj9H0nZ6co~FW-vFW5(#0e>P)=?c=qrC#g=1aiO&VqKP?Y%wB>#7W&kj)6GvK zjIK#CREztd?^UuiW^4SQ{dgz2&+Aj$^f}Bt>R{FD9TvjK-2$CY$9$0<6!7mI>2poo z_W~2+$B$Q-Gh`DRqe7^R-tqdW7>FheUQLm2ch!)`$kA)w2>rUy6RlI}!*sr->nVH0 zMayN5#B4^wIYq^ENpmS~T8Y>cc{dUu2aPxe2YBGXi14lR97l>Gzn)dXDi0h?`;fsg zIY}&<#-{Fxl^jA#;2fi$Q7r^*^5on@Ab5%f`5`&ecvl^q=&>$vc0^{&zbNiTssYt#+|-=W_hiE_{u z&(p!xdx$y}>R7T6C1hA>d36=9&^~d?v(lkevZgiOYZ= zrnjkMMe+gcY4l1?(td6u78%a%O@oj_;4U1TZGnl7=SM}K4)wDaIu1EVSFdi2U#+1` z2VrB^g;*LU>gU;1fn^&hQ|`~g7J5&eWQkM^kgD1vjR42Gn%{Q|VRWEyPSOc>-@M@) zI(VDsn0*j$M;A>dlGN<6rc_ly;MmW>)3d8P5WwK0r+lNh(ma(IyEG=)!(7pwAVB=sP%=K82d5c88p zrL{uf08w-}#dk|=b#_DlwEyXDn5(m2rFE z$nES14>MQ`$MMr(cwTU&@>7YM+ak3;L)YkqyRW_~nogkr03ZNKL_t*7s*SLXWsZSy z{=F8Mv@{(A&+0&?2SMUUgZmJ6r`sir4=r1+bWcmGTEP7M$aQh4)p>y7>#gQqk%o*+ z1_oNzj`fDK`ziV*&u(zbOGu*c5ECxLqrPAhW*E96wGfG^OuyyDBt^`8<}!8d0(b-W zUYBN*;elCd%UQk)WC8Yiw5&V z@OM*zM$fZJ;CkbAr?^Y_eoNI8YAKW_g&?r!NhhI1RYLc$x=0q^jKXT(_nVbELAUZD zgVr6lY+Z>ai2s#!G$Ot$jO$f(4I~PVZs*<&_r0*@4Gh0G^cHE?Aih+>CeO_w4q4!; zxzZY|p37jcRE5x{V{P&RX#<)MQ$`yxP&W8{#;SS;gutF2&!A}04#qV~d_ox3C`Xx= z#tawW-g9DH!wm_V`>=nHG#9Nk>u#j#=GZhi_?D9cB}ea3Ac8o%^+L=?3Nl49amNRj z`O;0DX#1wi-0?YY%=^Yy`^4wxPyF@s3qOB;;r057ztPKwnFG-I#^@ba>;CytKex`M zK}u>EmnTCI!?_XPTjI?)KSPMVL6s2TJNv-U4Acy!EBW>%28|v@cKG1>{q+SV#ozwN z-@uKrddE=5U3#x!B-{tpy}t0?*`*mtA&{F8wy`kiTj~a~p4fObw9C(h`mHnaoQ3#$ zz6vp1eb-AMbD~A}t`EKaY=8BEt6ea1^Au$I*D|0tMjs6yuimmgCUF@06JxbL2@M;Mq^l{iI^HJl5(SmflO8;nj7wUyTLQ6{(SavbVVDm-T*0K z-QL?woUgG9(SF}^gRr}#v@rj-te|UnirOqhPU{fPw4;vebbvZR*YanN_WhpIOwP^c z1l;#|#SwFEJW#>?zH!UMk_A!&QyO3WZbC$u^RBe@h~%Xl_}8p~Iuoh=x-eeXHWVAs z2Z2V2^TucxSVB$~pcm-6@MQ}i!}a6B$Nzlct)4*q&;R$InD=KGyVS`Xw9TS=o*R&u zcH8MmWpHn3eME(&!Wya~1Mq~p#NB2ziqxcHH1EvzgG9QD}0d!V#KuW>92Q>XIBl^t7B&TiX zQtuuwV$5--O7fNg)Gf|eNj(GFxN25!=A;V-0~+VFoF7`u;xZ@{fASqy`h-z1V z-XudUp}nLzG0gzIC3W@C9YoUA>#6C~UDz?*Vt$4)6_9GoIHC)?bzETzn&O(q>-B;6 z`-aN$Ikj=EAz9;UOVFD5euC!Yq?pgPtD~p6ym1*|*19(}k=v1+r7{o`0e$QqyMU|F}WjYM#5t@ow-q>y}b?X;Jf+#%arN9+T4m)bE`j zpNpV1jMif=X@Chhf-70`nd>0KzeawhH0nSOC_h>wzhe_c9hMv9wlUmm10=pSwV?bm zW6Hw31-c|=7%k?|IrocaEsTH`^;i)c?kTju7J?i4)uEbtm!IEc9aQKzyJgsVO(`;-+S>PY z8XK>#8r1_)l@>a!#_|5n&}nC0>mJ zBT^X5>Sx`Un=MMW2PT{-QC(7h=b4Odc*Q|3hl)Aadm`=g^`T1sovE|$>9c&TGLe*v zQ;FY!VmR2FU_xP5O7u>FB!BPdT5|_Sis{*Z=YtHvic6OtE;Zc2nP{c6@8DYxJRb@9 zR^5SkxGhU~&feYdE$-K2{*u&xzUH0PE;8 zXa9bUzoj$}3`JsOp}!z1YDin?5vtCSElTO}+9Cv*?K(>l@$7utiOE1|8|vV}+)6x8 z!7Tfmvdg2oh;@Iq6T?-tz=S%uWui^Qjy@wj#+O#zUq1ZW;`Mgj)5fzZf2*3%8USWs z@psPvR`eTZ8l}YCjV(rEm5-!gDFm6K4J4Okr*90H9|8d-p2(`BG=)gkNK1v;hHR%# zt2;FhnFpr!M7nEGTDfuqDU#R@RKu`JblFHAGu@wk-Z)|r4cGWK2xUiFtIl--I#(Tp z>VnZ(oe_grgdlW~Gdx-E1B532+2J4!6cUU*4M6eCwWD8Ku$_9Qj;b$_JGw(x4rLM* z8(3dD)=DsiV1~j8Z&Am}kOkVw?i3B`QhMO|@vRbp4#N*}9XzNd8e*g;BYPbv?bwfU zeKzChtD$o9CQ%@TMmsuS_ZK>9QZm_Ldo8KXUj+IK^bL;_q>(@XujtJc$RXC!f$fZa zg#x=5pC6ch>*uzey5#-4WdC9HoC>z+K^xy~*gePT2F^MIPaE1E6sLenR-(VEq6bMO zpPh5f|MhI6hnesA{&e82Xn!7yED}RVlvtxRaJJL<^XN|B0z?i6OK>*to3cYFe;4nP(BQZK8S9`q;+9<>!P$NY+fWWNJUt zvXQFasY*I3JM7WnT&AxOchay~>G|`uJU$a?gvknn#6;y;BKJD(aZw7Qg_S|V6PRi0 zA;Qsbe6G=f^rkBJ#d&b$qYJ(|=#R&wYI}|vB#r@-#Zceqs1Cqkz`_>RD+!(e*f6t} zOFG=z+^JG{b0$*Q1(?=arMi=zLWcp!&(SE{TXjEL_AlB4)13)v&CYRbQ^YqXU70Zn z&wk{jYb*^XJ@z_b9CaEhzPx2JCQ@dw0}MplEWv^4Mqt&Fc+n1YyvD$tj7qd~v!Irk z&tVMAN}+8~3~_fCOTi#@PTt*gk+SBU?oUdB=J{CdK@jN8&3Fi!1OKx9W$kRCZy{5a4SkC z`Y7sw5);nVDNcvUk9JRC8d~GErx@NL&*GWxr%j;o@ZY`+=g=?}>E_^apT(oz*Pjy{Fd;uQqV?=1HmQtOdl~IrWU?kxaxq?Uq7gkiAT^i&1g) zmk(&gJH0DiA9RHgNp%9llxwY8@bejjs^%7S=o0T z=Ku~@pPFGx47<{pl@&kY4DxDVGXw&?CSB394dA5d| zl^oUWk(e9oz1sJ}RN(b-#j~)mrW;j`TR1qYN|v81jQWAcb-_W1F{5Kt;lp50qON@> zZ;t2Z-odSdT8G+-(3TIA-E2uEo>vgW%yrZv(s;mSsd!xn4^OWy0kMZaytfyH`A?&{ z#Isb>vpCz$B|vBNhB6hV8O==NzM8Mad7kv4zXd`(YY8%e<@=Nsp1rCCgND(mp;Lod z43y1(mKOK)Ootg-nDEj_aqPc|z)!>EIsaVdYjU3D2B>VGx z!OWmY)@5}~iio2%M`Xk6-*0SMtyW!j zt_TvCA8>$-tlec+CR0`I%(db|f`I$yhUp;+K(ue-scJmmad>W|n2DsTPXRUfl!_$C zHAWkStTQmH0>^>K*6keZ2ikqfnoBUP`aBzv991zGCGH7_=e%$B{@9z4I2SqB8;s~< z6k2*jL;d`C;g`Sv2c(~vm*bEB`GFt5{aBf~P9cdj?(I@_Qtr)32??@Fh?dXZNVYP@ z2Blb17K)oV>7a3V3hn%BGo(~kadn~FJWQsauWh!pXR+~r8m zA^bk52qCHhbKv*i{)J!v^-uiz>%Z{v@rhrwN8}{WY#*-={POXM&({a8A3yLO>9CEn z7uZ*96ttQL>Bfj&wzeYEROFE--}Qj;bfJt&fIAu*j&{&6*Xz6W9?pN6hF+#0g>18j z#gK1P&cI^u)oTQqvBhNJ(5GdIqs>-SdK~W40qAP{^{5^Fa^HJ+u(fdUR;- zkQw>k$I+opD_S8d0l})BUBaB)T;WEdW)1H$eo!(wM&)^9`aT9Jp27*zEhzta%( zrl^OVf~f4JJE;hH7RddrvF?f7<~aN>!zIf05M&(V@4W7TYYtrZU35%gU!o|&`JLSg z*BnuXs7Tj{jWGE*7XX;J8b>xBri({?Nop}*G!(r z^BrCN5KyeOn^hL+G2bhvC?)?{QiG4PQ<~&ObnxlWmog46?oV$Ag;+w;RWyn-D?O+i z27@vlk-dD1Ol7QV+hO~ z&x-^YakD4sX%;aCq9Gc@gbl;>e#8BReyrXOlH!@YfHI_}$uf+SAsUQ0+UXI~@_N0> zJd(BX?y$~S-0XG78nO%`+fXNF=PSa)nJ3Zt7tQMyNtBao4FQq2)V#rWNE5Y5AfK;SZA z-*EAXj18lMR-W&Et@F9+{V4ZBHi+_i?g+Fze8)jOUn1IN;gw4t)K@BYx8X$Q{scCB zRHLqN97nI_?wI%EeOYdGf6x<_7-SbJ!~)fc=&0dI52cQou|ekLVv1&)Zv#a6Hk6)^ zLH&Biyc(c2gm$ zoti6qM2bz94sxrEHPHr{EJ7S?C`B=!10da;CyrhCu(0*tv)i+o?m~nv7Pk1hFEs1i z%;IoZy83i;nvtk6E5|(d1-F$geM(>Sk+!f*drnR65lKPWGgq-?iYKB6<>FZg-aK%p z$f-m>_45rQM+Pxusu5K%E!>FPbDZl> z+sGEqM*E&|o`qILN~k(_`zN6kM~%dwVgP+|CU@L~pd9DHhsVo$BU?4l9=t^RHB zQf`qA`>lD%3d~eykApd@W|P=(uMD@9du>}bSf~|2k&Mka3@08LxgV#!&GBs*o^D~Q z!DZ}EYbalCFIiZ+@*4YNi>~)+C&NUvi9GRXKg(m;KjR z-|gy9JvI`QEkerAB1cnv#5MRHv-XH|Hs`=`-1izdp80bWBk6S3@%lP&@*d_%ra8doeIsgi(7B(YTuTaqhTGw~Z(Q#{UB>g2c*>~zo35A-;V=V; z0iH4A+|4okCXpbY@liCLaA1ZAB&iwjpbFS_u9u2*NL_3^^LidoQT+Jh2Y&taSA2ba zMK{`GjYSTr`iali2Y&hG6JK8+jCvAS_f+GovkC>B4bcF8zpsek>cSz1LOY;7>+>YV zM-}*JN1)3&IMd#s9_JHrgE;Vco|r!He!p>#h^07=12Z#pD+Y8pi>nX72k-$*S$qR%&h(5nY7G7f;m@{?f0;qI7& z8J@8ons=y#IO6@D(DN0U$7Yd1+FH5C6u`;#G-`9;zAlXWMzd&?cWop~knA80*(+{( zF0r%?-1mikbQ~weBXFp63}4ZP-4r@eLoscFfxwh1qe;T8M4?;``q=jV_&hPS;rkRta~DnIcpZ_wd|h=dB(qoV8-sm{uFG%{LZuZM5UmBn?K7S?b4>OMZgb2e zjaF9da-gm#r4@mcYsNv``tU#o_jX3M@|?`0En5-Boap_)L1D(%`yHYcI?|K$;E(jc zI9HDuU}m~ILcBO4vP(I1>HUoLu%cz?+SC&tpMM2#;`hJ*fsfDs7yoJ+j%co-`&msX zm=2LOhhXWTMFp-hRc`n7A#(O;CmVz#LN8c44gB{SE?0>%F4B<~=aS zRck(I8q%iFqjM;T5~RMbJB(r?X!k_#%4j3Sp$&G&fO_>cgT&*LJsrwNA%OPSV}vq~ z-aEd2|2^&_S`aNQh#L2}N$I)JT8IYQ*;(f}F4k0IPE3)gWwfCW<^fybd>5Yhz9M!- z4i4#)4uaUruAnyg(=6wLD*i6WjV1z9m` zf)G4)J;KleVDKIk9gsa%m4?^(fup~m8fX47f<7`yJxk#rY{uZ5=a&>bt zFpGD4&f3-HMwv^IZDgM}_8ce72G68N^>UVhkI#BVs4fB9JsCSCijU(no&}qDUsuGM zG+`8G^s=3?D=LbQ&kslsL8i12^f}F~K{^5K<{(u8v=))5B53`9Swyq-BVy%TTg93l z8fVTDz_YLHZkU{>i7$GM@H~)p%YEHZFII%6R)5aSi})A4$ehu6p}v*1d-UBoXy(tz z^Ge3h9Y+wQJc7{Ux#rJrD$owbiO3dI7xb#uf*|FDABcu?IeVlj>dSh>?J8mPiqPZv zAJGRn&vT*3Atj1P(^kx*9Ik*!=esa!zL#?_M?Pz!w{CMBqiCo|a75ROw)*VuNdj9<&Fl?&4UiP`6K#kZ&Z%*u6eJK5!f_m|4_DJt$jX1fQAV&6t?;_2PM&=D+Jk z-&Nb${K!LbvhrR0;e38Lb885#52WayhV3?gI>g>_)G@TO$U^fq^!uI@xI3&`bKJLY z1qK@vV+{nKxwStV?#rVQU1(ztOLtW6o`bM|rX8>O{GMADi-IMY%VW^tIfF@IorG7TjOdM52UkX7XqXb8CxT15&7OPB!u7g543fInWZmgM)+q&dlm?^`qQsW{HmH;J9lEbe8+i z>!4>?g8{d69?}iZ2Kf^7jBpn4=a^YJqXtP7%ONMsGAEaThlt)HM=ebI{Tkay*KrzR<#Mg>NhZMm2}!n;>j$O2X!#_*&~jd8rgg z*p_9xW#+M9kj!Jn5>1u(MKfz^8`NZOV*Xr6Iezm!?v=M|wVuwo){UJwVOuVY5I<%B z^I7$=|5hVwj#}F?>LLV3`+$QYvBduJ;1GxXCC;$SPP7;V2(!k`y^77(d2&FcxUQQ@ z!}eHL+~V1gxtbCVB1G9xP|+%w^O>I8gxt61J>NaJ!&HiT;3V55*0BV0x>0AGhd0MI z^xs_nvQt9v$P3RkDD$tqhO%q^BrLEe2ltuLz5kAtpS}yo{HO6Nxu*Cd8pj@^$o!tE z=Ja%j`KrCv+I?*6JJ$ZOA(ge$Madz=eqXQ|Bn``{Jk4sDm=5nc1Wpl9xFCp03ZNKL_t)=D^|z1L&{`RF7p@*58WFyuS2IJ zPNHd$2agmfB;HN=ju@X2!NQWG+6Dg5eFTDUt?jwiD~E%=iDmY>V|P%;@N5)1-pnfE zVEO5=i7=NiO;z#n@v6@|xQ}JcUE+YuYS$2Rq|no*ao=i1WVr7c1Jvz(%y_F@_q2k^ z4gSbaO?S1d&+V%oC`6qvqD-#gk+B>DnRreOv$YZ?w%(wok8_J}gRC4niX4$4ykYc} z&CRHDz1GZhBPM#$rh$=f>vLDGxIEUd64#V?XXQbs%Rkpro0EBJvOy;jBNO-Ypj&RT z`JLh?-(n-;tkO!gu3ID##t4P^CUBY4pe7YV5zQlkb=?&6fo-le$|qF&a=`89S6Oi% zxuJTw45V@!kK=^TBp(4Cy&^WEHn_uWU4wqQa;H{5KM68NUj+sYvn?uYxn;Vm+(kKRj&*n3CsX9-Is zg*+Q+>gVU(Y%)E?)J^p4H-V^CEkBSp55}rK4d!;T~?j&e|**cNfeJ$9dx8 z^8jr?lD`uZieZj{8P1v+`1#%hdRvJ3d(=6HoS4IK-FGwvJMeKVXK6TqM+|dCD0ptn zy{9|%x-cO)`vIx7c+oee<{NqB&rb)TeabMJ6Bm5#lSqzbf8Pj}AA5YwYC5c|@l5 zHG#S6b7w<0h#(XI0uY^07+Md}!MNrofZoshUb&G?6_arqIZy&?t~_HzPA&&>*`LwX z_`KgE&b*|qhzh>G-k3IV5CeWt7_^$}iaCN*5QGBKF;${}Fa~T4)>_LEpW=|rjolA* z*<6+SIdO&>Ga@Z+Gknd74~=VV5rnRTLMbZwCSHlxm%asL}61T>=P z67{Z3(mPtbdoCV0X8<+@_t(J3`H8>%?cebE%M02JLPRh8Nps6ux8lr*dd?UD)yCXe z;=@(Zp%?(gEE1XH7CGnVafA!8EisDC8%OInG=FZ8Vq6T>N4Kl%Y90cDI)yz_An{P_C9`~AjW|4MhS8I**a^EmN( zeQ=LohR++B;lMOuu6=b%o4`;&N>m4%`N) zH=OOjoQC)N3)*6x93Fe8nn9;PE%sX{nJ#A#CgJQA5`3m}yx)j3YB9{SF`yJXTsH9b ziI4MyVB$Dp=zSY|W7?{hrf}FDQ4;;tNVa0HQcesr3<_hkfkMIf?t=sAri$0ci4Lh= zY3_SzzFSn%5XLl$?qB`Dd7fyhxZhtf0Jb0jDM;C$e+-UCjx&|iQ{)20Niu&i6@OuK5gU^oBgRm2kv8X|1)V+N( zN$Mju@n^)`{VbnxD$Js!K#KIzPh;}9A#vnPfWXm40S8ew9w;6 zPs2nA$*=q3y;clQQ4T`DYX}#)gqz&64^GkQg#jSqY(y0pAu?#%DTuYe+KWSvcz5n` z7t-Guj~6v)P$R~$5(@<3WDV8(CU!T{pg` z?)ct}PSVy$ZE*B<kDV|^LsOJZ&K%?l(`gZaHiF$a%Oz}sVTP&PQNc& zIb^SFX9nN5-l&qX4N*3kf88Eg(4LN<4R0GSLfeM(KY5tk9*wX3XZT+-M!&x>=XtOp zW$5jAI3n_XWG2oUWG-#yavWRaGh>$S_;#?(;8Oh3krR{XPhSz+o|Zw zytAYTI12^gfFTDhWWFz?aG~Lr%fSnCAM3@OR79(=NDwG7Z7OXmVmM&ov*M0W$8D~L zmN_fw%*)(nzW0_n;>6iy-fd;NnpIAgh@kU8nnRh&4)i~PBUrFZ*w*MSLIP0P?IK=k zI2A2-Mq$aB?^5Wn=^F}~xtP79wf=~}xW`?G(>x_M$tZ>a=*p=qWcK<`AA*alj~(dF|BZ8DYDG@XkTv$7!%odkkByd*KF5PvBcDD=Jna=LmJp0?F+&Hp5f^Ag(SGn%<&%h8_euRMn0@+}{FccJJ0lw_M+qgS*; z)?;(!*$w&Efa(&JLa>aFU--S1v=UF(*#3aj4=tnuE!$x_D#&TnBH)Bt+Dp&g$q@M_of#+D($gW1{x0>jG8sVy zqAH^PPQsT>)~92+Qz{z6!?6h*e?HDH8gw)XDbx&Ec~VxCqO@MQ>~3CXmdv!4%*)^~ zB+;$H;dBmq;?Kl-4ZBWVtqoOx)9m$BcX2di=lpzLz_=X^D8;R@{Q} zc>*bJ-og=PBZj5XG>KaF^EfeOMAHTFt~RRcokKbpLfk^4dB!mAQKYau za}NHu841(0K~F|B8DfA-8dshrM1kh5p518^^9~0nm_g`ywn!0XibqHpGhZV7$zgs9 z&@%QUDo(GA$9?@yB9k_S*fX}L_AtJqnsxQ&Y|OLZLA<{M&)f|nE%&raNJ@9pXG2fAKcH(HS zz*L?h=n`uL1kpc98Ue52#mvS!$F9OU-aSw>N*5m}{1G!u*P;lR#9H;yU(rBIv5|Vc z!}%Fo@A2%lyxz0c*hE)5-z`N5GGF}&r%Yo#M+%tE%(o^cl|+QBD>G6?WjSU8rQBG9 z9nlxqkfpJ15s%HN6->jN7hGNudxgl2yy^7Ktl!=eP0GHBE_ziC-Ls@LIshGl*YOdV zjC9P-F(N~nYh^zI+wCL;x;dJLFjBihJR=V_l8cAnBdJ(l?>DAQ#OoX$anWdKpL)W_ z9Rjy|Vq8`f$Z&BEpuei;upCv97rM^aB)LuIl4G5Xz_y&Ixtk^Wy`m zim&&32^}rMb&uoRJQY$@FR$pdRm((uyqs1lZPkw1r%alqc)2`f6P>i)gHCACH$2Z5 z&d*N_`@;CTR-6@*m}Iy{kPu(lyHn<^rlEzyF_VTlZkP{fKT8~Ld_H7?xv}xzFTsAq ziA*}?ig?38+nBQiY2<BaUD8vs{ttR2&rdmM;Io&`LYoslBa^o^ z#o3Ok{d(^uxR~33XeT>9jbpk5u!x*pCAm|2kI0GEa2yB5ct;*BDL#p;cX!;(6<*Pq z@iR3uT|I`+ozXq-_g5M3;I@WT7UZ$xJj3aCo*|Gb(osYR#F`qp)svzI@Ln~fnTEYr zyYaqnxJ|r{6WSW?>%FLM8S8`Po_7lK8>70kxZ=B*8|zF2U)j+LD0)O;Q8YcAB*E!u zcMDWH`%e>!^E`2WenPuOwl-pYIeQ3iL|Y90CB$Ib1(!vJ^Bl1^iIPgm;WgC4{BRyY z97tg3WHIABUqW<*ih9u z=Sfmi(!A1?5MmX5#MByd+M~X-)gQK49|Q(%N5q&#U~|wqTadJ-1&QEszIQ1~ors4p zPrSs!VWu0TehMt{;6)3i0H1wpRRNmgXwi?jubc4_5mhtIFafAK?#rqdcN_=N+!6y= z-AGw>$8!Lp!F{J_Ef;#`aieOANnE);sB>cs_FuKgxz&>_;Wf|fX;d(hJ5@GA!`8cD z?`@6{e9dVzAinT=bw&p$@7=8D8KV4MQUYX=jH{-&56Yo_nnzb8SnrFBn$bGu4rvx7 z-lFZqko!1-3SbuNQ1*RVZ)N05n$7iobEbqxjAuqMsy^qK=1C)A?J@?A&Nze-^bBG2 zgR*BJn3L)Pm}q*!X2y4FX0pWD(hS0Zx6BFeo%^lVbDQ@esS0Vb z&6wgmiKzR!_DZsl|31Y2o~fOff^6)$ zr&=dehWqu4pR-?ETi6ih9!c|Z5ElA-%Of=wX=_kyTlU;Dquq&ZU0Cx;cji+F5b7W1 z(#+kBB+ubcZhAZbWl_1r5o>5#?qu_5Y7q08F1X0vLN$MC=s=f6BBs+Vn99HW9pj$d z=f4A4^hJdg8(tNg;cy`&nQGldZDA(fu3+PU zDG$7j`$a`YFn3Pa*qQuJ3fTrs*>G-)*1`kj$jE{X@$10$?5$zWzD`d5cZ~#xR7h52 zLAvO<_Ue{*nV%tr4XeSl_N3NZV8-|)stC3vWhuRbVI4w*eT^&u&~lZeqtdYtzGc0G z{LH(Gw~UOwKCf+kV6AbKeJi5Na9=l?57cm;0h~Z?pue)5+ z{~MubIr&%PvZyF}@*>Q`jVQDr5{# ziO4cPocm2{Ub(M3Sp!>S!t`kFGS!C%>=5{rV67-POZ21L{jiycuKCDymOMAe+W$&d z4-BdU(*y%#pv zNvlw3-Jjz;Ba7HjHB;{E*+4QnUVNi(2(Q`P3bE-MAqiei<+aBWqt|+U|0S@L)pX!t z-c>d#6!!>M4!WeU^){oirwmk1Y6T1rp+v3U%1l7$hO=AE_KGL7Xs#!=E*oX4KPM{0 z0Eq9;7QN*ZF{`x7kCZL;C>kn_nVxZ`z3-bCX9~^ix&DsZV9hJ;fboEUDMT6)<-$M|{Mn|o810%{)ib;=taCjENtZ+dqxC?DB97WM}yx$n{gJ5J&?jO?q^4Dm;y|A46+e% zP2(m~`q2=JhH}uiI8f&IR+zH-&gj&mc^sfWo~7 z1#sZH-w-4p0+$3=P zGvnkGcjhy5ZJXIEbikP_Z-ei?D4WCs;=q^=ajkx$O1KN>2+>sL<2vI-jvmfu^Fe_Z zDz`P(W;zIkq7Xyu*L?Oenh54F7j*4Jq)yCxU|d&ZW~ca#;<6ShxoC7}bR%N{o5z{h z*{IGv<%98*lRk9NQ7x())sqovW1#mVdakzUX;Lw86U}0TT7!HCBwgO;0T;tHEL{Ic zXLz{0&wk=>fBPG{1AqTN|AF)4gx%~(k~pGRu?Bhq|VId zVbV$S!f1@#V13zpBgtt7d8^0J{^(~AaF|CQk>Exkn%B=jYmn*nIf`Z-U;XNJX*t#hM=momqXMBp#&4DtnI+*=dy%ZJSvuW&>@ZBpJ!+j0v4r z?A1jRWItaxQ@6;g1iIAFIjLfuF@kY4lM;pAHsQCeC>*Xsy@fD(&5KqIJ????2$7#> zuQc)Cvh}2@29t`8b4KaH0X@Rl;w0e;*Pfg~!FX*&a8HWFk0j%9&0$PziUh&^!AZ<( zy&tXTuau|c93bh2Mph~Yn8 zuZYN!FdC)+%zdu@4tq7ictS|_8aXS3LT$}P;j71y=8DSsu6B~eI#)U1F#rxnc>{#> zX$OuLVv-?s#D$9B>>ZPWxiqh3Z_6xP+qH&R#@n(lK_as8{Y@c!MUHZ|0t)B5blmr# z5CkO{1^}^)5yB$0YJ-`efhId%is}4>ya^ zXjVQ4dV6!*D{IxZ!SSrY?T#LAbR+FqPqE?nBL_E8N(-aEaO$P@uZ(9|zk44bZ4Py? zaJi>%gVR=ruf)!_MqEi=H-xjWl*EY@xAk0v3nmaPS@`Ax3jl9AFcR~+8iTRWRGz}7 zTu;YFx{3Bbt9h{IvlyGPZVi1NrVtqz*m7PUgL;0Ca2Om9VMe%){n2o$uxUXdwbQv> zj`fENeC4~QBPupKT>~an9Lzu)W3btl==jwH&clW00?0#Y4EaZV4`Pc~)85L(k@r)! zd=HxotGHvM6Zh%N(a_eSNwZ;CQzQW9Upl-n#Tg@z*mS@!M=0f{@V>NGxgO=LtLr~& z{YXKK@wpA`lyAfbiX7PVu*{C+MxDr&d|%Vu9&1)o2^M--v_adqLF|rNF1o=Qn61os z-V+K!(nPW)6c^9-tN(!z<4;Gj(DpE^xZ4vg6}yP>9Lqa?Bha zuXiLdjzukD6TfT2aUN@sK_`SsKmoBu3#79E?ikkb+l%9dhif<+UO9M%u3=<~5`1%A zBLxrnUAA>L^9;cz4$NxE9?t^{D!LpBP%TetO*Sy})D1h<>U|Rl)omRJfO2H!@5|@ZQ^>$~ z&y7P;B8a7T?mPNW7fW05AA)p&dAV=$`i20Bjm0r>T^EsWT3N5E;Z{ktcjA+UIhM;s zv}8%sdC1S_Q}C#R>b^T82{rv=e8ZO8wwfp1>JbY*Ep z7|2tM$8{>-!7*-}#|d;^I|_MroO!y{i`InIObDc1E?r}%XR}*ya6nZE#&TLy(tlo7nkL|jX06_td zM4Zho2uv(H=-dpH>5Ysd001BWNkl%~IVZovd7fO`je?MynYbLltAGZW zLLkqrQ6zK`=Xv!0x@yguX6Qgfmw4Q>-g?wEbd-L)K2|&jT?px-rebA1!?{*fJWRMn zhFN4uGuj5_q@l1cY&dW@?)x1s?&DnNTYe{L@%gg;7gC4PL72LqbPdljHUZWq=Heha z2U1A4DHf$Fjcze00kNR1=xlDnfeLC(`}p{*&z3m8aAEgtT?o>X8*{B)>#YCd{R3ZL zzvKP&2d?`IW}ne?pA&z4-T3dfitN>fi0u$(p5~Xq z*dTJZ%?zMFrOYfLTV^sR-hLBNF%sjxZaVy#o$iKy9xxI7J|fGt5p^Czu8CncV2;mM zof+&D!Fqa91 zuCmCsjp^^vj>uo1QSSr^Duy%YAxLrn@9P4lqf3vR+1~K`^&7+|UhM#yVh*L&nEE9z}M&@J#G6`fA!=xZbT2ek1Z86ck z+O(W^DYReD+$=GTwWUhzo9I$Qbmw#0XiOLqgVX!I z>ztH>h&d-kHyf^)=Z=0b($MEJFWn>ZhR>M=U_PA-J>7yY54ka;rw{vo&)#$ik?#TL)jyY zGh*xoUdD<^li*RrOVJ=RnA1hfT4IiYIRz?b2wA3MTmz~D{ZQP)FyK{dK3uNPqVjhO>4B^3{o=L}Tc>BKJs3T-cl z^ca|HV{b165kZ3J=*NjKcU;Dv(Wy|78Zsvoir3Mh=s4v>bH)39!!dE34UI0_qxGn5 zx^S?^nu}TB(JSY<;HK-mcN|B@eP3nHjL3T(Q^C(xpY(X|Cu-)PY49kVM2V-D^+h*d{FV_h?;SgM?LJ$f;m zlLf_wnxLkzG3ekB@USwxUa$JZ-#C)U2Ip%bt*rf!3Jfd=j zwdSgZFj{u@Cq+qEn3H?mh_%uDF~7;WYY{4E#gci&c`p;$7!y7n?Ia~i)*N%EY4_uZ zXMl5wTj9>Ql-)yBS9fi{{Pm($meX*U-!+vcf{?ces@+gFR37+%oSjxSk z_!ePv;=ZpC;%*ewGHse*I^*D^Rd2tSeSaIoKAcR6fo5~!J6Bwq;-HE#AD;CvYPqfh zp(;EGN}*%FH+A;`#QH3F3>f!Z^=Gbk9N=2hl_i@wWIxFj-^cXR47l%Vt`y%1*c2*4 z)P`1WZ#K2^cchCw-3)P|Cw?}=-vp-$p+vbmRw=N^Ed(0#F?vf0sO4H%)3YZkaBt#=oa*wpbr z(4!D_*q+6s{+rC!baM>Qv?>PKP(FBv=qJhB7Wb?gX;P4ttD1d_KW#r+#| zlp8)>{4t>K=uJ0rOzs0xBA6t_?6DF@?={?)O{rMdz1#{|@dC_EFIR3hxlBt)ky%kP z@r{Hd3)R1`b*h0Q%$S5t_#hj0dlxde?<>G6s#WbA}jc@V2Co6FxHHOI=1C7#vw z5p|GFapPcU&pz7s_q~o1(sHoni$7^5_9&Wn0>O%v*-1D4C*j|BGEQFOEL0QwT5%wr zhsOSJ+)rkl%0_OH6cs6jdhuX~!nd_(9LwB<39=#(3PrxxKIzEJ{lQj!11UVBHhm0J zD?+B`=U)G9uDiLPX7mu`C+>e)!bcmk)^ICFIURwrL>_aa3&nfEq4!3OC_yU1d6d|@ z6#=xZLz{RNRA$F}sU-%unG>9G8qULX9>At0l1*I)Ka~lA}x&InRzBV=l2+7G_lN;r zYYnDG1FJAD>kPpO$!o(5bA;1cnTK2~k!@YInb%A94Qe7 zUx`h4-8&s+f^dSm$2rm_{`m0+{^x)Gf!}`nJO1x~{vVv@8QIZ@=J|1c;AIoP{r3CH z#)F4Ii$pW+EwZ)ea`^;C)yv@!q!ujEAu+6wUgE*w%<9%Xa#i5kaA;>_lJR}@a#Ey2 zXN)`Qt=>XE&`?5SO|r?HA@Q*oO1`fP_Z?9yNAHzctVHdqp~TDP7WwT>A!wNQjpmMi z9+1{>rz^^Z$n;sC?Z&`##|6i$A2^QlDgNO3{x?=Vz<}ZX zeq+q5)}+LkN|H_-kQR=t$p*1Gy{MT%%$@>;ev)}ONsWD}`gn1+64E2maUao*0JPWs`uX{Zao=>9N)bHb zT_cdoR?4|LgP4(L=n!Mi67LqV(4504*1I#r%$^wiF)$eQ2RDeJM4Q^vqyWGK z=h1P#I#fdxEfBOW2%m@4IVJDCNo3?s_05&bEb!@2acBcxN5|O@zTaGrlHMb_otrX? z7*(r^hj>F7N-3h*JgLxSyM^b<8)npe%91Zfa^K=&uu>NBrK* zSRX#4$(~U%?5RzP`g0(jgDK^EmLd_eE28*%)V0@r!`U~x&0|078tX^vk-Kc+${Y6^ z*Vhl+*A=<*=L@gbC&t_0BYIvjkQ$8B>|xq)!-S(Hwss?_*%tqK9KH7X_jR$iV-c6< z4pT#u_7wMWU^3^=8>;B|gLTINDq;d@)_IL;nK z6B-|q4(PJ)-yyD@_lUk58pJ7dXCFje>i?%J-)HO}t@RMO5`+Eu`HA;^$FpTpZswU$ zLi3F&hNefXqb+(pa}11m6KNh|LM3IRiAH47{pK1Lm}_Ird)*h*94AQn%RzV2LlC{g zuAT1ipd<`ZFJ2!X=w0zOg9<{w6h6+g2vE%fYYv1_#ywKKBgQAP!(HP{bespYH(cWl zmw1Nn`^Iq`CE)Un5v4-%MhfQLaD9EnH9SwWv%#mXm=`|n;&B~wJ&~jyjaldNrm@#w z*UkRERetk|F!Vp=KPQ<0ByLy^ym_WLIA|9Voze*890tB<42*1SV)O+R>5RBv{a~%j zIfTbBQ91MBr!DhfI_mexygi~U|5~*q(9Sc*W;J^lckX*VGRx6PC_rRmx1_RA?9#IC znH7bl(hJM(Nh(prtb8G!K|1L`4v6;XKTNM7^*!#O(wrS)TB7RSI*Cd~V`dr*MhR-P zkyglFVh9bA{4*DshK4fb9LCHyV_Ac=MuAq}dMy;3Lr6RfF-E7DbBw!4RuQYFnDY%A z(T_dO7yJGc8+~0k&v@UDQ_&`HU0#Fopl6M!tGWbQ(hEA?^DdLuP>gbW8KI&DQyidg6j_2S37h?kj{xQ{4qC)|5;>* z-Ww7esU8$XpF+_+Bg`bOhfwq_G^dz&MC$d15B5Or>%x6a?y<7PMFJv&;)@3Nf%}I= zlw9?oy~LK&NMdL)w=jz7pi-u#jI~aqaP;?sm?NU)-p_jUz9&9Dj_PFGl<}I zz6wu1Ie=Ob0a`=;$jmVg4zyg^N+N_ahkE~fIdGHj;u-dd1Gg=EG}3a8?tjKtV_mhQ zHwk5T({dK)ANI;QSLSW{axiX!7N?rAw_d3C>$-WkRHBsgJKjbsmv6tocevB?BDj(bUWt2>3eJhAW`(YW861xUZdXo=2F$|nel}{stAD1 z_O$14u0-adTSR8ku9T;fJ9B^#7}R{eQsj|8&Dh|1xFmO*EPQ(w)@QRE025`ly9Jg* z5RXC5cQIn_F-q5r6U(SAhOOEB%S)k;I2GT7AGTqi_GpzoN@KrQT28t#HoDM*;KO(8 zo1-ueFU-l32K4RsrBj9f&J#mc5fjFLrzQH>X%FG>ObX5_Xrb5!DN6{En7=$A%BIM! z2n=0$Rq0~ry_NfZw?yYK-+91?4hCEv9eIxewo4mxxH zX-z5%br(8DV{YY`!qfRH?8UD4<9lzUo@1)FrD8Oeh$viGK~qu3Lp0NxK4O_x{1Kx_ zbfL%bt$r+LtoUP1AH(2&lXgHNg=(EAKnGCfyS66PU~${xJ+}H$rB!xg?#;$$+&HXF zk)aSrz1;BYj26Py28b=3pXb@4Z!tl}x+iL>L=g6)mvY-FD$IRYss^-r23nF#i0qFD zsighHT{?RwQHvRkyFy(9Ynj(=nnNaO5_EA_X1c|_E&*i}gX_#Q2h4$^C(1c9EF%Ll zg(jMLyNOOOYRQ5{X=`*`8;s6{#^+dkr=o1aoua$2aUvmz)1t`mXVQ7vlC&^(QC!wM z2J}{g{*eu5wUq-nNvhD!HPk9g-SZ5misNXTAl5crs?_JsW}RBLgvgc~CCr8auh+pSq8X8CZ8aKa;+k=D|L6byC;s}&-vVDN;r3SfL~Fp0uRrkP z{Rh6TcRcSJZc$Iif;->?VzIn5WZrMY?sPrS&t5rw!hEuZpteX4)Uo@74Xy~;L}o;V zR6V%~FnYY-lVq{hJ2c~J_H&I!hIj}=yQ4|n zdLTuoVVH*t5`rm)mkJJI9R^H)WTKDhn2>M~${h~m@rHQA(GN5g+#{T<4JVPyql6?e3}%fc0`rM+ zz2lth2cu^MsweLI#&x}8A89=Xj5%C%tEe}pAW9im*fuB8#K0uQ0UTsytmARS`Qjc) z=$h!>gI2)3xKU(1i5_-ic4pSOO&^H;Od!do{;+5gOH;I?FS zKF5Zx_1fp*Erw(H&*v!}UY~xWAFmKO5`Wr`K-)&Y3R}Fu)A-Bi)sp%hbmy}$6s*AKj}3)g+4X@?%si-E=e_VX<9X%hbK`$F#^f>@#k%(H*8 zk+vAUKw1#Rt1Y5IQk~UEPK>=@E;61AI(^Ph$J!G$g8d(*2s}VCfs0R( zPp9D`P~sEqIO6;>88PND>~U2baQM-PyN>S_1H}$#k3sS@5^fA1M>xR)p&ll%5GMfI zm22&Y+SP%3UVMJTm;=U5sRFN8$8jEby$(`TNvpFN{YLLJSb$>g?4Q`fLAv^Hdjmyk zjc(Ec?lXdlUCnx}|$7~|$ zTe8KfO;Q|><6xhDF7kyh;l4nDgG7ZnzRfDU_9|^5V%2o9+j_rqI2xosfwTkCj))?W zhH1b(;;et0qsi(AABU3U#~A537!i;p+N0*CE7mfe;n&9*A}JM&JL;}ZlW`JnqfTKo z0SC589*I3oYIblOokL%zQ2`H1;H0rgXY>w(9wQGS$NFF0=26+#9}uwqa0d^bK5+}91QIpclLqHOMeNACoS)I1%YaV+e|3xK{4qaUs?-JE!CKOLaE3z3iW z(frzfUfdLB81-J6(>tF0yJL8FyY4RE%nJXWx&3{3xjVIOYi9p+kj@uwZ~EJY0#{kc z!SBPzHFPE}ddoLo4o0gc-p~G0T}`>lvB?Gxw47ANCQ5$RYzh{RaBFy*dExF=7KT%Q z^8KIreVaR2xIu4&U#GjrHzC2E*SYeoR^B!?1pA(O^}M%h;M!Q7jS)FC*+4BPTozQ@ z!yXIgdTw@{?VsJ~d^Qg)fg0X-YC8Xvi&%gdk8BZ*lpbhY(HDJ!q|Tz@2Ff;B2XUL=s(Gb-7~j$ z(18#qXug{6skjdW%E~3~Y`BccHDwA199oEGY%a&ThJ4Od6sGH%_~w+H+jYmc@3A-5 zYhbpaYoAE=H3~~dNn-yKxs?vnP+PNr=LYi}oGsUxu-s`pzzn+s!6tMKZfN?%sces6 zIT`kKt4XV-aiE%FZM-M(lWH|+PQ{g^yJW0pPaec_fKhoxn;^m2khC%J@p{D}Y`e~h zMz237E33C@BW88oyIsuXY(hMmyL234!*z=YCJVuwuQq0_@43UCnX>T86pkjEGGE2E z%o$J#C=^;Lb4gPSCe{3!W;_7znYvr_YZl9;rrn}7h*L~FuesG`FYqnqLCcX?nXN1+ zQuOmI2CUHdOAw|TT6I1K^%-NagfU)m4$)+s7@2dH;tMSC#lE)fqNR%}_cT6>_{_g7u>I+#B2!*$5n{v0ft-p{o{9u3O1_Q^UF z@^9HPdjGr!Enu>!Joe7m^VeQf%eL>?%wEC*GkY8?MV@q<%B~`9#$lvG@yL{)|Z} zQ>Q)sg1%sq3q*LM~yLPnxS*U(CqfMU2BdF(N&`2rt5+vq&Ps z*qdC7mIHR>!)c;~Wfyd4IfZ_9&PXwh1B~d{#IjI`7`iG36ph!sGXD4-#n$&gi50D) zFfwxzTjYxi;yy_iM(jDd; zST*JWRwNVeSqvrw(f{HdtH?8c2b-9~mw23OvbmwlQSZVd`T>evQn%NSxj%-`v2$qd zvn%j$001BWNkl%z%lN;^7w2l^rS{P7nY zzy7Ntr}kK^aGJ6%)okjn{X=a8HKDidOli#ROLsEk92j#kITXp|Gu&^+eY{oelf;jD ze|b)Tp@=1pElWN{V|88#*KQMy9AifbVO9+dMmR-dZBp1GB$SMFVM5T+p(A=LIpEg@v~X>U0~qVfk^_>a8qTaS;H2<~h2Ur0;g;2-$bC zY80V}vZ?KcPN%7x6k*RS_X8^tg=Gdc8oEjhhPdfXr*Xvwx&wk9+1>9zdbifm4+UDd zmEEF2=$&=foPhm+jSEdbq3s3LhOhSzW39e2Op>K1fsg{UoG`+9bG$1XiB20r6Azh(Y^oENxwDyWKu)Mgds2PM7iIiKsKBs z$^bg?<6`yQFAKwk-o7h|igv*hiAF**I@u?thlxP>zHCZK-pe_EvzQqxpXHTz2k!O4 z|7Xnw>AZt3%<|=pZ5Sl$s)3VVueD#iA0VJ>!c#E)WzTr0Ux^MiKzy1^c z>7V}vKmY!XHU7qV5B@N3j-XELU6@|U`DF_xiFQsT^up`9AWG44trBiUV;%q1c&*{G z4Vvbhg|I!1x>|zDHtB`{l0a?0(h(*X=K+3sqy<~QK2x%ex*KiN9ru0JqVha*;{80B zGt3KLwoPj`6|M^H9rx?S#4JrrmA0RCdegQkXy@GBmIcO~^qZyW)_RfetU~PzXM(4syq|n5DrdR2Ec%Tp%7s+2&dSw9ftYZZ~W> zo;A6a#kw-!Sb_@s%{6#;M438MC~_)T+7PqBhdqRRag63RaV9KCs_HrO@XRe+eYTU& z;PeKp7U#nm?_7LVn?j*35y0VDdciS0&LIk5$x$Q3ho<$Qrv!RG&OG)6J zTA#hxcaOS~3~xkAHI4sH#M7@d-`KCyu(?>p;J)xUzk3UlN*D`h<^<1y41jhe#Z?^W z4GkT(cpl=Bn#k!XqY(oTlA37FtzP%N>42;` zv|Lw3G1h{n$yYOcr8GIMGFJ;CBy?S!vpVIOriB@H4N47O^HK-`iQYOECT9|Vki|Y| z-!W6l8QD%@8_ob>+-=nr>WwtURrO$UP`rcw8)TNOOPiC`ZM43rI9$TOlctWb2Ieqa z_X`*62h@dUOq!7p1lo3WEMpxhJl1q9>PLG{9A?1?H+u!>SgDeftD+xR(JYin`L*I6 z(xst0U#cAZZJhfjqW2H|=MrE1nX3IYeRd+%_R!Wp(rSAEZXXHOQ|CGp*NI^ZbfW!I z+wIloSZS_G1|B`-{JmQ1H9$_0H?WFy10O@{9C^2P8UO-uVCDysbsgOoexTV=>ESId z%F!#62zEOL+L^A~4|P92$2gr&h zfJ!Qc>7Wsxj*sUv2T_^qPeVfQZFkXr2<5_eVGnM+o|#jFl0Tqlgol86e2!qRXlE)o zlc$-=mlTIpiH+N6LeW+|U3SzDD009_2cd5K?dRunm=2CXCwMu^zg3Ck1Dl?SK6o5n zQbcgNEpxD42f`eRR(fcoP`7YoHP|oln0Tc;NM$#&OI(;+Z}I*wt7KUYCa-pFG^PL1 zERZR)a5Qo4lTQOj4q);#@N@X6A-Z`YW3%TQJ7KurMgK_CrO=xjZ|fa$xZRryTGuil zq$rZ^wP(X4^fS2HES0Jk^z5Rf=ce^Ui%k_V)Ub5dZWI5_on7R#dbnGfxx-PL$%5Mi~{{4_Cz&wlggaUY_f)nfpCX#Q15f$odFB_6)6_<~&3@kxz+8 z&pMra?#}a1Cj0dea2HdTtrK0lwop@Pbbe-f41o4pAA{UX5{nAjb;FB9u-BnE*HPEu zWk#DT)~5s*))~SLbH>kd_0BF-XR=SXz)7s8oTQ!nTu;h|r5LlRMPSOuiUi|@-c2G$ zkwXe~uaM5fL;f?z=c<|HXSL0FR)(TPCpX6u3Q4(#Dd{9`A9Rc&JDJzMm~}2V&VzDb zonxq?n>4|0zBE;3_iFy!gC-U^Oqkh28p%x5Gu4Ul_3h#)=Xm_*vy+&E7D$;iPn>-8 zY4iIq6mC@0d_>IehY93x=bL3OqXT!~|G+g?*iC6G%yl#G2)fV2{(*%(`h0&OG@R-5 z)*7D)o)^q<-`A0d^?C-CXuA_1rmDDK_lMx>=ErkNky|$AFsL7Kei+B_Gya|JsL8V0 zhZ33JS>01cDQw|C_olN4ERnS-ilrbt=fIqc!p^2wxuOQGNugP+Be*yK6Pi;*w-MMS zDKCWeae(DKJ0`~Z6q)l3VF#+akbVp3S1ZG-5xJ<^&@a^Q3JJ_}o|E$5xjSqJ;xvEnXQ=06eG%6;2*)d=>!mFd!~u*y9+G0a9ht}9qE(P^}a_ec?# z!)K1@vCgwHX#uTibb*e6E)7kicQnoblZmfhRIR2h-iJiXmw|`RckaU@dKGv52LK8= z&hJo8Di$J9)udrQ1H&fJB9W7S&tZiL2UAUZC?BKZ7;>(-cjWs|ba0$I78CERIPyTo zD}B*p1Wlof;^IEqwQZW6g!mwtHs(I;X1MMP{c5p?@wjlwRyHRLv?g>gG&zK-PJP0Uj0KUpJ9*E&MyEh54 z#(m#mAmN%cSAOn+j*q(>sWvM3@p?r9bB6J{NMP>Aurum>?%pHKoo909rj&1e7@HUW zxrH%;s9?Nj*KaMfKaQwd13IHx1;9SS2kMr8r4oYLKW2613Kf&Y$#odc6~I}G9U-Xpj! zVJ=uqq^WzD1-WRI+BND`t3NvuI4`CpW(g@-kn*VXa$<14<~X9svx1^vFD zbJXuUo~MjD{p!(!4Z#}GM;uiMnngBDRxZ5m8~^mb{4@ULpZ^vA_J8~j{QYmAwV8R= z$bYv0c)tUm??-sxYCWD?FkO7iHk%3tNJevLIz(7Ej%84zrXQ*z615_`ybxs2SvXEmn=Zk z@!dbz)9!UPRn87FumpG5FwFIa%@CXHin-7j4+f2Ettl>z-rc#vkOi(G+OJ5HXBw7< zn=!+L778rxT&X<64!AAobyvDyF!9yn024u(U1`bVLEO`1!iGo9iC(eR&j}Mj zzbLGcoKm$-oMrbG9n@on=}c)%v^n8(;kv#81KO@Ya3 zZ7fy^hLP57;d#HyV6Lr`FtqC)7OP1^%vKVEoFee5kem5}ffTJ3zsED)ku>*-j+h~4 z?P6lICETv{9IFas$qo@>LQ8mSG5;r{vkO|xh`@a>A{JI%{Gs2cT&dxjBb*2(8LYgp|t>Q}Im zGx*o*#vBixIng`_A9;6bsu+`~ecs80$a+gM!i=+WzdK+NZdn#VhdCb-lX9l8Naz#1 zpYJk3V*$Qa&FCg3x^_OhaVd5UYF8s&Aj4BDD@oVmBP^J48GO&oODFSJv>c>cNBFnl-ykg4{8O zL9j5!tf1G`J3MP&JZfa&K(C=sFhXKzxFQX^h)Rfmpnvvu%XTuWZiIU#GZW{YW$PvK z9o>eFc!FHq8xLE76x{>;$>RAuG{i5q(^%(Alp#+~=X<88a}dD6P%c<8nA$yyi#vUy z9>!R>?;E}A#x1ITq`mUz?0t9G?L^#>HcIs7A#}v=-LdOt_UCwF^PB_lMufy^D5$PT zUY5>Y_!2BBWRCSKay-ojc3?O8*H^q~O%-zWqXS&_;_Q_Xsjd>?P%t}{0Ec=e=CkXp z9pf9>f}`w?*+`}Cv}-;u=YW6rTFM6H~o>AcR%VTcX(4=D>F@XJn{dSF$1Gdv@lS1ugZwK!OqIYmZ07_B+A ziVe6`@(%}^_;avT*rfk^Zd@ccEhT~v$0e>@ z&+ZV`1mrsmZCKNaf)Khwuk@a|qj^JDg^A!j=0?5fFI5P(Dmf|G!c_jw`F*9>X*TQk zJO#88I&9)@H+t(ZUS^u6kmftxn#fyZ?~K;)vyz+^T_e3U=%oiroLNP4Oq<8xj0s9U zFN;a4{4*BCT=6(W-me?uVNV4WIt-3~!2nP-MvAdH%ByJ7@%3*GSWjQy)ZP z08l2F6HnXOYq$PDZt;44`NuRC1_+2AoK>R&3HNW&68Kr=rCB`^T-B$__f?J_Ly=5` zG#U$I0IX-98P7E!RUnYY;cVa0pR;PgH!yWF^+v!NyFOf4xHkei{^zGqNa%4IW%>i&%%ivMu$1K zSu{I~&FllO-cKX$fw@a^LE{-~&HWtL`h`Tm17^C-mmh1q*LkP)&R)`md59$29JQ0> zCmKH9xwS98bf}+(o7Q?^!<8b!u4gdzYzKn0Ukx`AYuQgc#)GOjtaVUIr@3EMjX_2ce=6c2RG`QQ%@dDM42}Pm4y3 z>=aoZ=1%RMKd&5011TvI6allqM~^iDy6k0v#;e`iuFkX;-$il#=+{}?8*-?duJ^_Y zj2Nh2ALodqG%a6H7tCoe1U@kST#3|5nV^NAVVa8BSqO^ZOh49{kY|oXXD<( zP(9|v^RUnLzR=sv^GkG&m+&TmNSY)T|UKpNXHpz45#!#xS4_ zysjJf>qf)G_$`P8*Y(2d>j&HyuDf9|0p?7xE{$$*De)YY+DOAt-2a|RJ-16EDNTb; zh_@k__PdAR){b68t}V{bsP~KKwEl5kHueEGjiigaqe+V{QVnw{R)~7@8IfG$*>J20 z7vOG8Ml#7Q5_f_t&+_cFkAnln=e#2`Iruz3v4~e}?Fu3n&k2bioxZ{x$)T@%)<=1D zb2rv2jKOn4i=iNz;+6fz?@{oYrOG1Z?qO`tBXQfi{Yv*CiNToj~iE4Oq&=#ziD{6(b`3Ng<-BIP`m!3 zn3YEO=uu8{di3{_n!^7!#&=VQy{;Q(f;k;3t?m$MvbXUjDWlW)vn#dyn6-`Us-*Fy zNsD3Zj6I{@uQIV^#Yyj-;gzJ&t*DMzE8f9h?j*f;Od7gc@6ju222;bJ0GeX^eO9Q`i#R{YUIIYocom zp2ZYy5h4+rXe~%RxyJ~pD;13LUuy`h_No+eL^SZ|;5zr?&#b3F;mG?H$o&Ds^F+e4 z^$vAly`xuL;L#P@Y2ddwBli1?-=&wB5qF%0XL0|yUhI@-XDY?Dn=@$13dgJ-qG2xu zzcu14yq-6jc3gU)X%HCtePzWkerTAd}&RP3TqkY~x9qX*Szn{reHcfVtPyCzz1QK3O&-I@#X1zi26 z5j91|q?68FHFBKe^O?M^NLj8qFl~KMc8ZMGq9$@u9P}mdMPZNknVb=t;h^3)E{apX z{r)@t_S@g_FJodkFm2)c{l%9yeG;;Q^lWN7jShRD~wz@b7-n1 zK(A>q#AjtqaPuzIT2Sbq&J-_2eV^!ycV7hzk@zpOGiUT!Inde#QO9^f?9zq`o0&zr z-Duu)o-suY*A;!(0zge*oD08H!uVxbWkW2wElf8wRuyE(bdjf@RaDaqU)L2PJ7=ZZ zQV$4|R8=`LtTWfzSEC|fB?%~I?{g-_t(`7`O=#fn^2~vbAnxRS_jSKW+?ln<1VYZ*7>0`Wx+-)FC|+M*=vUvfHjhB?niH$9nvcaA zYh{2f9jflg!kK2QkzwQ{Wl{G&Bj(VnW4ht{8JKh8b-#F)&Xhju3>7rcDl0*K*9+wA zV+khbRtgOhD5)>94BlIO_Rqv%=u=xq6NUM}`~4kcA)0G@%kyP}`CUZP2tPIGMT5Ed zN71lbn4hG#NT1W_xmeGV=HU2j487l>`3Zk%6B?$$LOH6V8 zPK|vYc6NxT=ydi_;Ov_wj=#h$`4GhYqcbX=w@7w6lM{NRrVna@$i^kg#u?|Pj$fXw z{LXB}U?r0nDNrjhW}tAO>TuT&(@fTh#KA-9fcyKJbb29G%0ZmSOg}KHd6^&**OmcvVgSM;#Fif-aK5i0wyjOK@}H$OWUrqc63na>IP^DHrGhtRy3n9Lqo(GZ)@E?pswAQCnk$zn_(v>d#cBN+)r zR>4Mnk2wO9%Y$Zm8BYrB$DqQuh>;iDu_86snBq*)zB=y9(jmL4w0c@k6HmIk_Z}zg z0ct$-8KT#5?_Y5_ScQRHyTg!T`A&7k`|4sP=4E%FCz&GC=ts>!t~*x!dP#$c?=J)o z8Y4vG0*D@>bzTx=UnoBIz!cFr2%ZPkL5@!9bD!IL;?es}XJUOf?ejbm&lbhV48qGc z#KaKT%T)D=3l{c!C!s{QX`{|mTfkRs&}$p*tXz@te6*`W(u=Cya z{J*Gkemr4~Db?yk4w_StUt z5pVO#PE~CDtdwa^B@8lo##23vPQFPgI56*^Tov7#S2@M?bcY|^>G&nLS=0jvyv49E zYex3@bPpZUU{YOu$G`0yK1+$w@y|zk$dAGDiG!D20mFpOX`;!`YVpEe81>Nf_t1E* zdd?k*xQgjRnofnE-}@Z{&HVi~HHWDiBKR7s84^LBXX#C;qA7#Ib-fV2&o!Cg2wD*T zI?ou!N`dSd%RX*t5<|7MAnYD5+QDH6Jl~W2IrShB<=U~$l*BVjm`}h2u0SYcglVsc zI(+WRR5|Uy?CmqTA4&5d)G6-V^LXA|mCm;VNsq#Mt`hS7Jd}O*9v}A+XJR_LjXN*n z#);%~7I#%$)?InNiDJDC}NbW!Ni%fT7apy(=ph;^)-^8M%BxOwlYv#x$J6 z76+E`9LJCs)ipfwd}|yZ&=iw@=9LL-kM&=enrgbKG)Z!4ta?~QE1}sX*I4tT$3E*J z4nZWl_INIxq?jyobnXvIftaDCc&8(X`&&Bw+?IbW45ryDpPqRK(CKVx5e57KNI^94pzf#Y{%KI z_j{iy^M6QX7T&2Nz34Oq(IhXep4m<`{Um83gw!yGW-nw4;3+b%xp?0c^u|5B$3RxP z;Buv*h36I#%rqLb3s=8zi2$;Ao)n;8k=nyLc3AAaMwH%N|0EPq+{N+`B&6g1dJz@r zJiP1e5y2oF zM8mmWEr)brO#wU0g*8GwzC%?lF)|5tX>t*1=t|=&jbdh-p3+(iAz2l+BCYv)z3Qyr zMBy_6GCA-E=O%M5%<--YiAbsEXAy(%XO4~TXK!otxW_oO7fkevcYcjKl{N}n^}An{=+zc=7h@WpXTq@1TCAI06%AKWJAet3NWVHe zk;8PmiV&9P!CW6Q$N~-0VTP=lM8B}FSTC=3LGCMNM1~MsNo0z@MiaGXSb#MZRR`Cw zJn*-R>w26UBbDDkbAU(M(Lf_3U#{N!5fm{}U*ZgK^^X4ar=TDt5stX=mQ`fFVA>$P zL)@@Nm^|`sd(j{fsk_PU^bk*e+<(S@`O9C!bTwuO4km?uopZt)s|ERdCe5yp=rlm( z-PxH|TyB`An`)_nr?n(``KBCBu8Uy+)FK9DxT@+*8M%{_PNllfpDoCZNus&$pm@xq zqLpuX&3rBz+~3a|A`9>DH~#+HZ}|E1C-n)(dki>DlG-nb1RZBhBKo`XY^z0JD^qfs zKSZIOhVd1I2ICyX*TS<#oK1RsPR_e{myRwM-!Ufi`!>_o47Wuc2awM>>&}op@}$X- za(eX!_Y2S4@cYju`bys>E@WqY5O6Jp#+Ebg$vI*x@_E%v(xL96xbF}abqWP^!SfCzKafWHcpfYT z;tKBw?(2qUm?}dqQ1%n&d^9?_TW{!>!c%+9N{+k_tPm7?i|;WjX%aKvv>j9=W3MrG z1=1e(27ON@g!?2Kh|*jM3V2?rWbaa@?>R$|b6aR#%iO-_{H%yPaP2v_jaj!Iy~=SP zcz=Jh7ktkdaxNewNxHV!gS1uP#>^u1Tc(B%*d+d*6ef$V?j(Ojg4qCVxUMhKi*o+! zX!7AnhLGTp>F?GWXCo6TjmGR{29)Q zTKfor7Ji(eF=O~8|5}lXNnMR}`@)>@oqv7ZOn$FG>K`OMVO3ZDe9w5|IiP-U^$tY~ zopjA0G3gEwF5f}xpeIJSEp%J5g?Ir;BYe&p)_5SPy^@xA^?2U1vMjm?lDy)jt<@f! z2IA|2P8wY&>tN8SBOA|M?5dZ&mIzJX+67$>5$dx~a`*g-2y9xR@ODp|7hcrTHO%gr z-E*{YYURi?11MDQH1OFcZ66(%a&!%DVckEw$j=0_e_PeexBuE`JA;{`HR@sor_qf5WT;*U!4PTbVKis zNB_Xe;}>D1AB%84gD2KaM2;RqRHu!>KT^kM2WqB$9FDtp{!IJl7$XkU{kk^J`uOu| zU{om8-CutTJSz|K9S}XuGzfx#6H|pl;NoyEQ}2PMO|(*C zdSxdXQlL1^3`=U@Sjhp3wTYF7@4@l?WY0zM}?dY!E$-QuhYh6%EcsbH@hAoEdG+BI}kbGifry^B@CyL$A znuuGlBXZ-RME_9=iMbb+Fm!Z{reUbHqr*PyMYQeDdOL*5 znSTl;_yy&C_JTXRj+~T_7>GpT)VY>z`iUPEBr%N63s|CD>$yyd11u6E(qcG4fm0x;K`w_lw;iRn-N+;y?16Wqi04q#I*;TUDY|==wty}ro~Jl+ihrkI zfvry-CM(?z(?kc-#apzFOs&h_V}@d34)(b)<4%t*-RF&t?+tJfEFa zAt^xT`jEnD{%jypX`f5N4eyB+&&xaHSo8Dw(^{t!556fwy7z`mSRs*J-2YarwaWBc z4*UJ&vY&$aF?2}$mE_vQ&-=PMKWiz%in_;om#%2>>ebG7an4bqc_zaX$=$Nck0PWV zwFZtPzw7ZHY*A0!rY_A97~YHc!4#*{m?ia|wMcTqKPn8eDkW=sM9*gnhZ!XQv+EFD zDcDocT$#kyov==$*sjwNoNDqm@>*FK1X5{%{Cg?#ZTGkB&rQ9mNUjzp#)VAGgpr`- zxq!XSNl-X(@&F*!33rOzyXd((3G4d`1iT)o^z;3eqtcD(09v-U(uXc}|Y zc{2^8fxF&fBh=3PdV55~;0BeNBRLVo8Zeq_b!_^%vL4>*_T1DAo$} zV_s%k;`kAw50-^%zLHC)c`AAv$6Rf1Rcm z!RI|sXgvJ9tAsd^bgb|1Z}w4Qzc(7=P)Io9%eKVtwiEGfBqS8l(if5PyG9{Q4^|0{ zs;6KgKzS#8&sFzKs6*JT?)>+qz?WvPNR=)Kw9Y{`XPJI7317JRG&FFC<4F?XIT~EA za-C7MG9%}CHHESi+IB@25uy`}M+oM~~~Wz+F2wktjvG=;$4Qx2Pz9kw~Vsw=bu* zv`FYkA=Xf4Q0-iQi69lQj~GN`CeqNhS+Qyh44*Z3zU#4e9SHaNwPN2P-gK=Pb_?%A zV@}+6pd>LT2b5Nb#Mu8xc);#$thB#2h$VJi%XFGZO=)S^i7sjNJog9&Q?0Ci#`_5Z zOp_~yzU{*E1Yt<^s(nu(krvKBkK`=Lx(~jqLD@2zuJ*tT;xwqIX=tArojr;YXFbe2J}Vasah5oEPh2$bNO@0oqD|e83PqmX zk~(?ytH@eVEyKAb!H2(-Gl`T!QQjL2yH9?utc?kjdLZVptCDozi>o-k0tfI2O)Gv><)qG)v(uL&`qBJ{f zFA2k5h|P_49UU&S$Y_xQqqxv`%pjFeyFi>2B?}z=m?L`cTQ5UKIb|pwI8A#!_i7lH zMXIfV=74qwX@erf)f5Yhz213eZI#{&lTWK&ShpF}ht~LR^KNC1uD#5BQgtZ22Q9Du z=I~}U^hO~kD=93*RW#tbZnV4M`+Gz(4-+aELHB6f7J3F>p3o^h@ zlD*<*Z9#7`gRKeeU)z+gq@gXV&f!f}@Q)Br)Vc`JT2xqY?iUqx%4ap^0Jav-kulSG zKQs-thIWUzH0HouPnp-6hOs7ycN%83G^n?jgQXeMJ>?%hM?Awc8YpZM&CRpqecf1V z;^+FE^>Dx8=kLGa86%TL?3N~RLOUQAAPp)Vwt(k7;jAHmx4Lgln))t@G^L0ffjDeI z-{TowFm&mh&r?Y3SDYo5)!k9KE)mRH=z7%<`J(dG!hFK;gYv$Y-Q+5QyERyAcz=Jx zB`N^q4x!gn*}X2XOQU<5_q}IDdOYvGW`pKmp6yyx4${T(8JuGuc2!@RMF%&esxIbO zq$^R#BK^^TFEeVzxZf|uSgW+%)knM_l+4mm3KW)eju%rcAfpy&O@b$vm*U_7$|rX@hPFbqqsReIDc z)qI$BL?i;N6$Y{$USy^28i(;Yp3}J|o*8`st>!mg=FY2ML6577V=X-}=NR|h55luC zgqPG_Ce>|i4S*pf<6jFiN&L%#cye|1vb$yAUV8Xly}!R%c-1c}D3oX>`iaO9fjC zm+w26WMn{Si*uMgL75?W5KN&f4Fw`$tergbb#1sZ$h1f_hL*OQ;(5({5!D^}`?x67 zJBhDB7;2sLREx7&>sQQFWSz`QQV1`o$6ggRBuO@BB{FLVqyes-#`6sBAWS{(QSpPQ zF6%cdxV>{dqgkKH?UGGpH;Lk_{ig{m&9?PMRauLhE?4zUn80;o$H1R&w z8FC1q8-M2&q&<7v&VlQR_CCeIEezu$WtInQ=LOOzAl~THF4%~U}<=scL~tvhLf1PEm&v`SpV_wnmxO-K1crtzwb#0 zNZ}y=oH-_z1O_BtR{JI0?;iszkzfDb79|REbfC<`WwXT$r7IK1bAoi(9%5H(vip|~ zF=S&ucaLQ`mJ&t6j)ysC{COOV$S?0p?;HDjb*3R8|L`+Rak{X&;}dOOIO)0Kkj3BW zY8~i#!A~^3?Sx>armzJ*W2$&p2ONtfvrfCaJQvpv&`}tJPN_|%{(tt-wKVmB=}4e@ zPUnbCFgKNO%3U7@gdD(EpR650y2LHFMocBxrL|KqP@>W{NDY*STAF`kwShB zoX;fS9xiu^g;FBGnv*DHrifIF3XlWa7z(h9w?r-;LWq9Mbu=7?pA{D?Po};_m&P8( zIY+!x7MR{zk9k2}$NC=KDz=j;i4D%m3JP=A-C%1*qNg2>%HG4J%wbEJ*Em4V#IFBO zH-p_BzCNDQjW87OQq12YKG!W&hjY{G;C~t%q;GSCf3WK4OkP%rnoSK!w|xxJ&ZJbG z2bcuU1NBE$M;bPKqnJ|QY+S2z@cql?8UqvC%;yv=p<3sbG+(H4c#vxk-ybOeFlt{C)%RYst?R4Ii z6<+6xU-m=R03-pWj4Fr8qJ)e}KxSg)r~^sdIG?q|<+t84b6d&Lq$uo*lxBjtCN)EjEhb#{YOTH^7WuVr}JhzttL$>KK&kw>R zeD-fu51(#C4*4avj`|zNaX0Zl7-ko#R*mMwvtPTeN(6Jf@r*sJ z%>6E^Y9!VR%o5N-7>a>Jo-MXp=JWoEN)n^e?KsFZP7^?ri^A1`YqS+Zw7iFT^ik%s zo8&IXuK7wENn=lA4vXU1NYYIHGrJ>DimJl_p|&#fWrdFVJ_kO}vkiJYt6wyxxf$=! z@f}Z_v3`qjpzhIUNh*+AB#y58!ljM1U>=CQWw5ag?EQ*VnKQ-L3aN)mJ61Y=Eu0@| z7$FwxJQ9}~3Hhrr9k(JO^dJBEANarj?f=4G|LHF={&`)vHO`XvedFuL54?W-zJvi$ivCTvrHwF2E8GgGG|7XvE23lN<)gIVTa3 z9^(G3_zXuJvl;1SsL6G6vVYaNwk@|1SmdgKTu{(r9QM^ad`-;f!CXdh6uA(hc@--bRQ6(cw5l#Atz>ZLI-M;BL)Vbql}W@3=eh4!LGj z{M=WAO`gSCq*WgFtfoo3`g&C(4YMYk!_dF~{5$^i^`}ag3KK*NPBW76-3he#ecjyi zW(dWwGSk;QMzGV&D~N06afX~`HK@;2{4CTA|2?)KZqbEqjwv)?T{lFC&u&pIFa|{f z#J&b|Odo(TDfRrUVWBO+Yyc9e=GH+nB4KVTr0^S}Uqd zvRjs)dzxA=k|vyMZ0o%Y@@^D5vf~_)zIHb(Z}28C4w$tmUat%5X|Oc_r;$HJq;^5t z6?bo2kpSiFbxy!Ms0`6D9Bb(_->}DUf4%Var>_Wi_+&zHVUF(*+C2;tNl{d>=%tl2 zh{9x;9%mDFY3IGm9GLGnnkZiV6@BqDaJGBqmS?08ms<-nx>V zN^~zP=_Qd4kM)1fK(bb?p7Y-+sf_{TICM8#gOrEKMjp|HuAmf0$?I-d~g-M;Sn) zMo%fE5m9|m0qqERITX+PXU!7x{$VuPe)P(dFd69VecDppVVR;wdfY#r_fv@c-aD@Q z!jJ)E2#fbGH-}PC`hLIhe7~#THfkjFFue#wZghR&_4!~ zb-0O_VSUYsxg7m^VJRYUJSQ$_q~;BH>4m$$Vt`kb7dy`MLO6>-MBuh1R3cu{uTIX_xS4Otk^e5U{Z9U3I0c380;K^2REG zxL*Vg87kJS#qFyNt z*i3ql1r^|W-871gIHQ@e0^}+IGS8m={;s)6oN4VB4J_Wz=lRKJ@O2o-bItnRa{=z# zy)|4HNd-{O@PYUDd(X#M|8VOCy)KAHmEiOJ=8U-GzT?>E@4&^gBC?Du#{=FP-ixP#DX&d9hV_XQ^M{+e6 zmrMnpDY;LP)GAhg0!2?@G@TfMc$GqIYyr+|kxRk%e84gZoY;p%xo6Ku2pzLJP}j0! zK!uNF{IA{YpGZIdNM`R8D2S1;18bU}wS2~}|6dgK6fb)3l?XeH2B!dHwhvRgN0B%i zA!f{X^7?$JDy`hW0sc-QeqiK7AuPQ5PAn@gqub?kI_1yQb8Gr>7|l)V{0_1+FVarC z`}O=>vIn=4gdCLbUdaWg7$S$6#F?b|Flro>ghYAgGvaO^MvXHFm_y~A`Z^6I@yx9` z3u`HblsGzAlLOd}o?7g*ee^D)5>B>^+|!K__e8ncfz(hf{9+BXkMT>2aEph}5GYz* zZX&%LNt*`!z#)qua6HHk39cpZK>O2Kz7mDcpLJPWqFN4@5km|xVX*~V@L;ghs7;8% z%9NXLye&BF6QY*naAY-NL*fI!JoMYhU8&SZ`Vdw>wfQ=C`^*B5r>)<{6VxHsSaN`SlZa| z_~-p&1wQ-7E3ukxOaRh)T?!=ok|mN>s}f(^O0wgoXf#~rvMNp6C!z%)kgO5bBW49@WFw&_dO)gy{2Xt?DFlr@XW(dyStY=^dk}8X!tXtw4L{mjStV{VO;({aOON) zoM+&aw_A&}>mFupRA8Jd5_2BI|0HZgXKbsVZ_%(7XMg{EE_fCQtn1nszwE{~gU>)? z3j~Af(YZ#hgGzB$^SB>r*1YtSMwDkSW&cyr;Rb3AwP^F)T2 zeZdg8#`oHKoZr%fr%>EI>Tkf`cczhuh|o;TrxB=S8rK1zj`@sjV&Xz}-SN*MQG2#v zX)fv^PCAE3^{zs=hI$DDftzgXWest7JWq9)OWtQKx<0ddMED_zrm*f?`)d2n(ORo& zitIyA(K$>XGfagPaG%5^=F!o8U4daXH;gqykVXpw#eA@`15yM%NkL39%sDaEf~^Kzv5sGj zeW_4l!fUN-|vP0 z{EvUffBeV4}830|!IK|IUD zj9uK34i!g;h}`3v3%Yc8TU-*^myX6Ry#>)gA}<)$nDDOny1sB?x0P;6?1TK%2{3OfzqxNxNN$PdL&yNta!2zxPug8RT*^Mo#;#&YiJ^` zvs`brZwh{y_2k*$s38+#Thm0T8pJtcFKxRTREbWfLD{&Lr4YJU<#XLHrka>M*BkHe zH^T@SR-j>B8!l~lT^(|DOcmJkM9=IPQ1)pifh2@;U>HA(G{>w7al_pdji$jyQX3bgi`Om&sQK9j*p=pQ}<9Xsvm=$)r3I3Nb$KJ~#AsdKRTMqP1#JsLn zXTTsWK2Sx`iJm9KGwmotV&}R383RkgjMJ~c!mixUkJ(EjMJx;{fr@T=u{U;onBjY_ zH#7dTkyevB|3B{sGkcB!T;fEuFMNM5T>Zv%y`o>5z0`RZ?fs6~@cTgn@Ylcm6@U5j zUjlQ?GfJNO_6)bx-60KDU}~>rqLQEWec#(mJp+XshS?AU^t$kjfl+6f4qp*e>8wIB zTdat4_jJv z5@W5XW15RS!!a+If&0EJaF&?PVTe=Zu! zX?C*w^Rg>CK3C(OtUc}t2G)%=floiQi^=`|px@)ZgF&%g zb+&~7r;+LE{X;Zu4F`47@P04OkF#rf024vVn}%ucpi{wdb;W%L;b!VPR^Nyi&xIOKm%&ydy}D$@eDK(yk0Mw4|?6%cEBR;(sw&(tPV(*BFZcp zR`cJTqP_fsXYH(=UTal=DG4EYSDnv*_lEn&4MmGH*_{0QUikUM*JtY9-Eonu>byuU z5)&uQ+CsX=f?;xY%>KygdLLtAEyJJx{1yBCT+k-?`thpZPHT!Ly=u)sik+S{E#LvJ9xl;Fb6_ImdnG7{f!v7Kje!Hj z*hCqn`zHDg_eM|ya*;}^=H>BMtocU7_m4#<2ZmdqJ{>4~VJqaOrszH4L<3#D0UXxk zK`%Q5TV3RLTI#bCQ8<{`X}IfZA1U&EP+Hahy}LE>A)cN|@WdEwA=r;DNjXx^{?TK3 zirwz(YnMq zwTA}jvMmC`mVq`p#0tNii&%9pRI}ZQ1&sq`J}XLrM_b#bkwdIEno+E#%0zgj_;!f( z)rF*IqjKOjQvhlr>{Hsv9?wmI0T*hwLRdyD~?(Fxtk#hy4j$#in!Buj+Rx}2+PA=^{T zub%E-1iwsg29;}99(c9I&|QX|+)npIu2H$Br7YY8^jUMbws6G@xBd3?^b zDV^@|{7qZcUG9}iMJ3ID6+8m-o>5+cz)OFm`&0RwC{cj3(XG zjc)3~++we3xdyd<93)aGOacKmGFT9o(Q^?mp_+ZgzwS#?Lu}jVp3^*2kxnnFhx%Sq zQ(P;NNRC$PlBNl^#!XhyG%!%D%~?8@5DU^I9A7 zknD#`e#v==mk%+=iT{G^-t-i}&UM~6$V*p$%QC2P_=md}$KH{20U-`v1b;N(F_Gu^ z>>W))2AEMzta$aJ=XaO23W+$fc!p~Y=X((YqVw~#I=|%eQEL>W(#q9Csse4mFLdjw z=E0H1%z6MP!naUQDkXZm?eADrp#E7Gg6dD_0hfbP*`CL$Ye=&r@Oeqy7(R+1CRM*- z>l6JR3B5*V_pS)4&)Gh4_A2ee)Rd-|<@=m>Itr$(-M6f}d(aOt{Y>Yd-R+sy&Hw6L zql-KMt7j-Lke}x}6c)X;=#eYaj~taF2NwOr{(F7)dFf0?`Mx-$5H832nL~p#Xr#Hv zeLIKOTCj;AKPy{mzaWjLw+?s+Avn%*ZboEb!={@b)k4_lyfWkFD`3$J zX6MDY9Ym@$8Zmh*4b?SAyRHn+( z@ZdF$qCr3ceV2mXazn$eSqOaefdg-ihFq?3DVCP#7g*vnH(H)wGz2h)k0WtDMhs6a z27K*m^$f+JH!jgiL}(?w8(lnC9^AG~FpV_!pwBCUk zVykNyf*P^Sa}1hkEaEZPN&8%%(!?4<#?8HMn`zDgN}eh6xiW0J7i|CRYsPse4Lj-j z*EAgPv*^9!<*zs!DTnXC9&R$mQ`o&cA3Em^*^x_p;C0>ctmc_QrRaBI&W(Fp(%^F4 z3Y_xT^fU+!qcakn+DJ758jU-xD$(Muado9AwyGEX=kLGcx4->{-~RSHe*XTAmuiT+ zi0Yu%>kD76ANcW)jpC?FPzWU;+At@XtHPNUz}J$iaA30drr#j)2V4JLlKps6hOW}1yi_8&%%)*8k# ze9s5Y=SiEwTdEmc^A{LFi*?o}2cjx876>MV5p7Zx0CFkPm*^sp>O_@YbJC>J*#%m& z1(Z7>&vKSR<5O-qQxZU#X<1@tNse z(e(}!(0brZv%)6S9XgHu?_rv^`1_NtGaWaX2F&}BNXP`xX%HT)Dyek9(WG!htFP?pP zBwv`vnQhEj#uVorTr~m~jp<0|+{N=fLi|~41{vg5#ZX5#$C?xG?{ED6^LPB|FMkf< z3Xw=&{=j8I8mk-OVL-ye*+L+7WA7n0ykB8@Hj+s>cURKFfC;w<*#G?5ksCp%X#f7>5I9~;6$JbJ6 z6iKObBKAT0ChzXL=d_n}=yh>TP}a|~URVzd_i3o7C@M(PiGOHJ`Fn*JYdf^Y^moFw zq($9W)GBd2%o$1QJ6^;}{Gm2>2X_?reG;qZPM9x)u|v~o(nzfdM=&Hwj)OHzNySb> zYt@>rb(l|ERUA1SW34b1wxFau(>U^8b=TcvE(Uqs;<<6HJ3!o(9q(sGT~T#;M`$C% zZOVP4rf&xgChwP7ch-B>70uETpXb4xBi5u9=X#K~)kxrwysMc3bDQnw3PIk@cI98q z^6hx%H|Z?(L?BG5kO-tmQ%v4NJhvatkmG!}HO|~uO2e~N;ic?Z5T3CY^*e1r#>nsQ zqw77*mZTqrek>H~X(YIB&T)7}LYxP_dYCE3U?{^3zH+UmHfBMc?7LqUzX;iZ+yJb4 z5Kd%h_S_2xU@77Ty2?J%=QtL$?QjXqR6FpCi38~6dfD9}oAbZL`oh`d0ND^1GG3N4 zNuDYDz3v&j(iB{J8d7R%uLJYKrGODiEPJ5GA1q=8x6N|C{}{NCwwvox@9g%p`54_ zKMVpnq_ab~RJlIH^Q|cf(J*$TEbxKc5H38sZlHa3-yYcaaQa+zvCcthx@!FBm61v! zdI=7HKr{O1ce|ZH>!Yvv+TPXF0wFyh4_oJfB0r-{G8d8+9#~dCu++!{Dhh9&>!@*1 zU^OfgqTYoaooTAU9|!~?ns2-|*x{aCFR#yDwUMgSul5uV;A)5u16D zLf}L%zQ50y8!5`ceu>Do2WR5Zx8z4XOTO`ef!KBqd zJIzB)TS5^&200!ZizuU zFzko2e00&{!ysnt7gG+!#ZiVO!RMNne|Cv!2Np0zt9%5M3tO3-4uo@S8{2OjoMvZm zVnYMXn^Y9+dV_PgmFE}R>*O|B9m(nsbHYvx3XT}P?lnKfgTSd`|E}3(-vZyM^*v@< zPq$!`NU!YTI|RKnvNYX&-?i^2zK#dYNpsMm#d{5l)kq+{M)Dfdpkc>b&Pa5~!YS=E2!u|U}5z5ar9K7>5i`d7Sm11(9$8x=` zeMr)n;YAYKm#HmSlo)4=1gS$Xq(aC6Pf6MdH!2OGs~z`Eg9EHch%<{1gN}bzmo$DYsjJ5Gqfj}zDs#O#2_$@8jlGR& zV$X#8X`rrWaMOSTBkCtK&WZZlbu9PQwrPyG$b}i}Jn!?v7Ho`dPLVjvzQ>5OS66nr zItRmgoM45?Mi9@pD-Hq^D(nXg@#p>i#&5s<9sl{azu|BH`8WKyE_}5gP$=}e@b%^R zdi@4vrIO86l&{v=)h+v+lII|>o7fjSi^XB{iE}80NEZ#^a}4&?b1h&;Zd5Gbqt2)L zEO~D(p`|W-vOoJYVB}iO6mFV(g=X=HzakFw2r&?89umc~CMI!~2EZEc2O0?S-eQpN zP2krZ6(>wb&o$7m9-W0P*4;TDEG7k0h)$$-+!tg0&b!vHHEt1X(IRF*BGooq1T`Ry z#5RHC9f;4TcqA)bfaXChaITqG&Iu4HL1?bkOo39imP(UqtgF6a=(@N+YGRcw((V@3 zan;`{^ z`wQ0!flZ;X#r@Y~-5kR(hC!}4UkeVC7SyEwJ$`dq6#g@X_T>v2ZES4VH5^rmcMK zUg)M2ZpJ8M33w-aFNeS1P#QKfx!ttE?;C3kjQK=bIYm^7yUnErNp>)e#cd}cFs5O_ z!U%#^i@JhR*9y}Y-E=?FfY3$SK%(j&zHV>Lmf zytSv%eW71j0XYF^B*0axn#E}Pk~Hdfn!?u#0v?ge3tm-{O&cjpf-#>k93}Zv7w^ts zMG4JP+Sq~0Dh+dV#C*8?GHFuaTx*5%E#8y4Nb3os<^oNOytB+TU@MZ_*LAUihwE1N zq7QwhH(T8!8$%Z-y{l&6oLQ#%&Ky`{0CPf)FhS5<0@Lk_ro5JQf=1)YVJ=Tn2Ezi+ z7-giW&XNbxb&7yp0wde=2c za^6VO0FoZrpER?F`@co)j->9Y40jUPA25K7?4Fe#9jhuc!Ve?}n7t-eecg(Lxdv>m zIIrhE>ZCge_$>H7&n2!|d=DA7`Wr(u-v33%?fAlbJ#}8O_d85}?FC4~d}geLAlXi% zK4H?_rT`#n0@#F7bdkLqlU-{qQnt{pFlKedulpOn=Z)SQUZAU=wRrEHnC39B%%pWx zCiM{o$a_}(V%=m&s9-)pGl-1)EmlfVM;C=)M&!+UKFncZXVV%M7Euut=R(o?K^u03 zYf!9=0+Kx^auS4T6g2jDDIS;>pBL;8h{ZrGddtz*Mv)~WgFO2M`z%W%LTk9Lf%|4w zwC|WO>5Gpb-N>wB+go8TJ1rNzs9v8Ccxs`=365_2E&s{!mC3r2h zh<<$bF$TsM$31$s3qR@K+W2gz5iNS#jZ_6R#ltu%B{|Mcf-oamqUW1-QnA`@TcGM8Q|a{WP8{(DFTf z6@3XL*{o$GU_G2YNePnIv{JoVQe-{ixrEV%{eOq|GTXULo=W@U&vHS{2R0iam9=*a zsXm*#+YP1%GCc?4iB33Cq}7;Z5wh_Ot<)EZLQUN4M~3S$@ILd?YXd37+HTOK@?oo( zq?9v&;JOAfKmMWG_{7TpbKbZf4a&1&vMMY1^?E_|`f$4Y;qu4PsNF+=og{#G)7|n%U1gaZvZx);G{(H>lEDY>9KyUGk`q5B2^M_SRtrr6Vy7kS7gT;0leB`Rj zM_zci@APlk6RmAjt>LqoT>=1Z;Qqr=m&4jZAWDyB($TbacQiKogn3?i+?Q}c5v{sr zDaR8bneRqoN6K-9?ZB5rL#NuPwKzzXD{PBn^0|75t#5bv>Nj% zRtQy`9gaPqE3=z2k1=yg68oMwx_X8-_AK$v!u8je*Wle(ibteWZ|RnT8%7Jova@*3 z!8a@p2HJOa7ZwYp!s29}xudnCVTbK*%OW_RNr*)ANfJN9hA9tu*$fVS$UYQCf6q$! z|FI4p@0n<*^^}UXGY2L;1A+bo8!f~}*P4gIE^Fp^ACAD>Z|3p&6CoeXrnZOAEL8jl ztg+nRI5NF|#*^U4Xcnshur{`X>4te$5 z-qE%_IS;U@?yL2)w_~`9ogK?(RnCD?is~{a{5;qnqB`-N6J7!)*}0~v(k#5crh;>B z{C%#|v^&?ZFo#uq=j9L=okKi)(#|)UU4+?=DA#q}^AbZaXEQVBYY=Yb;(eYw(6`J_ zOukvZ}J6x%SLp~Z%UL+c3 zCmw?o6^YC>Vz*BOzjCc8^?Mfdu)=|#$hsfFIwiW<&kYCV#(mxoWkyC($l{=#ZORje zp9nj;Wqu9~=3Eskk!~YPcL1IGsu2m3-=*bVg~;^vgFH~;J`QQYwI&tIiDu85FR2)d zjwLHX$bpM*Qb@RLj%4Ih)}by^j{78vu%8;ZU;E7dI;mGDl?WWbo-s-JZ#Fs0u_n^W z&-etcahW~V0vqN$hx8sqq&c5L62`$;Y9Eel`q-On8J5rO=9i7Ss68on}hkIV< zd#E)q5WZVMehTE@t|?U`k|l+?Qgn#5Gu+Q%Hg*(7zb>wWhv3uFY2qITR*2wPb7Mr6 zWTGGU#(xO!QU;RytkQk@%o%G1Yp&iJ>y?mlEn?PlofV0uSxXl|Z;-?~+N>dvb#Sk2 zMJS2LA^(UU>&H6TS_?YnzS+j7&`D_XE6l3@t z*Lr9;(>kdSX25m50F6w|`OJDR%?+}ooO!V%c-3@yu2~iWf~-wrz`Wg`SxcvAYh*TP zOA$skJ$GbO?gh41oi|ZJA~ryC?<7V!@^x439f^R?#;c~_HHBLl>9Q6~y6QtSmAUUvOWvCTHt0y zEHK~z-fLn$H~!Tk!!)y;TUYcJ1D1$zvBF%wUaz9eWn)QkP*M)jn3>^y-xy;A4qhep zs$~@ehOBSa;=3AA3?}jU7QDy~ooA332r6W8-$Z1hTk|4IHSZ$<5q zbJ8W-VzMw^gH6o{(v?KY8TJVb4}njSOd&w^c<;KDQcM*fCy zSVY2!$~cg4&^0=GW5}0g8R5DZ7+WK4ief6@5M!b0`p6iyqK9nSnUy=c>OXAf*L8LL z>wo-#KmO;xhnQ!^b#6SLjMod}>kDcP-`@stVo29wRyG}L%OR{G;vS5Rl6A*(uNbU# zVFvM=O>)`2q{PWz%KFu+-?f;%EIrOVZFCM%Z%nfgv(VK!@5OU+JF-hDh-n?YDW*N~ z{4?uS4$*B!3%LvK_Y-0b4MAR0g?FhQWJE%m-|heaAOJ~3K~w=GDM`^s2q!1&Rb@jv zGU(%d9wX|whZth<6ln_H&x8|8d|elw`DXS!&$zwOQ5{a#(Hg%eFj#BF;OpTKdY|tm zDOkOaYO?F$%6y(D;$x11bebk)=P!I@qN{AuVbL)~pd&JkT_`s3cpeo&Oh}>j-%lX; z|B3btAwiIb>@Xs<4?~!-PR;X6Wu2GEkSKB4q${4F@H`XmcVttCSd;xBY3Q#DUteFi zu0hJ7l=xW=15ePVMr6+Z`i*%%cwM6euo?{oAfKO}U6-H)-X%`85Rf1Q89L%D)97SQ zJoTeb#fG4Afh~HhtdU0x^t6%Yl50x3uaOakW+j%i6`A6Zvu&^$0-pC=uo?Tjh%#-~!4V*~Sqdp+NS!`*NUKQOz4(rVk)-Md08uH$H(Jus!Y zC}R?(dMk0>Qd}b<6)S!q$r%*lFPm_GV*MPQ0-=a?vAN*99!(Wkj%5>LL`^wKA;}qw zF*fh~-uHbBD-U;X=7($FG`F9TI_8G;7)eek|a49xO$7+M^yNYP&22 z=9oUq{Av__2!QwV1brYR)m%B&VT4?a%xQSm4SUwd%q;h$sAnH;-4S&a@dz<5@rNS+ ztD#+;Ju}||*|k0e?mX-4NVzleOp5fJ=iM~Ah^P3H{Xb&SQ%JPdXPoh#n_0y%m#~at zjXlqiGT1G5*!@6S3o|Ar393%o*~I7#FYVP|5w0Jbw%kGpVc0?{_SIHW3k4s<#*8_P z=v%;^hjdUzKdy=QdmdB-t6p*tnL2QNzN@1Te80c(tcaNEy8FQ@f;C5gV})5{(mwi6wsxm5(s z0q6}QcA7pyC>b-T*Y4f$9rL;PPT#ml7fAtpzk1BS*|YY;ZU6Op{e6HQhnCDvS#)*k zhr20%z)H+2(NH-EJdt?mmiVc*OD7Qimb7`gcJ(7iI?eJ=^GoN##Uq2D+ z+tHnWR#_FiV4s8LBO99qYG%CVq4-3s=YzeLA7TJHHHd=jtpg3EMEOM8H<-ysPT_9) z)4_Ip*WNiSDoj4Hefe_nGd*+eMmrq-I9L}RF6mX-5@&XKZ0M4K1N&O~iSBGLBEHkT z*3jxZ)Icy>Y`SxgDhr#UJCdQYj_0hQcs5wGuuE5BH4)4Y0a4>XrA0F=Re`0-WO2l%dp5AL$`L}8 zax>Px5x{HZcRCQ~vI|H5F=428%cJSxYhpn#aFQjYvICQxp_LzQyD`mYE=exA&xS~2 z#xVYj0yyw-f#G8Y;JAp^+UtI6ox?1r2*?iyC5~$(m4lq&X1P{Y3`(xNEWpzFl&bj{ z&U=Yinr?S=Hn)}mLEF(1Ep6V=KA1wI);TIje1r1% zOCkRg?FvB&Z_K=!?pvIN5~sNBp-}Im23Co~J`Y$~ryFyb_A|`q{ydQ#d-nN5l6;Z- zDSSshC~>%R#xN`QPEA%@?nnGRb~K#yz}v_5;sB&u`L+B*#JW-XJ105^bcr+%RglpFcK8%AdW3=aC{!*mNQ3@F2gw&R2bF5CUmoi0h<)W zWMiVW2BW)6%lZ+Yd96jUKsr9PP^`N#l1(2g^`Gh)y(RGHDN$^Sh>~EU8XR+>dc&Jm z^Fmu-*h7Fbv6iEy@LUDs>H+%XVB_am*nJD*8tdPphUJwcmN5~DDR6c$19`5`b6^VH z8AqUrw$AtzK45~tQ-`1s5V{!y`OIb}><7|5-=C-n-z)M7oAyY!LSQNX{ICDQ@4vob zGwSl^nfSi%Xv|yGMAz2~|7M0c9z6Fu2CVtHDLhnNP|X}pFvBp;^{OvGCY#S}d`m}v zjTkx)g;8+Q$3^ilBdk`CS0a8xi{7Ll7A2Nyk^5;rO0NI?e2Q?viv&tK&TS2jCk8I-fv=9Q zuNOw|nD*Y$Ii9qPphc>2Uz5Oc=e<=B*J}%}FJ3P+EDN#!7+Zs)nnvru=lv8Dup4SjtOCmUO3Oj%QLRFERW9g^7747Eh;l zWY?Q7?xk@(E&;kl3`*=5j_)-AH9Trq8iOEZBi&ax*lxQ^V7Sy_Bl>==_i%^)`i8mV z_0^$WFnSANS8GMTG+VfzbncS4$>H+C+UR=r55k!j`L&6K&$H6<1y_YrsNN)gXKx|& z!iw+F&i>C@m^aBl8Cx|2YmXKHh=@5r4I9_{9q}VgFxQQF2fe^xK}?ZR`L@xUaMst3 zXF8yb^c06muVJ>kV{}1tgj^bIe=|&--2C*;t45qbE^yB?L;klgTEv<S zatiLJ8Lr;*3-W&Uil>P6ZjiUoDnfO6tSP;BqSoWAlYP*PN_1vwKXbx0q7beo(3b=$ zkZ~8v{p9_=V~v)m!}IK(k&sDAv}ZxriuX)3ObQNkM&+!zpr(+nXvF(N6!U$D;R=j% z;o9Oni{?IQO z`7P%W3uaQWtx%pHcpmS4#JPOV5DA|>i$lmCL&_F3HTL{%NyQ}X*e)YM!XPr)Z{c?; zY2OyzNAB=A9PqQmu49Z6M`ny}P&~ri^8NnCb5FJ)7vA>`wT}Mv75VDR!}U!;Sqw&j z_xCscodQ;yJkKZ&fe~}XKh8rtvMS$EX9oAQaQS8r;JNQD*v-fv-=?A`_p^Ej8)L9q z>=&3Mdd0dGZI(ds+p-dJ2l+o#7V&1HuopS%&id)DUPZ)&=t0#=A-EK2Na?NzHVtnZ zuKtp8q~TkKBd6CLr91gB-K~zL3PVDQA12R7l{zk zt9P*$AUDuRIfqd9uk*~myg z4znp}jZE`iGs!ecImNDNoNFAyi^qV!NeFyb2?%IJNuic&)Ico|_bC)=oPT-sLt7>% zlu6AHa}3BCi<+#lO&-k89EM9dOyRs1XcQMWTwT#*6!F<+e5WxYiXcdqj(g2m2Wg~p z)xQtW)4ich%Q=uQ<>{K)4zi7OOLvkP3wLdFUwY+opW*g$;2{&W84K~w70!nsUBqWr zW4Uw6buI^bedj2o`a6rEmC7-qwsLr$&hV{*p)%&kgUz3xLz}bkaK8Pi<9|>03kkK$DE-M-c8GPWTAVxx3T<(0Kh*6@>?vRg^{$}EnPl_ zy4<#5OUiA8Gf$(`Lp#^h%#S996{;*3hg{6%%p#TDP{~GVTtlzFD-=F#{Ac|3xfZZc zIP7SQw(Xdu8r?sT?>mPwU*vFS*mm&jgrko^%Quq^y(Ac%nkH@tm2usazKkX81U9RSxxVLinMmL%Ig5P>^y71m16Q z!SqtvgSnR4upE76)MdMh+EK zw%{UNk#Yz>Ry=@}S?tCv6x}#f3D$RrPbw>#IlFWWSDsqpyeooXtKLr(e-6E}*pb6I zt`dsjbQqMwolaG)yuc`&GyNlmUfZ2t&d+M394pR=Ok<{M3SrVg?^#r6Lmv&^n1`DP zJ?v*P8fzX{%_Lh$9Kd`X0vyMYHSBd&K5^^7T1V)!`;m8^?o9^~NNB4)U`H=Lf~ZKVnpbNK7jyFH%5>vqlV5svd<>HlSjUPlO#+$GRgX zPQhjVP9>dS=U?lG=(Dl~9aXFRz24&*sXKPaeCIs_v!!G&sVOCb|BJDDuEtD zBKbh#`m)B4}o6D1q*N$i$#5`T9CdkH6>m98} zbkZ~nJSV@x7Xwz-=X7B; z#^WTm^h3y*2YvZ`Z4`TrSZl%9)U61m#J^`v?MB>R{CN}7rHDax4*``=HZHX7TB)1` z3bPPFq&QLqAF)FD>GEfKQ7ex9*#hZV^o0uYHzi5s1VLaW>H&o3Wns zhTb|x8{vfV=nGuEL0e+O9o>8FNo@=|yh)uoni1uA?}K8nc%M66eb1Z`sl*|!%?HnX zVpiS<+UV6Euw&mDbSpUpKv*mK3>M_MWecW?am9LlKX2G_yskfpY&HJ<73k^K3!goo zbqH!(5zBhIjI?3RaD*w(JvzpY{>h&|=ceCe?Ye?qlnu)1t5B} zS#xH;ruDX|P<**@fp{k1!5q?gOg+pHn_u1ih1AB#D-u>P*+-O@m>;F znuz3dZVv5bAUYAXAs8BA5MNfYCzaie2G|495LV4Kp*`*;U})a9I8#E%B(B7#$Mt^J zgVrO?L0KQBQ2Ch#SHtA6!MTU(VVqg^04oS1y@wbl%@n#7JwfhR7Bnqem~AqPm-Vy- zau*GZJrRg0{0XFg5*U_ms!`Kjm*$>#T`!D&K^*x0{>Ja$-*7l7s9F&%^AMYzM9L3A z-f=d{ebgBd_{=cr0r#0uUr+*sJ<+F#9J%i;Z?e(Ct`XR2R3tdXxoAvaL zW6Php%<$Yd1!GAKbwG>}lB7|244vQa2M=qpAP>ag2|kzwZgu_8W2hz+rAD7@;*YOa zPy|xEV3Ad8GX`=^8hd>-pU|BP^H}FqtJY0HfVRd+GQj4I2B3GI!&%6x3NA#wYR{tc zw^asmp7SqKU{n?Nyx}v>C2JZDBtcY2cjPvqNDSE63z)tbxv)sl9S|L?#~s=nO@Ny< zp<86HD?B8ZI07Af!!nb`c47Y#GULHQ@j%y4K zYA1|+*xoO^u76>S3$6VQ!D)_SmZVNN=MZ^L27s$?e0ud*_F$mg-dT4!9EuI%n#rcT>E_V#5vwv|){Rfm~S93dZsWjNO<8Vj9q znyMj+>#d<{)Iv|r-`vqjp&VmC1|uVBIEa4BDqOo6$#;x$+5HEH=K0@tFErZ1j5gEG z)1&WsfysxVv-K8xsfJJ>qaL~{MEiDF>+Xw2Pt?O)`K(w2_-+)vu=Px0i)Up8+3S8D zNb3}oHFVLa|J+D1cHHacoY3)VU+8k36778^COP-)6PGXwr4Ylf=f@N@rw| z0^z_UV$P?Ym5lL92YHZ_Jz^L0 z#b>yG!6BL-`IhpL?VX1)IfiBF+{zsFIP8ydD6RFB^Cy+;&$HmpEVILH{!hhAW~~EC zMa_2QY;JR}q^6-^I^^M9*rxXXPzJ~+udkD7i z!CHfgbl{wr`|S!jbLvq|Lg8>cakDwBlzjP#ryBih-`~WOx_>zJ&MMSTCwZ3~M?;w((uH{LoMTAoe7W3zHfs5&tk>B4p93}xX_4ctz5??X!*HkHHRcMH|3m$K8-&{mi%uOZDOh6HRVm?E0A`K+_ql7l&OLvuFUnF()n zU^n7AWQn{>B7`_}LowzS?RFgEGQzO7}-+$0O>_!I#2Wo+jPhk}f zXZnHJJ5cC#4->7I2=zi#rg=>YDKAvwtwa>(uv2swzkC-<9nC=*e2cYe0C5as<3On8 zc*RjHr&uZTMCBOL8n!SZ^X;4T8t|UKQ;yHF3v~Z*bfYr7cnBqiHAyi!6j^k_H~ryU zZCfc{#lLTyqDZK%JBw1cjRr2E&x%HTet+1eAADex>Y%Z+P(R-NS_@E_>WQvHV#U^~ zwN!`*OOZnk#`E{&JyjJtAx|@|Y{8aqXZ%*XZrA>r6HfHBF+VFw2Q|!GJ0H8Xj+O}K z`ILh@Kbw6j7;9aNbs|VWdq1#`XW^&ttMFx~Ad>G$#89B#rHq;IL;O|w+eDVFjHdBT zCawI>#}5%?1f}lT<0> zS0sf)x3EVKy zYbajpM8>UT?UB?cZ0ZNk+BKlWF%bNqFsS@ZNV{VLw!$9p%H0G-9a(>F`U>x`pfIS> zc)S?rk;19KV@uY|qI3{oQyerhnxERI_Pw8Lp=Bfp_RwBFga&>rj&kJHlbXPWMP9#r z-crF_Q5kDu8Ij+z--C4c_NIlMErDe2oxbW2y00TCLo1N~b1e?^H1NEV;W?#R#>!eN zo4;}jIlZ#HGdiga`Bp54t*$Q zI_kd346!ykme0MRvIb3Db$nhw;y`$R*feYw4y?$O-S6ZUj5K0<9Y_K~#z$lhZT`Hq zyTeUopJ5K#0z`|t6#4PYO-3|y#bb@hXE=rE=IQEPm=Fw&p=FQc*CJEI0EF-Vn%g;k zARzOcVRl4bkP;FOWZrKHS=){qiSMg)Eo59z4pac(dcE)(7i>npHS*l~#6We;L_K@#kOvjql&TV`zVUpZ~o~7WUUsqtw-LRf{G<#b)_yU_=$|;C(VBB`3NQyC~X=G~WS+X@=SK=XGBN|1_ z-_EF+THjrY%$E+e?Axq4iQH{l+`4uiw6+kE&u22OI`@q@+pOoVOhtv_0U*7@EyO@d z6!2P;!oaoNI>aTaG-9{2Pm*<7G>*r3q4kFAx(fZj7W0#pjuBOuKR44p*Lwr14B@Rn8?2^!N7-Z}Bb*jT229T93atZAES+n13sD z4_+@UU+CJ=HH173fs}PgVuv0^3MB$NaM_Ky#B&)NqmzPl(u~Z}25V95p;Wa(APqQZ|0P-1Ck}liUMr1Lw-d}4~bGTghO#eCN*9BI)(LMeD*-OGGjL@0gunGKwy-!heE_vo=!J(qEr2-N%cuitooe^>3B z!$2#ef&UHNd{QoFx&)72m^*?#K`}#$!x{w&4A9+m+Q)Dx&;9#+r-wjZc(zHsZW1B) zpf5#&)aA?tV>CjNbL2s?! z$7j@K+6LqbytkU6F=xp>C-?vWAOJ~3K~x4gPR%bA{@K*Xv)nt}nFqSBaK(pTdjWnEQG3RTxcmkZlEV#tAVx zasP*i+-${pAVtji?leJHBnE?&hCPE3EzD;`msn(yR~>&C7sj~o%=-|edtJk{&ZIFy zeh`(+jJ+^Y%WPpi9A2xVky3HvL`C&$& zBN`d|*UK!CA|k17S<-hjo>`0jejhDjLD)O9wP$N)j`_^MjZfS0iz0i>%@_(vl$!+^ zVy%VFNF5>J3N)j*1Jgp}cdsXUeFy0pu5mxpbp@1I0yL7iOVKC8Eb3)I?WAI)k!_3@ zXA=u^JrQH1`@M2AJd687nvJ_6RV7Ms=+faZyPZ zo2-wV^rk#_XIw~%uOfzK#?K{@Fa&I^_MqK*+P%fRLuNP(o%^|tH6g?uiV&&BoM6u> za}Fsjqre}i?&xt_n{Mg8pO3|B^~@W6QK`6b-*Iyi<+_z>Z8ynNd2l!oGsjFpca_tf z!N+@Ke&f+-Pt2Gz%di}c975zUJ{{(Xh>QXDy)!y^h~JK9d|=o25Ci3|05;}!H;lH6 zC|%BSVDdKpGBdb8hpwk{edE;oF_8VtfBww5^vY>W1d*zI{P{m2;!7#n{*DO$na^EV zMlK+krQ?YY&0%r6#C&}?2S?Kygzurg*JuC8K>ToB@1J2ob3*T(_!B><0WFFIe)d8~ z{Kz*>6?(c2jUtQQN8QWo8qDbS%8}U%PzV-6L1z1zw^`V`jmO`pt8|2oky(8>6gZBD zhb__Fh_jFT==<;2Jx?5>d_*0b_bWveYlgybT)nckMIvJ-hu(H#$y>u{qcTIX;q-pr z`?*fMW1>;H*ynqg&fZ1$iApP)gewYb8~D0`XFgmcrNlO8W@@UFlE36IieFY`QVTOt zWAL$`^(-WvB96>v1r_5>;@}hpyFD~h4)m27*fJ3n@29VN;vzC`yOFssTQINQM zC72!gIUOW|!{MK5W+z>w z(cQa?w;VJ_)7L*-m~tSrV;ICnV3QE%*dA=`Vm6x)c4%LD*!?lQl2f>Ktp6f=kSWZv z&mu~33{SZUW}Pr?XCmi1k^?$Va2gxjHF~tnz6}RkZd`g`7Z(R5jf0}dnCAhUO(I$G zj=UHnu!!sR6b_^_obHV}7}Hr^B4r*vVOypuKjJX5IpcDOaBRDGJrTLtU=WlbES;G- z{75%tQf+DVyDAN}ng4A?3`w_6 z)Q-bI~kR^65AdIWS{VsM{Dg_i+FDw%)qMHO-u` zF5w1Up?}~rx3lh?*~U0xcvR1t3+1|YIR&9wYqeGUglz{z+erD?I~f_t_rRQPWDOK& zq6|~8=}BGiU61-HGpG!ySf@vCalm^fUawbupB?|Og;Z9UuJ~L@e-h#qQv|dH6wb!K z5>d=-H#XPJ=sZzHPxp5|Ule3iB!cI2?l1{=kW=_m^?FAQ;Il5t`a?3uw4w~+Krh(t zg`zX57Iqbtfgb%927dt=r-Lp2ECK>os?2&-71m2U*fW=H@43<7>Am6VR|#ffuM%h< zQGbhIP{8=Cg~uGtQ^mc{07cYj%n55+!?YC34x-kdC+(1 z(FU$@MbC(+`Lz~i=AIT7o8L=O0;kSF*7H2^TqHKK5lP8=^h!|+n=n3dP_)9$Si=2Q zy@xo@JiwiM6a}^%s&`eaC3xR&{QC7Le*O9jfBpK6)*HV5^@Wj+Wc?Se>#snHv!QI# z;f<~jcg$%u)M#C?B&ik5pQq~u;<)q+s-3v_Fbj;)@w#5MR({`aEH_-&Ym<8DS~U-x zaTZQCt!f;1#hiw&j(#bccPuqcdVuAa_Z!oJ>vf^OGTSnm$?k$RfziI=UOf*04cB^CzB7Srhct}W zMOUuWP(09^L{9b?q(BYR4bS_b+k3<_)`ZQ&$!7y_>$s%j8UxaS`}q!`qyTD;X^x>I z+%1{{hgkdS9M4AK`@Zq@^%V%|XCkSdPMl}cL3c4-y((B!u#5=pE_mi0ZpPMP&!)ge zIUs9LKnylx5A52|C5OqgaLqO9AUc0pJv&K!nti{yAch)HHq|0n%;iB5t0d9bG88m&kd;Mrdp&j|Lu?&ra;XR^+Wvrd0qf%5kS zK+*dvL<EmKgfgwsB&SII)6O5gE2gYzX23dV`W;@~m0Cq`4@_fR~_uaerKM z!f34OL$S1BJvZ*>!5}SX88CgqDO70?T;9=T6wTn73o?TK@qT{;W@zXbuNVH+M@8N= ziGk&M;@S!Ksp>l?IWvdD#~D9y_nkB%`Ea9eQE)p%P9otZ^c5NAk&QesXJ(Ese7(Mc z_(gFXCm9`~3^= z_n&Z?aEa@DNyiXijE3irFTAc!YLpe7M(TP221b04pcDB1cn+@X!u$IU+FWnk_M;b| zh`PD4CO2Dn)*C|_x?GS3Ob*@Rt3+f&m#;7nu2>UWS1dT*Msf)UM~lNVPnr>t%Zr2~ z@rKu+^EuB_#JkH8bI`8=7vO!*$Yz(0(FYx&;Ud9$e zllyOna~NfGltNCR-xdZfT`UyVL964?p63di3-ejHuFQ&7thFOn6tPEz_;!*;qnOWw zIUVo!#99h7fvt$uT%>ZPs51oZq(peQg3~=3?~-$$Bp%$8QiQmN6b@gP9722jq$V3G zuFmE@Z;DFQEo&|O{{2Q<6K(X0;92fybFt6O+LwYYTUKIZrKu>Xrg;vm$VoTo)v7<@ zD|)pMg+cKB4th+)3kdr71HyIxnTzYD!9CXWn6+_d<8VLvb_;7d;Io8|(O;fHiq#y`ah*tJ8iZCnc@*@$@% zqj9Srfd=VH5v#?T{KPeG(&F7CF=`^#sNOCB4Qs`4Upxep(TkwbhUeoXj5(uxc8r(o z-q11U2&{jcbz(;5=-Npj(4amjsRS*~sMA6KZ$~_H?;Y9|KC>6F4svs2|03oQLRYwg z5gQ)oZWqTA$HVu&0H=Lot!nJ83qd8uXUd8h-uy6#~=t06v0fL9^6c2BG;c z41ufG!qz%QZxlF$*z)yy#WQro3_TX&Cy^F_Di=&%^NiF;8qq}5z+HP8gBBy_oI;;| zI^@ob?N9W$9*$t&IlY+^ce=?6LCL{SHWvGKiQ?qd9~p68=$rMCf0gLi$Pn##o|}pc z<8X5i6SLX3o4!s2{HUD9{da_j`Op8zVRa6EYXHjp1XONk|0h=a$H4u*pO1{~$TPQ( zhV*tX%g2y7GvDRR?Q6ObAemQxph^=#E&srg&jZ8GN!{0{uHQm6=JWgI5PQ?ex2yET zeTJh*S&VXk<9l!n-%YgBvA%J!Cu-AwxS{+*1hKCfJ`n6yxzj=e!bXKuqcLBG%&AL^ zpZm`E@z2cj-9(mh^T?6;Er)AZrTq{SaQI7+$)*JOM`mdL-|fKCs7N?Dm<8-7O~F5% zi-~D+IzIEAtp$!PxL!qoU`=DwH-@iPG=*00(K)0--v2_&S`F?JAC}GSD&kWE$0nCC zzhw(Tq?$&ji$72rUPJz_RG*(tK4zcz@`@VBtXMzukZX-PP>~Ld-eOVY=k?|v2<&h& zZRc+mnXR1C{-G>CU9)?Dy=st>SEI2J>rK&p;60<^nCf5wu-u?Tm!$eh_zV}O_fTd6 z8;7l;wJzp5yYC;-;u_f{y(uOgN^?FR@e!Fb6it&&V32yS`K8--4O$XNC`!o;*%bMJ zg_^rD2c;b-Xy$o3(7E0_1tF;nlf$)I5NzJFe78h0>;A}m&Fe$=&N!U$QLsqlAs$#5 z@vXS?e{^Vu3fs)_P*K_X#>SsQgHt%8s+%})?1w8O1gP>I$6jJb9=Q<*3+#q?=0K-# zD%@OBSu{mtH|Xh1{!C+>iyS9JNCY{Y8#z zvYo1XEj$p4#PG?HZchCbwd63*WZ>JFKbY7f7v5Lw#gQt-D_&%h6P>Cq` zsj!$-G#~U2XRcNL+e9U1#!hB4S8PbdH^e(Uql+HH2u27&wm@UY((rvgL>A@#C6X&$ z8!OlDwy7^?-6HsrTYgF{*xnLA46~>L0oH&Ip=}>Ig^ps2s4!V2*2$ zu|~c3a#dsVeL-ik~m7K81hW-``cJL&|r z?iHzqxsb4W^vb_bbrr9FW5%{0xciK**n)`Yk{Pj zsKTe!qPLcn13NRW?T45y9rG!Ua(50$La;kmAmHk|mUBG@VzyZ0QQ)k-0le>WB{56c zAPE7SlZWD z|MNfbAOG~VsKgULov9R zlOl1~K-yA{6X?Sbxlh(e_xl})XNf${+}9<07Ak1{g23^fze!t5AN#^wif&3mgp^C@ z`TpL7Gu@;v@g&9sB_v&VZqJn0T0e_PsF@0gdasBZ^zeWsa?l4Z~1<|;oa~WUnC7g41m$CE);p@b%`~QSYrnU zk*1bpB^9*(ioEUnA%$xb14oO&q^fYRwZf6ruOM^fi?s~m24Q?t@12nzhG`DdXyz`8 zs9wFpRp`!oICO6%bivmbR2!COKTj#_3c=QM-k#uB`&T=H$K5bS zLr+ILLj1GlgyTWWcsgmk4qiRr_Z@Xz8x36q>oKScuEDy6=XZ6jb#qZX9*yozW{|dV zv&&Wt)kvYq9-NuunSlcztx>GNh)!P+b&S_YBR0=oo5H1;7j6a<*5R$=)f<*N9$&1f zcVx_M^Me5C68G$Ro)}C}V3&@&-MilC{4@lpN{ARn48a%s(w+p)7Q~1&2mOA2hZtjw zz{k@WwF+)Y8qmrjG)O}W1;w9^bzX|v*361 zVms<^MPtmub3a&kVxThu)t)`_tSui>ZxbutIx)jM4s^ZHyhq(?@qC99GJE|3Uyk?t zL2pvx!Rz%E#u(zHpZf`e2$Fge>!C1z-CQfmK{T=Vq$vKFbNunualKw87>}s6b@WI{ z)j-4jtXPYEQ*Y*+c>lif*RQ|u=bwLuc(dYKt)lOGS1fM_9^F6s!d6+`+jX4Jd{IAC zc7LFVsv$rT5nLCIN3CIb3}avNNw!c94MhY`*8Kdh%(ZT1K;-Pq!lhb5FPaOoU$*8X zWu_H*QWWT;GYc9tZ75#-RiY@H8DXXDo%@G#xME?MBMt?g`;F(hVb8+r^+GSgt>b>b zgG$nS)MFZFsrz|8<|=~t+&extW3e_JB=fbKIP8h{Y$<090NP+IEr;^iKNF!@#1B($ zI{4iwb|7VsYe$hW*k2E-4tvUr4sO!BvY)rYDOvX~pNpJLpaq4e2!WivtWeYNj1}kZ zes!pm%E&s+i*6Jd+H*#MVCqpDAjGCk+MWTTLwuGI%1AbGQU>~HMQirMQ1vr1T3foh z1-3FmEqd)*LLsdvgX~45;d1)IWCU=$WFbupAz<|A!}K^9*%o5hGCfs<&isffUD@kG z5OuUE>-$ya*jPiJG6dIovMC0ILydi{);pk_dG=06eweGzeDg2{Y=ici6OTuvOOuEp zct}7|-TlJgrua6WiUU1nwS(6pdL&zUVIatY-F&GIQWK;f5- z7_SsZ0U6qSVH+1HZ=CJ2m^gRCVZlKCB{MQe1K>k}h5b%kv&8E*D z+Mi^CjoGuKu?yJ)Q$609!m{R&!VDUmOk&1`itI(~9*gD7ywDubtjbbMC0Gr$xd{Yb zkiSoMUTitIe51rOD#4G%zc6A%gsbjNF|QLcGD42wA(+i|P!){1pCw+%Tv^9PICIc3 zb6CptEh!SItc`(dgQ@((0Pk?I9z|n{DLlH_yTR=nUs?!dd=5&UM9@%em#)3U)#vX| zb#4|I`CiudBfi?1QyC&Z7Cia>n$=-9vgjIH>|221M7Xuqs*sbDvT)8v*ko9A_@=9J zvB-&`KZ^(|+0uoL<9*7(Og2!P7xSl@W{Dg2Bhy)GIB129G2iGUl?`$)gfj$^S&c+n zTMp0a!QBI0l@rNy?pqW>IPZyu`$w@c<63K*m8)gPfzV}@g+z*5I8-@@@28Nc25h-D z<$BNiG3R8HyO$6FS?J=30&&H{Bx-eMHl;f*_v#dCm8eGcex=xoCr@{5ksaiN29u3# zuWaL1c*V0Y%m|7d^#UrLGgrMGd)!v4X5O`Du6qsiohWcQ^2WS|BYEHbxW<7S++!%I zm;6T+!+X{w(20dblytCf z*~}jzv%=hY;p{V?(C1{Vihl~hY~#`P^BjVKIhi?iX2L^1jzU$ye8a#;0=QkNg~ zB+jg+;{cLtsT}_%-R?yOA*wysyFDCc?l=WOUf6hrw4b%@5t))GJi3P0+Tx^&9D#g1 z=XqFG-kZjJ^tC4Z@X_S{zJ;edkN%S~1wMCMG&4lQQG_kfHMKfm`Hz@~ioBsXNSg*? z8jgFF3AI#uRN`uxz^LcCfJ@~Eo{7c zh<1g@))=_1qvpiNzK3AH{k;3RKDQP_YWUyDQRUQ6;lxoFL-V_B zA=+o%zJHFeFm zjU4GF4gF|D+cZRvFk>rfEgci`a;ij+G_9Gnem0V0=FHmOGt(MHbrf#-ROV4)&d z+)r0ED0vPfAxSL+v*r`ldt~ydBq1|~>Lgs5S&4vJKJSjBq1Jh=c`j*@1MWO~TgJv@ zoqvdvdmoHh;JV6p1dec3Gm0z+U*~>gMHZ0~TD;$HOpna%ks?Qm^|H9DMv?4X%skur zvqkONwbso%`-~CUxQkS=5Rz|^TZxDGo?W9uMxZ>;=z$`Q>A+};XE}cT^(X%OzyAw= z{rU^v?{8QO#H)}f*XZyYV_?lEoc3n5&uXIZn_wkHh$J@god~q1g%A}fvCLI7o`dy{o`hT;InXw>#ck8*ei_w(zVO_#TQz zR2r59O)0WWLog6xsV#~zTQJ`=$P`e4qFBqFl`#*d5@Su==BL0O@gm+>8A z^bpWV7>lIDyGjxks!w1RLzdpI*aQ86&$Z8!++wT!up;0f8}e($d*TY12;R2vUJoA9 z4X6$IprNMV@~pwKCR9?Ha?hD1K3i2k#Z$sQ@S(O(nYeH;I+CJlhDpM~^?G59pa~{D z@F_vD!exA9I4Ax+2D{vkkMHBlsvZjSP{Z;ElS3wJ4U06Pxqx{a)*X)Ry8&IvXY$w+ zGGlr40TaPo4@?$^X5sFKEVMpi$YhOYl!zV>XUvUD{akUQ*o(C`V&HB>E~_-=nm0gK z(E%=vdU&o_KYPVuS@g=2{4gg*Z;VorV-^sET~)<w0bxn>Br8f(#(bzjCVIj|7d&68$Ln(Y1DhdIbe z<7f2J_CHj=edvft09)_}RZo0I|K-_6DDtDJcRgtE{T@-wp8tA~9x@%Z?*!c}p4*mv zF?YB)NXMO3Z!-|Uky z5P8lfJvQhQ4Kftdt@>q2K$MMpMC%=^3GBIXlh9POqG=^0(u_tXLE94BZjSw)(q#FiyAWIRHL4>yLcGbf_RuMv2S# zbUuf&et)jd##m-ug!>icFjn2g?40YvoxWXA^0!7CkSNQup!8}MSN7olW&oe6u5)Of zpCx+yTS++*+_ zs+!!n=$tv$`Tbfi^q;6e&U{%v(EasYqA2%c(CE8kyItOO(6dsn#9$ z<-i-CPOUoRb7*Zm{P>~b)x$---6XMZ=e5W|!esj-|K5VtP%QGet#TMM-!f$(wRW`a zF0Gv5EYi#lr##>`OQ4dD7_UQs9~o}p&X~tA8I?Q3Mvm-^UZX1gBU3u507U3p9+=^O z8ybA%+2+u-NgNci;qBo7NteoE21u^)xrYVjbw#EcGoe0)crdxg<+uwRzhch|=yEavnA>9r!9|ukD;@iZ zO3NXs5IbAWze&=St&9h;?RXR-oO6h}9qR3G#GFmjIS1B129nHfOE-?w?V=T-u;M^^ ztoc9heT}0tANc%Zy4sT$k9p34jdx}@#oKVY zFd~mK>WD^Hwa{^fBQ7M>uX#;z4AZg!na;3m+$=LR!4_Xp4eYFGdf)10CxU$o9S+Aj z->=Lhmm`1d#Qj!%RRdSsf`}giKw*a9{ykpkv-lah>l#MaDDrbKgBPIlA)f!1^=%4$ z_|Bzc0EYnPV_<#^F3$r!4)Nzc;BR+#zK8_Eg zMv3S76y%)ifl^^VGY`1PRhu5u5{Jis*HT=>Lo`^^B#u)KaT?YZd)Yz9K?>fsgr?37 zSznf$KuV=k_cX<4o{0J9i34S3v*E}<|EI-DK92$C`k2|V;Slz}ubbr>Tl;xybXCpB zHO_bSpLR)YQU~d|oDKn@$bbrX%!4iwYsLLUmRchn2LRUnRLj`r!aY|s^+qQ-rPUf! zCpw;I!wIJ0WL}G6Dy93!KZF<%hf$caMKF6%(Kxi1#4lruWsIm%rMoA;`zgq1hZ`+% z;;0;MgBx8Ys(5DP9%3+~6&)sPM-jOfp4&3AAcs@jKXNFY!qe-By%Gt*>zXSDDXMtp ztk|5_=s-Fwgt0Z|AA7dt5Zh-A#d$pyf#giZ?3M}KQD4@&;iRXE$cag5fYiugt zXe1G+LY4#5m_f~9g9?SuaYl}u_ZfW%-*H_qDN(kkSj*Oy|8UJ(mM&lpn^fSYh1`bl z%<3Ulna=}T3!^tS{ZK>xFlJ2L&kYx?tV>WhUQ9QcFc*l7z`}d%D?!3=HWe3K8=Jg} zYkc8iUiN(Ab2N!}Ku1u=0y#dzT}YQulM&}XyU|9&=n}(iPpV5~7#N>TV*_?RckNF} zRLOV!kFP(_n{s>>`J(1Ke=>Unb1h7t_*ee}uh)fU!1woW_Kc*6B_TYCd!)=XUAFLk z7N$gwsv@$_&8)J}%gyW9gB_kPg8F!))0y7H@yr|V^#nacG~7hq`FzC?{mB6!bK>v& zhR+c8C}zEPvYTT*&oMmEf1vj%t}$TKYbd`c_=u54 z%iu;v91)>fgNCU17F|YWM%3yaqMUBx)()|TA2f~+iexwfdvAEZ13S9lMfPc`co0qP zxmHjV`UooE3gLuLum=-3bWoHaJ@##^K-AhYenTO0RiPGSlFSM(+_D4roG{r4>L9Z0 zvtdcm3VvHZq>JJs4RDj2UhjpDkj-Fk%23?A0g>gV6`l<^nv-J@3^@vjei~=X+@CudN zExlnX@O$0(>;1-a2tZql=z!LObh9(cH^l`h96boFF{mH~4eO{QWmAn>;KhNn4vxN& zxR>y4)#s6lDKR=@9~#rrA-m5;hSsiX6ZX~$|Gj3^anlwfEVMqCk=|-aA88$E7n+WU z$M6Q2U^?)2$KZ7|3%_4Dj(cS%gGnq(w{>K4liF|%$YVS6w)KNtL1V<4;oxqaS>PSl zc;VMy-!Z@7Od>>3F)V{H%bjsUCI(nU&qbuhjK9ZRXtc;iS30#H_6~aMtjmB0L91A- zlPgBZ(+HqtR0z`|X$M?$6fua#x}m1Pik^N8tK=q<@%$jFSP-oHfjkQX4Xux$$GL6M zri8%1wH?33os16mhrQoug0*&4zxI45>--wc1pfPmwS=OJhB3l~)3o9By72XN;d*t< z`Nn_$*MH*u{w~UGYYM;Lu_tiU+?o~{<0sv>&b_w#=8ZFfe>M%;F??^IrVV~KTl*}T zXPKN4UDs8#-L+Pb0?aXO)_E-J)*QNJyrY}rYg}aZa`@{U&MDxSxaY(FgJ)~gZ4~fT z=9Fa-9g%fy`R*NcCiNe)gv>AxAtz0%<5hDcn-Oc%dc(z-#hHCAcSaK0u0fi_&@ua) zGy*o+aZztaoa4BTjVlC^87U-Ym3#g{%LIE&DF!nOTsnoAkKd5BV_rle?!lJfS$7Pz z8x3DA;=%B&|BtS>ZL%b}tuznd9&xj}DQQMyv;Y66t?ioaN;8t!B)hBfMz{m}0S9o8 ztX|P*O_5cZ_r{Am960AWL1mdE({iDRGf2+$ob_6HWhjUV5{<E6roAcgP%2_D7p)Al!F%(B4GZ&BlQe+p)zQgk{dqwirbYE}jL%<{JH) zO`Zce6^#Mem|L%!IVjuj$eXp?S!me}%lf51?v6(jESrzf$7&mL zcK-C8_8U599P$?KGalAJ5aK!b{L+BjaSiE$--Qjiz%NYq+H7Ko`)s1xjJzK0IsBY4 z+*4&H1)eDJIdM%Ql-_jkVt!!L8{xs88JBwwHnH2;dtm$pyt4+Zi6h^K;|BS zE^MU|KCz0q(Ch;%Gk@fECsMRF#VvQY^0hWxZC>v|bPYJ@(9N+a%<9Pjf{hg;;U$2Q z!bazS*SBmN-{L$_c$kw4=V-ddffNsCcv2CtiI^l~8k8{r9MVOj!t2>C7qoAM1fsBO ziA9_#-q4D*xF{^)4J?;01?45=8*{UsYDJMurW88;L) zWZQ?n$jVY6kiwbGtvWoNqA}3QX6i|$Y{istt(jxi=UZ9BsQpY8xUOsEyNhp`%KJdx zYTX)JE_(c2sWnBJp^GgJVi%m*m*KQL-hsV&qFhtkCeqm*$aL^4P7RiaR_%nY2H2(JVgT66-D?QZ`=8^Rk zWG1QoVt;40eqA)r$Ec2C3LJ|&>wm9?DM`fe%Q`{|%FCZ^ibUuSDwS&ovGRd|MM< zuNOueL~)1u_#QW10E{^5og7au@#kdpK*ltzS~#gF6tL`q8Hzp7Hl56_=t_Fh9C*L4 zYJyfHH1kw5D&fogJpcDNmqlZ*XLNuAc3-TAojGyQIIt1ttdEax(NORhM6LKOuI0Wt z=J6b|W?eR?)H8gjqPGup8yxEJUYp_UN1%(3XaEKZGALxy8nf@b2xt*o;S~?HeS~N# z5cRy1jgaVkRUAEP)-mpCgt>0+=`DN15s1#7*_R|Ml)fmlSWTg962U_~Z|=C>7lk(m z+9uWrmu{H#du!oXOd1$Ja_bH1SvN<+-FxKzO^e?t70)1ye!7`^t~EqX5%*-XeIf8d zER!z8h`)$D%_J+8SXBjQJ4$>Lj(~8(ipCi*BQM5?toWlJm9w7M=^UP8BX9X86cj3H z8^tNgJ@uJw5!e0w`DRwGv)-k9k8}WF;$YK5dEe$7Qw>2SOS6{QQhM-T^(d zvd7JCW*_&+!t`h&yJU13ze^e<#3H{MlcL7S>zk$tSxXH7=^bZ30y}LEoA>JF)NubD zWF>9kK+|+=hLhvEE;uO-NAHknxUa}aZK8O8ellk>gt~K*ECI*&&mVZbPMl|lwCGnD z>#h45XzKXo+ljOHaAaFtXVC4GgZeRNVA?4H1x*UK%sNND&cNOK4B?j8#2gp2IqZ%m zt&a(rQjO)v6Ss~Z<0c~~n>*Iyf5yM*IJ9}@DsY$oueP0l5c=cCwY~Le( zhllglDJE-z63@y^LH6L_snz~kXIHMxY1AmQ220a9W{JeiXEjXI&4iuwXDGa{yWvh6 z1ENm8?oSfgLOj?>JbH*ZM&QryadQ~bsuz%A#}aso;2t;8(6PpMibPt?m155x_l@`U z4l0SH2pL5$JdYEC$m;GSNr(xW^vX}}$AQ}?-uI1r&d4<9kmbG%K5rZ(LO5wT&_H$1 zIXUPEv3pa;>*E84XuN9+I!`#b4zwPQ+ez$jJjWo-E3R=p?>KOrCma)#u0yCo&mfCp z%&McO8+-y&rAR}a@`j@y5M^Jjt@z3~OAh8XlY&X1g@GmkN1@MaPbD%|!r%u%gB$R9 ze+E8RLNsBR6eu$4kk1^Aj}?6ol#>(fe8EKUd0+VB$9K2@=W&F%@aTA*uZk0}FT&_X z_uCwEQSeyvew-hb@xGsDQw+N!tyjU>Cs*`~p z#1k3Zd)^e2E)ikA6Y;K3Mz>6;IF2qj&xVhq!{|dA-}!p6Z?HNn(NAnNZ^WA2L}Fls z32BO^2L<*M%Kb3bp^Wjus=v8!|MJT>e11lq7?D(3<&Cx=-n1qaL3B@t-V>RR8okp{ zXf5rfb|#4n-@9(<440@$dV5 zYZs%R{_82f~Do=;+^)*qUT0zT8_Ah5$eh*ZEx|v@9LQcUfO~}KrXLNiz_0}spk-v!PI%@qF)M;DA$ZF(VfHE-5%4|-#=J4Ffmc5xellZv8PU~*L-=%Mi$eRs zH80{(TkE*T&2w<9>7$I24s8;m@vQyKIsb`S=a@5k*AlfwgK+A-S+11*LO5k9A|&b@K#Ln>OJPqz3u^>q@)_+ zEMs|Ih<9ah9};2|g#RvOpKKAMW|($Wk1h9FYg+xfejH)EVC>*|o-mSVBIZHRcT{^i zdK=Yn$$WPUn|vXa#t0PxR+nyHyw;F<4MO+aiW=5J>+kQ_*n8X@%pSGLheCE)_v7I5 zbf4{R)Z8FuZMz z5Rs_jYQ85TnC?9woB(rLG)mf9T#QJ=z^rcQ)^yC8Q0aVB7Dx9a>2U-n}jrqZ6 zxC@RWn#6_sXP$Z2x(+$KpEAD;*X1V{Wjb~5G3xoOhA6SCUH;t4w4?GBfh7#w;!>5x zHC#EgB|=GOqzbd{MlHlW4{GVm@s(>_sH=NKqqBE(ZRpZAL=qL5@HGtDa6Org0+q^< zt-M;Ga=Ke$;C1DQJBR+Naj?w+@$`HS=R-N=50VE8^(K$UQyxRPR6&Bxutisp2d+}F z^0ZtwXOOJ{XQ%7iHz(Hq;7=C!z4wJaH!Wd=Z%Ca~n58Hqg;Uc*Ri6W;&fK6vMCUku zn+nWyZhTp*eIt&{vEn(JuIyc*T09%eR_g+vSw-F7L$ux}aXNYu?M0!AY^p=3pd*x? z_lV5Q9=7}%0_VtEu_LB++oNK@vb$4jWD?h4t>Oq4r>L z{B%E{_KRV3yzn5P8#Sby%928_m6r%qbX5uH|oj8#|}UA#F+oxEoKSTO|N6k;5p zDF^;@mWX9;+3=N_oDQyv{6LWdvOTjz1o~L6Q#6%>fL%1WJL^}Ldau1FnYXe*Ks@q zo~h~=u8otwFWg#3ojHPjCJ=2g@Xf|97GgN#9NcErI&n=S)3i0Kb5x_szv_J#*6NOS zp6JI>Zlv6og>_9j%F|&VLujJkdaM0O>BN;+E8&6H`Wr5^-g`MvjL6dx0M3c?)T)IF zucjfS=&keJrRaA=jnG9SXO4ewq%*i{9rBBM2BFY8YPsGzI-j*+gLP2DbP{HKp^Ni( zV@7i&*Y=yuNf_wRUxF0nepe{vyze|4N~!p5P4Khk^K_2Herhusq+TLD#s{#@144-C zqR||hfg4?-bHKGle`r``$%0W#A-;+CWBLTtq1x#p3)fSKX&Rl*;ifvYSFDFyizjbF>48v~s$796YNQ4-<($`W+=2ow?FQqg70x zbS~XyjBet&llxLS?QS|-ky!X?bbhlj#nz>X!8Pa(Vp5S+gXr1L+~*P>dAO2_y1}#7 zJqM&UbY4drj;<}Ry>rnzx)58vMZig3`zGiugaALTfidVx_Q+XjD0!s=EZ@J^MLk1dEVoON@i_lWZ`7=#xt5M`Wi`QVdnZY zh|M6|*9b8ypDF^CNv%te2Y@>HvDci$JTYcS8=mUfE* z+Sq^NpWn_`)M{hGxW46k(B}?NRP5o)G5u{L83O7hy5ocB}Gd@3hkA3b6 zG2IjoXCcC|N0lmTrp|sW%>uSCw&&}EB2FbTKcZJ)1H)&T6!bU%Z5Va|+Her@I^Gwi z4B&MDP4MIT#Iz%vW2_Sc*H21mQ@pPW*Ly%mybE)Lpx||$cwaZ54T1*szy4R%O z^B_V5*_5A^Zf6nbG>q#Gf-wMZiu2nC&W{(gEADyYkN59zH@sdiwBGP~z2Z5T%NVww zbtliVIiLzrm_7uM8GX7B{pOhX{^NVZj;MSwT`h<1K`O$S6Q4gmNi^u}eXNMq6sn|~ z_bau@xM!*;^augz`?{-NHf;4K6k(?8VrUq^xM1%enD0NJcH`BYf|AvT7-N)xI5U(X z68GRHF|Qp^%P2IUy$+~5rUx+uI?z%m*CfOX^MuHF2vz5tAqtv?dEan}`a6b;kpV6? za7f4N^#PTE&+!I)##tJQ-lQ(7X?ns}&w4fHC zp|umQ*ROCJm{-&a*XJijGaMA8-S@>fi-vYErmKgz+9VvBl94HKc*AhRv>S)@prN&R zzrpiTC&6YndkBZ#N`!u#mohdc@`aT~5ckICF2&tm^uG9cJqA*2g7O)8G-x^Z1mZym>prWx1_>zf4tun-y3uvU{WyO zy5fF+MnC0sqV)r}&8R0y)vLWr<6xsLNF+85x7~Qrl^xFK6VnXWHDK4kah~k2LLfc> z03ZNKL_t(RN8f36aY;mImIRo!e?M$uxE8KhSq7|l}a&d)ys+&b`XDh>lD`pVm)Hg6{;tiJLavp zuUVqt5Jwn}qX)GFz`QT`jQ(+w_ZIz$q724TWSm<@nuugNgU&H-XcG5G zM;pR-$fGCFwBs6A)a^%$dqOdF38uz~`n2g|A4yYJnrcJn5fK0@swZY>jUogyltDUU zJJYNzByl-KUiUOKmnD)2l_m)r>}kvpy0#hQp>O?&_k}`M8;e?WuvfB2TY__G$=F#& zz0SGBvYqAuH9=o^aoq-*YY;ohd}>r>oB7U<_%l-Y&-vSU4$pVDIvkZLk-sk+9kMm` zeCtWnVfjxI|GqlGS4R3i%=VwMGS*PyiAk;DgscU%Q^B={8Y_1w9br4VeIaqzU~jqp z+lEQ^`kcFST2(h}d^*gv+;4law$vPW44pH>cy|XSVt2BklKAsD97|>A!Kohgg_F*M zzlv@G2~-pHk>mZio=;qBp>k!rhhOs3m%t;{a-;G_1Ld%PUJfL`WTNbO!n+b}&x_w( zr~7lT-^aXu>v|j9H(|qrUVs|xRc2o~sI^phc`(do>caSMxE4|L4yfzH885C-=3OVw zwx|JgboRbnteJ0G8;w~UICi`&hY;ytf98lT1l6`w)P394Lz$5)@+1-@;y8mVB?nIF z469sY<~@~TRVq_Gac-%O9UNj+?r5$zvQXu+i3E~m7Y7#O(0aMkoS)mK*AOKU;+1jE z;^(0V-ZQIJ0$*a$laOJazNK!&(^;U73;uejD?3`m|ALs9KgGi`doz6Vn zKF8$XrHUnr3noI*DSV!V`779m<4L5T^8nBiu;jrZF_k+IcNev|M}xID{i#mfT(J4)%Z2<9 z%q(|_uvwSRn9SK;q9LizyweWq$H$BEnU{G5_zGbHCS8f%H>91IqhDE?sy-Z&0Hy`eu|kYi_eS* z++O<`JX|+ba2E1yWtG>x&0N@Re=dp)-N)|xupjj<$W{{+#lZ3S9kz)v2Zb=X{4#K^Dm5W*=qIm zzRI&s(Y5vkic)GXbrCdQ_bCK!9nF6}ORPFsaU9FlUC~U12Wv&Df(MZx2^uAGXe%OU zaGyasQ7Zr0xwqIlIFAVzV_urp`fNS}AI-tn`rX8YazNNyCsusnZOL+u{V1{X6s-o{ z+^T7?3eO_4z=MjT>~rX1b}Zq+h(E)n2Vg=ofo%iIbUU}~M3xe})Hx$2 zCmE9z{B*0DKI%*g)!EQ6;=Zev^%NflsYB>Q%s7C3Jx7sSgpm><_6;G;xnk97?Fx6F zo0p&`<7Q;THAeGik?bJg+QaisMq#8QjO*F^^NoM}?eF;Qx8LyVzx)#>{u0lND88K^ zz%PdTzVQ3^-vcx0!YoxS0#=HP!$Et;p!IAR_lOvU9*vn4?8!z*N)k&EdJxyeriy(eYivpe);#+%Ay}KN z!`W1%fKi*H_apM3$2)3$4pMzfK#$BvE#aRVs=uPL_Mqv;Twlf#iQ={!@Ar>5C#!_h zi(;Qi>Odgdw|*3}8huhec`#SlgPstMl*qyr!E$fPHl)!YWF+n})_Pl{E<78THWzYs zj=;id?~oSmzYf6X;JuB=qabD}#RqJDBYO$la>sypgLkhe0%2s+5^XQjOJM2k*|UM* zYz^i|<+`Vf-+h*o88aH-y-Cm=B-ZcVd+nhqIaZ|ulLVe{I7$)9TI*a^R{dP0B@Ri1 zF7rcU=y8w9+|cDJoiw%hYBZoX#c_nII@Sma;-4zuE%4~m;YJe?;~sSD9~MP2NtiSj z4aVHuj0lJ<;a0+^))mqlV=1Gy=^B4dGR9*XdY+Mq${rT3@u=w=rsr^k^_hi;w8;_c zn5{LYGqV`xh(t8uIzhsbO60IhVBuq^c}K#708M*jveLYwn^4y*T$C}Z6SxnI0kr;s zE`rbZ54cVaARW?#|{}#hhlV?vaISj^RNNE~;lLz?~78EqZ_%SLPB! zndoW8VA-UYZ&36sm+D;BT0HNK4nkLo6I%-hArbqof_V>o|M3IY{jLVQh~T;+%E9I$ zI>PZlQJ095{e^qnt2X`8AC-zUk&13fQCQX(KG%6rM1p>k{rp7oTSl+xqCr(H-Re9# z)1iLd6fc~Cmv2$?JP_WLz6NGDGRT_*-Z##&H*Ajhoh~r`+~YX#`uM>2?| zv5XOuuk!;wC+_!+dCzdA_qpZo0+=C47L`KvOKT7kchabEnd3N4h9AqAaibp%+66LX6GWoo^jrkqD8#0CDrhz9%(@(_@qNa9LrjZ`5=NE4ARAhpMegbl<`n%kQcyi`k=p=TOKIafZf7wREHhmb%xlKQZZZ4#1_zuKD?cNED7- zD|(~z*3V`Vk(^oN)qtu;!wSyLJb zGWId)%vy0o%Kyy2H4T%w;jtz2=Z?5vheqUwn?WXNs4X1S8P%(`ZUyCaUlZJysV9v` z*_$NU>8KtuszGL(>`sKEgd$p%m?ckrYvH%twT5 z);iNI&c#hgVDS>Wp@fZA^^s;z79rZK{xPBt5yBuZ8ibjXA`vFI-s7y`(@7N~AyGo` zme;!XGoJG~%ABhDG$)BBu^KC8mj6`H;avjyMUa~{D@ddC{3%k}Y|^#8_hV#x*YKc) zrw}XS8EK-1Mgb(mwcHZew{MJt|u@aj3E~&xHq$G5pb>|B85Bju>psm}ic}eGg0?M)P6G z|7=?Wb=8Wq_v=37ITPUvv=M7CSGQ?ucnhl9By z3U+0+Gh;E(Sj)v7xDe+2<-(oc4OW5yAu?V(HbddFnc|ep%-s)zs;f{)#B8}}3ZuB1 z=W~}mZ_sJ2A&EYuGqNpKI~IB$;HA>Ka{K6X!dFPW1V(GmAkK`#mh6{34>a-2bA*F> zb387$p4UJ>8;v_+HScee+;sHu_1jj&?E}-UxmkzvV{)Tb4p$5dL!54=M}9gnD&d?T zYe-&-q9<6O4!S>O{H#pVbjl&o-RW#+1KX>`y}%Hf&3!s^E2|dK#FrKhuXJf;GsBHo zDp>-eAOMUK!)OVXymG%ofvQDl@VYL`F;aE#t3s8pcV6}kQU0!o0HIhxm*P9!lfL1u!8Le^=~4`}M{BI- zWI3q4_O_os=iXp=2;a6p2at-eA|5I}pqz-$Os`dY#C`8aU-1~(1mlpv6FG(_?*HpP zi=R@0<>B52qzda%^cxOx#2(^65e23_-|a8x!hGbjfeKOdE)Nb#HmT;E<;0GCW{KU( zg|HC>;=R@N4SWrIB5Qg+C@=chN9B=SzTeL!;$*{eTfb$)%cJNbbM3=?$MP_khv>lF zg<{mq(E7ojWg8`9&q>>|$G3Z_tTzh#o!iV#^Vy!q6l=Jx=EI5w`Vx(zSsSc|Z`Lg7 z4vvA)ma4sdN1(G_@SifkAxp&4d)wlK0-a`sXkQuUiMB6%x~@zkRpDS@?M?1pPP}X+ zrBJ|GAMTBeB*CN;uh1?E%^6dJc z1{i;i)xm0^$}?vUB2^p25XDPH*xOnwX5!v*EpwqLPjQ?FdK1j|XY5f*ceZ*Bt@Ci} zyWlvnZ+m_3zFek^sLHx3q6{O$&3v#qEaj4%w(9Gyt2QcPg6Lz-7#Z*IXpTg~qjIJN zaC9P^2OS)7oy;dQ?hNye&(n`qsNIO2nQRMq5w=p~>vWUEduo*s+EsIEHmLsLb?z|J;?c>0)7&MY_*_(tB_3r?QeSM=Bi9 z7@9i;p3z)dYiFR*dkt9w`N^iaG{_;$$MwRA_SQJ8x`Q;bJxBSWT-Ja-UH9fI4=x?$ zYad-PNy2lMY;K@DALN?Z>P!@Mu}$WTa<5T3;4m9)_G+q;?9?e2Q3@1f! zUs>-6&O@s?>jsQL2cc>>Ju~)hj>rKe3bKh}V1{#@F$UNB!f`Sall91Ty<=G1JC9Ee zajizM6H6WM^2C_&oE)vAAC01|B_>dW`}yb%Z+l1cR4LAH?AuI-G6qA1;*>Ff76P>t z4;u+U8C{fh)3`%i(pyJYMLQ1M@0$XiaB3raV<{9$u?*HwqVc(ZzpsVSZ4JkH2EC*S zvDd9Kck>-Ly1ZKJ00j@X8787vp<6?9@*J0RpX@bcO+E%OsQn;eDTYN$z#R3|oHOVM zojnr_sC4Molgs_bEL_#g9X#-UzvCHb4c0nLW;wHZ?}fCj&@R5)2VKU)N7WQiKssRe zWM`+v8QYl~Zxdp%pSFHLn&7&udKkUj;sWn2NNn7@MHS6kA>J*^ypunN5{;e zE(bN&#qUibQ13~#xNuL$aekn+hU;?JxI=K#ByveCA`Zk6gDue#G9Bj;?mtpD4(&lT z9FdWpgSq<-@&=CVy9TY}8q2LecwWgEh}_>IZUF!@se7Jfx?*CGG!xDCd#>T4zFzpe z-f-0*9(GbWAh_Od{PFwm`0?WhuSZZ(uj{HPl&tovw$A=e8Zk89xr(sK|9y)k%YIAe zfYTqbX+{+9EGKMI+|KiS7|5&!J!_AhR24>?%yJ3N`^I%&6(d#DHj^6G@7@`Qm%st( z?(7YdRFpP>lQqM*2ae;!>-+!&xUM%26*N6~twKO#BDg=Vh#NX1J}CwI>O%4-9)iSK zD0b2o=7eKnq@jod_o!_suxt%O<2v4EP-{5YLsAKRa{g~se=EQTw$7$W${b@9yg?)g zZZhbU@2v)$4#BuDimzhNPs3W6Z)4EYnUxL1`>&fBM!&E{odjKLf*}!?V#Cn|941NS z#)}A!v%x+`_1|8v7e3!V;_ulW6IsIyo>S-JEMIYj;+QvS3)ER2uNOW(z5xir({&A8 z@0+5rFn=XsxM{fVF(>9dLQr5<1MD-TXPM+xu)#H?IM?syIizMdT1>oVO!&V z%h|%3iLE|O8c>n~yT=Q*))_%bDh{*5(V}NuNZlmKY;@o_J_gwaMiN+K+=>eNd6GVO zhoE;ZaakvleSJ1LD=ZyV4=))0X;S|BTI{MjSZQ(m|zD|sE)teO-UUZ_#i{^ls zA>K4!bj{eD_}nWB(M#YP)VGXjMd8(hI3(<+&N_o=8E)f!>ol`fbRrNUW*R0sv)UnR z29Y(Zvgg@)%*||no*7j(Y50ocZ>(q2COQrrM~53l@MdrdCig&`$OY$n-=g1ah;x&1 zDBs%>(#NbYqP*san4P1=yue%IpIQCxF)#K-;%sz}0fC_(T1KKZzYXEO5w$Kd%ROJl z#;ip;DRMJ#_>%F_6PWjk%Z=whuKf8rBN}GdLtt2@pAvFJkFj+vfzBSmQ%1JUbXnpR zieVxG5k>ox)=7WXh+jd(&Y@To@y(h>&lBwTSl)kbPca`DkNL4O-YL)b7073Yp}PR-0LOV3z8i!2>>j!pMd%R?|WJn((t z8u8Ng%CRRJ^^0R@N6d$UN*;~X{r`6C-j3&;^O-rn+=}z@9DHpeV?!RV&$00S>tGYj zI^%&)bkBxw#BMlWv~+j2Eq}%9=S4v|YcOaTC4ee#982{W2cX?KKiORJ%FD$z zkXl0+rEy}pU{TF*FKk|GeZAXMLA&pRnoY=oM?C$*)m@?yZH0MN*#;R@fE5}vbGN?~ z;1<6u7Di9Gw-pas<3JGi192Ee@~CO}_56XGUq$!c$9YkaB?PBl<&B(K)0M zDsDps?)6NUvz+)fZM`;R*|GoJOfo71Z4HTf_sVW{wI4IL$l`x0jS88K-?6N^H1#=uTdYVpaK zq761rhU>a2o0yAP9s1!8>3yvQs&%N&XCbra#n%&> zYh;S}icX>XJ8781tDb7*h~c{M<;{1q<-ARoq{jZ7*l%+nVm>z!<|ZnQS7YtFo@v8vGuBa#&y%=*Je0zw5g2IwMX8eMNg@(-9u-O5s5k+>g!HL3XByPl0RP zY?3HrkTR|T%>J{7ct9C1GUh0h>2aLsM@F>pdQlLIs;i>9)fVev+fd-SCLBlLjdfGv zuXu?~_QQ4aI3xRckA|3ty$E$?q@&Q2o^Y2tJoRY9j832)Ikj_yJA#9SU8I=8RaK3_ zpClF&98|QzLC!m}t($1%X>!0n?h!Pc%pI&fCYxH}%1!E;wy0M>fBYzvqxeG1RRfQ- zkHI}7MW@32!>+9yC{f~ik)?bSrOmC16#z2xTDB7DDOPrUZiOk(9vnn>(hJ-(N7LZf zjUS)i@$vd79I5-HGZI^bOEfKJMT0B^oO_=611)dvm09SXICVNjShr@Aq_b|#`tW_< zjHW;h(qxODaYVKxAT^XoLB%u&h!f8N^VgRCCgH7XTtmYoj<5^A&OY)}*TQGyt={*A zzy1Dq{Pk~t#sBgBJO257;iDapbkFrbG5+N*f5Cmf@%!(;lVCvSIhNMO4(7~`fj1kr z;gXZ0xLxmOp65=nbB#6a_7QFk)(EXPz$v2O_0-1PSqoJ5bzgAP7;gIr7Ys!^icVpH zpbK%*2!!K(UpS7BaLaQz+a;n0AmKtBBQn0-7>&>rdLDF&eqwySF;#KuL4X%A|M|Z5 z2JH=Q9Cnb(Fh_{)k3->&@dMhSU2Ax29>Zf{c5G{r0o~ltY_LZi`-;X#P7D@IqCe6a z-QzYEu`NFTCa^L&=MyJ-M_((>S@CQs9Z_>$F}!%iP*02lJzuWeB~96ShUPzs zc=N12?!XOSpBKh`2TGamzfZ%RG&5D)q{AFNo@wbF?NBreoM^x^W;~Y`!!4CgdKJwm zbd={{)J9y>i0^U0JC5UE%;a}`{_$pg*5YidjVUP#n~a)(!|cYe8$Ol7_GpG{*ATHl z;C{hzql@6z*MR|G;^uo3_~{dZkrraYk)%c_v~{#j@dh*N$NK`NW5D4@(&^^T&Im)vdUp5>xJ`GWP#=Q%Ua~YElsZv&6KK3qMJ~uo+Pz ztu>tIi=sl~`EJq0c1K;tep#N|npFIs+1Tozr-OR%Tn+KUx#v&>@`c_ik*odbZ$J!V zD!$*2OB8oIVEu&Z0fnNq6RjP%uMrq;3VUrDuJHrj1$s7ozCUrchV!FCNb!I&wuEG) ztmPrVb$^Bn-NT_N?CU8_4XFA~xp&Z6JZ>0=_IidfXUq{f#%SU0os1z90lF@yV$vYG zFlCPU(2S(a{>aDqs%-Od2O;J-4>S=7ZnzBy!c{(fQRbw2Lc&4egx@hR(&I#v4ue<3 zS`NjM0wR2eT5s&_Swu6iX3`#KA8FCsxvo#Ho1_UaA}8tt5|ZGXIS(~ZGanf0%#b$D zSB|JrMR2@6@bT@Jh~7b*(QP*EsJ@F8wIoHw z*L{c3{y1>5_j+Ad2oT*due+#K3W3szoW_UG`;BSX46QWEV8CaP5f7r^D_7XrpUc7J zBY!>4OxhJd!~63Mg~PgHQpnyl1q_B^0^ckOhFJfa2woZ@f-xq=6g)F)1A45-JDIRc z^yD!tVj}?P(c|9SH<)%6GX$EFHR+EOs!o%j)v2Q$618%S=VQM~TC+_I9~2;xO5w8A z{3J4vE^8c=mtj%CxR$YmOclqmXgk%1wCHsy-zy=xDErMxOH?RHOu)r`=r|kaJh3)C z;#$*0!x__gY6-iIV#CC`i^jT{y@@<$CLL2GQ1x?0#G6|NeF2k#U-Kj-CehB|9+aBa z1=2d-w;5}zG&GO%xADAQq+mGi`-(j;1x80kAH;q+hM^s=swtal4A8&gGMD>v{nJS} zlr4WxAP*F0Hnsn3P&{pJSuaxALU~ZhLC5Y;+Ld-YCOlPekB4H*3|k0CtHy2RQNlOO zdOWCO+=WJu2S6SJ_WO$w+d=$ zLKTqz$$;r+t;&v!y2p4pn^WZ@qEz;7s9qj09&~^*r^psD@Uy)#1vRBkB+g_BJmjmV zoZ^C6D6bN6z|gnnH|J~jeMd9AoLzWeqYck>#8`}_`fP3k(!jkfg?SEH_ngoTsV`P&A=JkA>MxNq6p=}b!@%C@HM z`+7Qc_Wyq2^p^-Juw(NvBrJUTo=fMxiA1~x>WSvYBiDV=5N0+8A47lCTAB-*CACL3 zOtt$L2m01nNg_%PvG#pG?{U#ed^s)C@tOHixp(mX2j-Kw`Es7yPmcR^mOEXmDa28t zaKFwa5{RW^sn5<128^lC;eT2p`AKgWhAwY*NfC>?IQ zBXm)dY(_&Q>!LB%@5mZy&u!NopT>I|WTs~xzlcq;{p5d$vV zYbS?rIh;LTXE{l7h@0Qrhzl-ZCEW!F-BW(CGqh{o#} zbct;>$R34}&3V-pZZ{9*c&uyDh>k|$67#CYz$J6O8|#QBq2eBS4=4Ah6rG7<)7ma2 zH*3ee;p^t`=G%}7YKM0iTlgO=Y73l z=HVVXPv!w{w2tkJTxTKoa4j+Kva)DP@GVa`46)|pz9|@(`26u5fB*e={Qmxo9NzQ9 zXboy1pnbhw`1bJ&em{PP>W?@p<{*39Kab-;dmVfaW1tjRRjsIw?2SYn89A1Y5zXZm zd*gk-p>)4zTnmV4&L_(lJJ2L!Lt>z z9Ju)|_O|*8>)+YGQ?!qUdEZ2CD~^5u6yT%~@!(!PD3G~*0zNQ(gn-myADI?|5W8cI zJ&q2AB7^ER3@>`$b|Ne zQ$NC)tOv}%!JA=>D{5(pxSFPl^9a$#gyCZ3+O!Kd8{OJ~rUy&{$$DQG+?)t$5Rbdg z??wL+;LsLAG&&jI?<+FZ_p_P`Yrx2$&S<^t>rM{`tGQz)brdmVXnN3%tC`cp-euGg z+7zt;+TvW*&mJ?hKj3Ki^{$K|nJD+eoM%tHAd{lJts|CmN3#T)}R zZ!`}f)ffYf;-rkC$;giwBJWWHF&NU$bA)8RZ{t2Lz?3qEsRHeFMtTy@UD0EV8rcRT z{xqEL8OiBR_NOo=%a^NBC~DAp$SFi{M>`fSUjY2&mtQg6BYT-cp0u{gMvt`_>y`=N zxMEL}sF}^3|GgIpD(`#L^MijsM8RgUwx_6K`W?bJidTR6_6@Cf-1mg`7PJrvVNDve z?wipS^M=U8amIN^yU;0nz-G|4&hx~1zVPG6jrTP|0IR*CcVbpU8ZP&d*Kv^cWt%x; zt(*1Eag7!VDa8YupD~VePF(ke<9J0B!3>N%0Me}X$e>wfoPDm9XZ;{Od6C65e}DC_ zL!3Q4_G5R)@j7w7UPX*Eicqv--dfNMpy6U46GkL=Z|hwaQT7qyT;2G2z(KE(?3IP) zoCcdw@68dt+17I|wrG*d2^{D8Yg|yz9+F|2 z&p2AdwB`vDt4^Dqhob5=QQLgv7s zis6Q9M6|?to>A+RL5!j-4a!KwiH2DDx-T3(gxbpbOe0r;J@xGQ#e8#0MnHwI;pk`3 zqIgyiiwKmU{wW9GA*@peVwcdOk!0T|h&_{nB>sIf+&uqHx; zZF-LohIk9g5zKI&2V^oLY)+u9chrc!&sfM&(NQ6;%otX@UJ-kuUV^OL>oXpq_2Wr+ zm`j*AIGbA(?m%$_&V5$=TvLU*Vh+JIZn!v18GX|gc8`cG%P8eC4g|sBnpb>J^NO>| z17MK8!1o^b{{1_KbkN6*d)(;R08m-kw}s8!8t;L_{i2B85ZGgmRpcb%XminKF`w?_ z7}zGN%l{-${pp4+i@)dA>D4@aBEO>9lBk0ng;PyI4Lo`_`K$(|N=(^N#acE8Q(d@n zSXa*JoTHjv@Avg^;iXIEIYeGa${ghHgYU;M4DFGJ{uRNVLzm2q4IIzP8f-OyMj^xl z52%!I#1MPT%*txd<2Yky7XOFB>t!8Pc_j0lP+7Ps@Q5+lPnlEINSY%~> zPh+--_Chtn=nP}iU~YKy{CO#iSl7_lIP;Zp$ir?7t*w+ezUAd*qdVPGd(Qb&ZMrg3 z@_v>81d-vqkB}c3zYyj;3Fee~v6sVk%W%%jku4usxB-N++P3Uf)ZleB5UrlwXo|)? z-rsvq;{uIraDqj%iP)e>OKbvB~_JXefGZ$e|dsK;}sz>nKA=g!zWT7Ang; z)ns&VBt8?yf+C|H;FV=w&Toywazz}FA{B+478yad1vAAV+2l^tQj^W;UXclLV9>k| zwh+;kugUk|W|Lk;;XNEr;BztIkx#;dLtfY1z#WNb(HinjgmN=(o7KJ{%pu!{w>Ob( z+3OrEn)6*U2!w@?ws5;00Ca5Y0%ABHI6O9NUEyC);k%H)WyJ*)h=2omPbXX|R<|L} zWWH5JBp|Ysg~cU^1e3&^7p7j;b&$9Y*^I4e0rH6sUn_=2@xWrvq~d3T3bBnUDK(aS~m5K&Qqt=ZHz`x5Q4GVW7Y7YgDf z1d#37N+(|C0_A-TYRL}NM!CY1o={?g4bxl0@pR3JK8C}#tzGyjqnFp&$0P1yuNBrn zWC^k|>cf4}TXsPqg}gO5Ey6)M3M=0|2557R8pgF6GUVWPCxQ8f_2ycc`I1H1V2)O1 z#xjR?ImwrhFqQaFY+}t-6Z~2Im;Z6C^|_`zI>H#umBm%EP3S8L8bq!*L z7Qto>(~j2ZW_J#SSI%k>J9@?9RPM9OMy3iSeF`JpXQ`NdaVaW0&p6;(s&NzrEPe;J zHN@FCutlz5EiPZqB2Yo22v+(LF#$zkAcYK$=4nvaqD@*13sN|hP6p?7F|iUyi?Sw{ zJgZqXJ>%#h4?#|5*w%nEMGrtYUBxhvP5~>?rvc&2b4O8dxrfB?cOd0vO;b&0$o2YErBv>`=)zmXspPU%tWBu=^W+N#PD_t6DbLLu(sUfJx5b|?j^vFY{B`VKM76<*8g zQ4rbJuml-v(eo8WWCj}s=q&MYBWB(!6EK=WKR!S4*Wdn%|NQHJ;$QyTKjZc4I9r1g zzjz*J;IkoXV7RS`xi+Z_L^}>?n@~1IlTw7LtkaYNTA9X33=$2pwv5*+9CvJx-uEDC zl60487;?jRDh~a%Ye8$dy zD3VeN5{HD_Z^FW1q-+fOsGQKK?JeAV7Q;eJ(#zb@BnDx}`HG>?PVZ_R{a|fi6CXIh z@%a)}n(?#Gtw|2FLmBmw%}WolO;VRcW7wLaZVn^iD}z*8Lp%G*?c~6Dew|-x^-fzD5UNvhDLnZeYy0wtv#OW{zgnDZY2Tc*-R*H35 znv`hE=@v5hCZ3I<>|QoXC@{)-55y2rHkX+~F^Ek*dJ9)L&#Z%I$jBup#fK4vnbm#2 zFS?dP*roh;YYLwoy>%QKqK(-*?s35Y927;}cVzC)Jiivv#yIrM+JE9=CbhPM`+5tS zTT_bjC#DUG-bkd<#LV-|$)6`07*eOZxAz7?ue$iY!xbxhU);6!u#DRC83T0VUNGmx zI|Z=5Vkp2q5j5V5>!M>@6%7&J*V_>tU0eN`rmc)UctnQ{zT@#{JE?8P=SxK3!!WNq z8twfo0jrq7?TUA~1u`5wi-wuzju?h&9`Y;($1fir_#glJKXD!(_~ZBQ__zP(-|@fx z{Xa17xshlBNv{;r&N(pV#VD*iKkOTuW6rxsT}e1|)-7XdosHueJ!`1A4&E!8t+k`f zKS6)V@@t)A(?D^w9x_ggfn$mq#eqYC=}FI_0F0t!5#g}L>ztWGZIOnfoj8vVh$(zZ z8C={f`Y=sv2pEpuR)aEuvA!W4hXekI#sH=dm<>$R8k$AsGKwZ+j6v%>yW5PI!5rkN z10o>|bIJ2Bdy-8<4A)l0>ZB8t;C@6rNMNwNVlNbn@Ve#@+c`r+#MV0?8tb02M`?68 zhVU(-wJ;rxb@;GwQKk@ak;oR+GYuLs`(VT_huHwLv)e*3dkRi$GJ-K4`<}4}+3SMf z9>m8}6zd)?-pghPBYVVNG{#n@p!GaYe7wG)w~l+>_~Va%;O~F`JO23ogYOn_-FY3Y za)+l)G-)^}AhL?Mm94L757Hex#5B&R3!wnoV9c0qbvACYh{V-jW^V+lArPFl5$B?A zRgFl!j)P>2cy_JoFfZC+3dLI*CoJ}sxaUXoOxR0Wz+&7 zKI?4f#(IrC!030J0Ag-6#vK{Z&C8%EDvS{e(V~M!!Lf{XV3e%8z@Rvkggn1Ow61f- z^&ZDFV%gd6J)=id@wJ=|6ph9$M29LQXSRq`a9KI*G>Sxhe&T2XBLP`j>?cX3g$lGC zqV~A5N(E20WON(&**8~A%<&dPO^A@k0bt$`DE-F*E`o}Zj*+oE#rq)zgD@9 zj~S68`RBBvBb8LA5P|pJp#VmSvw*Wloqah?*qMUP*(T9>aRG z*h7zgZgs9x6l_IMJ&snSOXJ)m1&>V|`r){_&PfBNjUYi*ZSFo^C# zt0BHagO`IXhh{sHdv^k?oI6ml*ULqXO*!h@5N>yM2Y$dG*_YYuie|spAhq|-V)w?J z3w^z~`70A6vSHg75x~!m-Q9JS`QCejf6vT(X16c*{^|+rnWBhXg&Bu$>uchq;BQ#aS8R`VtV4SBGdg>URF zkem1Ig&3|JRbz(R=Bk1SnzU;CkI6xt3bS9Au)x)qm`3(@LWmV@YcT99qaImM&?VjF zfXPBJ0=A+2rBGf*m6ofnJZG~y%;kV19Ui*~BAPkz^AdFr=LRDZ4FS4!95Lw1;imXA zIv_;}&6VgMDt-}}b=Xkjy*KX1(d;jG^Wo%d`qAdpZ9DJx&c8SnMT{)9Ih7s~L z@`8g#;WHS@-EdXiW5jbJ>v_uNGX$$yFU<3!BcM>(C5T}Ymde`R1tP~9pc@tJ$mVAb ztrn))jEyv3P9hhtrXAd?aVi4zbQ-368}ZIHs)!3z$6Xr6L={6#6lOPF zv|d@}HY3aKIC`vqzMQ>zaFP^xl}^CcP>N@NXU=horqb;#wa43*xya#|Z4neyXy*{m zGLN?g&=UCMEmLQuA1&ANv<+QPXInNGZOdORF$#q%>BK$yvGyIvPtH%xx`W97%z!lc z66x^B!d=ZK-^4{(6WAUDAo6ge??cv~gmzUo*!Ik=ND!wQHVZ~jY{5q@)(fuJB__(+ ziUYBoyyGx*Hf8pJ46WR8JOmB2Bw`{lpygOwZxWS(84%WN`FwuVZZxWfu#yij+! z#wR6VDF{(f8sSdhj%GakC0&4`xN@j?+^0s;4>*`eaa4+*CWnmq{AeQM#46i5hh)8V ziW96F6e*zC=A5fpQTs>=!$=;|&HdRj=7&xox5_9kQADn1Y|0u|gU?kSHDhL-%O-Yn zi=oXJv%br;QEtg3OQjgd@s&U+8zGA-{o`PUqE%*CgF@Rbq}c?FrKsoU*$4{S^no_( zjSa_)cG!eqq7hir_zp+*8wqNL+Kd^X2k!fd;YU))n$)_oL>uXxTd`RwAdBWXBV-U6bYP~lq``BOd^d9T)Z8Q%da`D=-P(eX*abnVmn7NuB&AAjkO`?x2Lz+40xNoC7)oaa7A#FvP zGz!E+RTTFkv(-7I$#oWIrn4idY$x!x;&8 z{Qlz~z;U3x_WOdW7tc;qCD(Is*jjZM9Y=F8N{tv{_eqDDQZzVMEl|Q>4nIqvMyD1! z%tx)2A+!z$X(El!Gu#|=8s498{PnND;otw)zu{m0`@i7VUw^^tI3bAU&)GW~bU9d9 z)7+#7q=N(_aN`-Vvq8O4Eh;wU8yi}a%`9_38Q<1Ahr~tkP`r)<_m~*(sQYsGFy_EL z0zDanw#ZMkX|S82E=`tzpEQjSh{RC5NrNz!461>TE#izoyhq8=q}=_=sHk}p@7j4k z1aUrtv!sqez~tb!Nenu=W?t-Fgp1DlHU{F6eK@nx%XKBsTG~7G5cqw=Midn>bl}-u z5NAcYu8hy~w20U+0HQ|>Qbzo)vp0Y-2jT|lX)p+k@X=3P{QK&LSNq^I6mVaD}>=L)14Cp0hz32w&;p_OWDu zkQ&a9aA-{qr7TpxLCfk5ALogad;EC6asT)cLTtve+~bO-eGV$KA4JoP&N#bPTtt&V z>0$R}BZw*jcxyP1j@J>G;yLel@5+6b=kPF09PA|~jZNxo zC~%D?`Oyy?uNTjvD@N$PE_~iM#ueB4e0|{P9fO~D(%fVowQV~Tn5^@3MHaauoZDu& zXSn&BM6_e*sG{C}-;VASe@qJ9J!ldkDvA9>8)-L3h-c?L@V*C*^Nj4?jD#UxImMOI zlzF+i=SBW+xKu~&drcxn0f?b)(8pS=S!2eqGm*y>w)=HsibD^BpmPA&gLr@&U81m@ z!yw-9dA%`3@%s1$|N7tmCu{)!_W%BG{9pg)|Be6n-~WlGz>7m8bHjO_=&j)%cL@v3 zj2L3udX%!9>04}9ez!nIFY)DhoZGWLYY+ksXM{t+xQ?@W(y`EHPi*xUyL3RpIcOtd z1_JY}XnNq5u|=Lzu&dFd@^NFjqjxPznQJ(^n>4)iz=@6%bo=)n1!XjR7a@-3vFNLK z4XQiE!*hlpv>w_O~fMt`>- zXT0lUvbU!-bh^hKJxHbCWloBN6-#}-obSW#sBIX_DLSL>Z@{3-agsn|)ryMe;hKg+ zqV5{$v~5QbUXA;Ya(x9wX`-Fadpw&HhT#{SnC@xe?3@FLrJ>>Ie3sk*8@PSKIDEYB z8}lCcI9_NCn0Dj32L^y|zx)Ng39cW%GiEGjCpUWkhS&K*KMuSd7O3X90u*#>s6ku@R&W-42cwx)>|Oa2dNly#D2}_t;p8Sx$BF~A)6I~?QUOKRd0St6G@5coVl{`9B3P>+O=@_nrJ5V1nrU~8$^ zS!F;q1L8E#MkbL6F|ErQ)Gp4JtT%&^nvOJ0&q>YNsa3_dlTtRs4voU1=hu!?9x5j7 zY)+zoMpnX2D|(l9{o?R&1F2q-SNu8beWG#U90WiYWxemzv2rfxdS6_mzo-w6K>Gr^ z4rCCh9mn+ScdGb7poX~YPN6FZ;E}4;3M;muY$ez8001BWNklJI(VH=oe<%OJxVn&pwc4Sx}ZO{=EL$9G(Kv z6b%2AGuEQGteg`zn@#W4mM(C(@Nrf5HYi*nkpi|C(NX1|e2PA6Y3ANf@%L9dXk1kg zkKPs7JmF@CaTb3ub6gYxacZeXWYUA#AhbJ0;mW_dm_vKQ^}4QoxMiEqSVy40L&a{X z174N~6l%4L8%IjgNdw7@9b!Ud3@Gf+(Ps@^+_O$en%OY4F8)claonvsqKm!jvqB=> zHci>E9{u+zwL(gXcWAcD%t%V;Mg>n|+cCy_?Wh|a+AvUWt?Gr!L=KTrT@@U}jOlx38rJ8Y zc4KqQuR#)#s1aZr&iJ~jX+67qn}|=M!xqOmyRtZhj z2q#CE@c*a34zIn=aK?h;OHX3^|KZPa&9%?iFHNBCZuEW8MG>b!R7d$rf2W)d5W}*R zby#FW*IHVvt2t#wKu;8=LN`G8x}^ieqG>NnYm!xyjA(s`e3`Ch49TD_CTh1@rr3kNQ%`S15-0UkoeobZXlEX3@t?($ z*BY*UVqA6K5>L^PbqAYC)UncT)R|`OmfS5%PgB}{znwMe7?dYDPsH&(##Yz+Fy8WddY>Yt8U)>=_v$+RLu2PH9wq<2AOcCr?(hYrq)0n6GbY&g;O9q6ro+}0{a3c% zw+!8&W{i-gLwZZuxq(!Ncx>lCN52~l#fC8Yit}KX>*sAy!?NrkXqfDttLHB6XS?S2 z4+O4K6T$YKQ4RBopJn%ra}sqJo6QEqjAgfCd$PmP@ewXQaS=~E0M$S$zxgDd{j6u< znP;w1iw!Y|^}M?|m~r~dX;fM5UZ=tX+Z~}8Rurq@0qr}^oNPEnd#8PWpE`Ml|1vWo(d8%A)UVYnY}9Id_wbn(=fknaylgP5dflwY5iQD{O;(S*x0x%Q^rX$uO6O z`z{qcYt;;oG*k-%@KDWGSKB*p>?GxS{XJk5=-#MvpFTCDVq`35Z#o5)*;jdai;yMIyd2D?!r>CXThl^ zejaXB*B_oT%CeYAhxhjHWQnk8N^wqE7EAOeLY4%f6eO)`?+lAzri97x{mH~xvdSv3 z2SfB;H*YpND7Un`SJ*Msz}ZkD{g?8rdyR>FK}JKThr!-8O@tb@zf}F+Y{o)vK2KT2 zgHmy_oPd!r=NWn0fWRnqwctdGfj0U7pD2h@=55#WBl|2Eh7dM_=S)F#;+&AJ&af7% z6j&wbmeXd|`IJ*ZhjF2v@5lNp0yi}lBmoL}�N95^HKv1ep@Z5X{L$qEZ%sGsy6` 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

+ +
diff --git a/frontend/src/app/components/transactions-list/transactions-list.component.scss b/frontend/src/app/components/transactions-list/transactions-list.component.scss index 280e36b0f..335464060 100644 --- a/frontend/src/app/components/transactions-list/transactions-list.component.scss +++ b/frontend/src/app/components/transactions-list/transactions-list.component.scss @@ -175,4 +175,15 @@ h2 { .witness-item { overflow: hidden; } -} \ No newline at end of file +} + +.badge-ord { + background-color: var(--grey); + position: relative; + top: -2px; + font-size: 81%; + border: 0; + &.primary { + background-color: var(--primary); + } +} diff --git a/frontend/src/app/components/transactions-list/transactions-list.component.ts b/frontend/src/app/components/transactions-list/transactions-list.component.ts index 316a6ab85..1f45d5241 100644 --- a/frontend/src/app/components/transactions-list/transactions-list.component.ts +++ b/frontend/src/app/components/transactions-list/transactions-list.component.ts @@ -11,6 +11,10 @@ import { BlockExtended } from '../../interfaces/node-api.interface'; import { ApiService } from '../../services/api.service'; import { PriceService } from '../../services/price.service'; import { StorageService } from '../../services/storage.service'; +import { OrdApiService } from '../../services/ord-api.service'; +import { Inscription } from '../ord-data/ord-data.component'; +import { Runestone } from '../../shared/ord/rune/runestone'; +import { Etching } from '../../shared/ord/rune/etching'; @Component({ selector: 'app-transactions-list', @@ -50,12 +54,14 @@ export class TransactionsListComponent implements OnInit, OnChanges { outputRowLimit: number = 12; showFullScript: { [vinIndex: number]: boolean } = {}; showFullWitness: { [vinIndex: number]: { [witnessIndex: number]: boolean } } = {}; + showOrdData: { [key: string]: { show: boolean; inscriptions?: Inscription[]; runestone?: Runestone, runeInfo?: { [id: string]: { etching: Etching; txid: string; } }; } } = {}; constructor( public stateService: StateService, private cacheService: CacheService, private electrsApiService: ElectrsApiService, private apiService: ApiService, + private ordApiService: OrdApiService, private assetsService: AssetsService, private ref: ChangeDetectorRef, private priceService: PriceService, @@ -239,6 +245,24 @@ export class TransactionsListComponent implements OnInit, OnChanges { tap((price) => tx['price'] = price), ).subscribe(); } + + // Check for ord data fingerprints in inputs and outputs + if (this.stateService.network !== 'liquid' && this.stateService.network !== 'liquidtestnet') { + for (let i = 0; i < tx.vin.length; i++) { + if (tx.vin[i].prevout?.scriptpubkey_type === 'v1_p2tr' && tx.vin[i].witness?.length) { + const hasAnnex = tx.vin[i].witness?.[tx.vin[i].witness.length - 1].startsWith('50'); + if (tx.vin[i].witness.length > (hasAnnex ? 2 : 1) && tx.vin[i].witness[tx.vin[i].witness.length - (hasAnnex ? 3 : 2)].includes('0063036f7264')) { + tx.vin[i].isInscription = true; + } + } + } + for (let i = 0; i < tx.vout.length; i++) { + if (tx.vout[i]?.scriptpubkey?.startsWith('6a5d')) { + tx.vout[i].isRunestone = true; + break; + } + } + } }); if (this.blockTime && this.transactions?.length && this.currency) { @@ -372,6 +396,40 @@ export class TransactionsListComponent implements OnInit, OnChanges { this.showFullWitness[vinIndex][witnessIndex] = !this.showFullWitness[vinIndex][witnessIndex]; } + toggleOrdData(txid: string, type: 'vin' | 'vout', index: number) { + const tx = this.transactions.find((tx) => tx.txid === txid); + if (!tx) { + return; + } + + const key = tx.txid + '-' + type + '-' + index; + this.showOrdData[key] = this.showOrdData[key] || { show: false }; + + if (type === 'vin') { + + if (!this.showOrdData[key].inscriptions) { + const hasAnnex = tx.vin[index].witness?.[tx.vin[index].witness.length - 1].startsWith('50'); + this.showOrdData[key].inscriptions = this.ordApiService.decodeInscriptions(tx.vin[index].witness[tx.vin[index].witness.length - (hasAnnex ? 3 : 2)]); + } + this.showOrdData[key].show = !this.showOrdData[key].show; + + } else if (type === 'vout') { + + if (!this.showOrdData[key].runestone) { + this.ordApiService.decodeRunestone$(tx).pipe( + tap((runestone) => { + if (runestone) { + Object.assign(this.showOrdData[key], runestone); + this.ref.markForCheck(); + } + }), + ).subscribe(); + } + this.showOrdData[key].show = !this.showOrdData[key].show; + + } + } + ngOnDestroy(): void { this.outspendsSubscription.unsubscribe(); this.currencyChangeSubscription?.unsubscribe(); diff --git a/frontend/src/app/interfaces/electrs.interface.ts b/frontend/src/app/interfaces/electrs.interface.ts index 5bc5bfc1d..95a749b60 100644 --- a/frontend/src/app/interfaces/electrs.interface.ts +++ b/frontend/src/app/interfaces/electrs.interface.ts @@ -74,6 +74,8 @@ export interface Vin { issuance?: Issuance; // Custom lazy?: boolean; + // Ord + isInscription?: boolean; } interface Issuance { @@ -98,6 +100,8 @@ export interface Vout { valuecommitment?: number; asset?: string; pegout?: Pegout; + // Ord + isRunestone?: boolean; } interface Pegout { diff --git a/frontend/src/app/services/electrs-api.service.ts b/frontend/src/app/services/electrs-api.service.ts index 8e991782b..f1468f8aa 100644 --- a/frontend/src/app/services/electrs-api.service.ts +++ b/frontend/src/app/services/electrs-api.service.ts @@ -107,6 +107,10 @@ export class ElectrsApiService { return this.httpClient.get(this.apiBaseUrl + this.apiBasePath + '/api/block-height/' + height, {responseType: 'text'}); } + getBlockTxId$(hash: string, index: number): Observable { + return this.httpClient.get(this.apiBaseUrl + this.apiBasePath + '/api/block/' + hash + '/txid/' + index, { responseType: 'text' }); + } + getAddress$(address: string): Observable
{ return this.httpClient.get
(this.apiBaseUrl + this.apiBasePath + '/api/address/' + address); } diff --git a/frontend/src/app/services/ord-api.service.ts b/frontend/src/app/services/ord-api.service.ts new file mode 100644 index 000000000..bc726e839 --- /dev/null +++ b/frontend/src/app/services/ord-api.service.ts @@ -0,0 +1,114 @@ +import { Injectable } from '@angular/core'; +import { catchError, forkJoin, map, Observable, of, switchMap, tap } from 'rxjs'; +import { Inscription } from '../components/ord-data/ord-data.component'; +import { Transaction } from '../interfaces/electrs.interface'; +import { getNextInscriptionMark, hexToBytes, extractInscriptionData } from '../shared/ord/inscription.utils'; +import { Runestone } from '../shared/ord/rune/runestone'; +import { Etching } from '../shared/ord/rune/etching'; +import { ElectrsApiService } from './electrs-api.service'; +import { UNCOMMON_GOODS } from '../shared/ord/rune/runestone'; + +@Injectable({ + providedIn: 'root' +}) +export class OrdApiService { + + constructor( + private electrsApiService: ElectrsApiService, + ) { } + + decodeRunestone$(tx: Transaction): Observable<{ runestone: Runestone, runeInfo: { [id: string]: { etching: Etching; txid: string; } } }> { + const runestoneTx = { vout: tx.vout.map(vout => ({ scriptpubkey: vout.scriptpubkey })) }; + const decipher = Runestone.decipher(runestoneTx); + + // For now, ignore cenotaphs + let message = decipher.isSome() ? decipher.unwrap() : null; + if (message?.type === 'cenotaph') { + return of({ runestone: null, runeInfo: {} }); + } + + const runestone = message as Runestone; + const runeInfo: { [id: string]: { etching: Etching; txid: string; } } = {}; + const runesToFetch: Set = new Set(); + + if (runestone) { + if (runestone.mint.isSome()) { + const mint = runestone.mint.unwrap().toString(); + + if (mint === '1:0') { + runeInfo[mint] = { etching: UNCOMMON_GOODS, txid: '0000000000000000000000000000000000000000000000000000000000000000' }; + } else { + runesToFetch.add(mint); + } + } + + if (runestone.edicts.length) { + runestone.edicts.forEach(edict => { + runesToFetch.add(edict.id.toString()); + }); + } + + if (runesToFetch.size) { + const runeEtchingObservables = Array.from(runesToFetch).map(runeId => { + return this.getEtchingFromRuneId$(runeId).pipe( + tap(etching => { + if (etching) { + runeInfo[runeId] = etching; + } + }) + ); + }); + + return forkJoin(runeEtchingObservables).pipe( + map(() => { + return { runestone: runestone, runeInfo }; + }) + ); + } + } + + return of({ runestone: runestone, runeInfo }); + } + + // Get etching from runeId by looking up the transaction that etched the rune + getEtchingFromRuneId$(runeId: string): Observable<{ etching: Etching; txid: string; }> { + const [blockNumber, txIndex] = runeId.split(':'); + + return this.electrsApiService.getBlockHashFromHeight$(parseInt(blockNumber)).pipe( + switchMap(blockHash => this.electrsApiService.getBlockTxId$(blockHash, parseInt(txIndex))), + switchMap(txId => this.electrsApiService.getTransaction$(txId)), + switchMap(tx => { + const decipheredMessage = Runestone.decipher(tx); + if (decipheredMessage.isSome()) { + const message = decipheredMessage.unwrap(); + if (message?.type === 'runestone' && message.etching.isSome()) { + return of({ etching: message.etching.unwrap(), txid: tx.txid }); + } + } + return of(null); + }), + catchError(() => of(null)) + ); + } + + decodeInscriptions(witness: string): Inscription[] | null { + + const inscriptions: Inscription[] = []; + const raw = hexToBytes(witness); + let startPosition = 0; + + while (true) { + const pointer = getNextInscriptionMark(raw, startPosition); + if (pointer === -1) break; + + const inscription = extractInscriptionData(raw, pointer); + if (inscription) { + inscriptions.push(inscription); + } + + startPosition = pointer; + } + + return inscriptions; + } +} diff --git a/frontend/src/app/shared/shared.module.ts b/frontend/src/app/shared/shared.module.ts index 92b461548..25a60a70f 100644 --- a/frontend/src/app/shared/shared.module.ts +++ b/frontend/src/app/shared/shared.module.ts @@ -102,6 +102,7 @@ import { AccelerationsListComponent } from '../components/acceleration/accelerat import { PendingStatsComponent } from '../components/acceleration/pending-stats/pending-stats.component'; import { AccelerationStatsComponent } from '../components/acceleration/acceleration-stats/acceleration-stats.component'; import { AccelerationSparklesComponent } from '../components/acceleration/sparkles/acceleration-sparkles.component'; +import { OrdDataComponent } from '../components/ord-data/ord-data.component'; import { BlockViewComponent } from '../components/block-view/block-view.component'; import { EightBlocksComponent } from '../components/eight-blocks/eight-blocks.component'; @@ -229,6 +230,7 @@ import { OnlyVsizeDirective, OnlyWeightDirective } from './components/weight-dir AccelerationStatsComponent, PendingStatsComponent, AccelerationSparklesComponent, + OrdDataComponent, HttpErrorComponent, TwitterWidgetComponent, FaucetComponent, @@ -361,6 +363,7 @@ import { OnlyVsizeDirective, OnlyWeightDirective } from './components/weight-dir AccelerationStatsComponent, PendingStatsComponent, AccelerationSparklesComponent, + OrdDataComponent, HttpErrorComponent, TwitterWidgetComponent, TwitterLogin, From acae5a33b08fe4bd0edb7560cd41b0ac5a26f273 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Tue, 8 Oct 2024 01:41:35 +0000 Subject: [PATCH 086/147] replace rune parsing dependencies with minimal reimplementation --- .../ord-data/ord-data.component.html | 30 +- .../components/ord-data/ord-data.component.ts | 72 +--- .../transactions-list.component.ts | 7 +- frontend/src/app/services/ord-api.service.ts | 41 +- frontend/src/app/shared/ord/rune.utils.ts | 258 ++++++++++++ frontend/src/app/shared/ord/rune/artifact.ts | 4 - frontend/src/app/shared/ord/rune/cenotaph.ts | 14 - frontend/src/app/shared/ord/rune/constants.ts | 7 - frontend/src/app/shared/ord/rune/edict.ts | 34 -- frontend/src/app/shared/ord/rune/etching.ts | 54 --- frontend/src/app/shared/ord/rune/flag.ts | 20 - frontend/src/app/shared/ord/rune/flaw.ts | 12 - .../src/app/shared/ord/rune/integer/index.ts | 4 - .../src/app/shared/ord/rune/integer/u128.ts | 176 -------- .../src/app/shared/ord/rune/integer/u32.ts | 58 --- .../src/app/shared/ord/rune/integer/u64.ts | 58 --- .../src/app/shared/ord/rune/integer/u8.ts | 58 --- frontend/src/app/shared/ord/rune/message.ts | 67 --- frontend/src/app/shared/ord/rune/monads.ts | 392 ------------------ frontend/src/app/shared/ord/rune/rune.ts | 23 - frontend/src/app/shared/ord/rune/runeid.ts | 89 ---- frontend/src/app/shared/ord/rune/runestone.ts | 258 ------------ frontend/src/app/shared/ord/rune/script.ts | 237 ----------- frontend/src/app/shared/ord/rune/seekarray.ts | 43 -- .../src/app/shared/ord/rune/spacedrune.ts | 21 - frontend/src/app/shared/ord/rune/tag.ts | 60 --- frontend/src/app/shared/ord/rune/terms.ts | 9 - frontend/src/app/shared/ord/rune/utils.ts | 6 - 28 files changed, 300 insertions(+), 1812 deletions(-) create mode 100644 frontend/src/app/shared/ord/rune.utils.ts delete mode 100644 frontend/src/app/shared/ord/rune/artifact.ts delete mode 100644 frontend/src/app/shared/ord/rune/cenotaph.ts delete mode 100644 frontend/src/app/shared/ord/rune/constants.ts delete mode 100644 frontend/src/app/shared/ord/rune/edict.ts delete mode 100644 frontend/src/app/shared/ord/rune/etching.ts delete mode 100644 frontend/src/app/shared/ord/rune/flag.ts delete mode 100644 frontend/src/app/shared/ord/rune/flaw.ts delete mode 100644 frontend/src/app/shared/ord/rune/integer/index.ts delete mode 100644 frontend/src/app/shared/ord/rune/integer/u128.ts delete mode 100644 frontend/src/app/shared/ord/rune/integer/u32.ts delete mode 100644 frontend/src/app/shared/ord/rune/integer/u64.ts delete mode 100644 frontend/src/app/shared/ord/rune/integer/u8.ts delete mode 100644 frontend/src/app/shared/ord/rune/message.ts delete mode 100644 frontend/src/app/shared/ord/rune/monads.ts delete mode 100644 frontend/src/app/shared/ord/rune/rune.ts delete mode 100644 frontend/src/app/shared/ord/rune/runeid.ts delete mode 100644 frontend/src/app/shared/ord/rune/runestone.ts delete mode 100644 frontend/src/app/shared/ord/rune/script.ts delete mode 100644 frontend/src/app/shared/ord/rune/seekarray.ts delete mode 100644 frontend/src/app/shared/ord/rune/spacedrune.ts delete mode 100644 frontend/src/app/shared/ord/rune/tag.ts delete mode 100644 frontend/src/app/shared/ord/rune/terms.ts delete mode 100644 frontend/src/app/shared/ord/rune/utils.ts diff --git a/frontend/src/app/components/ord-data/ord-data.component.html b/frontend/src/app/components/ord-data/ord-data.component.html index be9a24715..696e7ea17 100644 --- a/frontend/src/app/components/ord-data/ord-data.component.html +++ b/frontend/src/app/components/ord-data/ord-data.component.html @@ -7,23 +7,23 @@ Mint {{ minted >= 100000 ? (minted | amountShortener:undefined:undefined:true) : minted }} - + } - @if (totalSupply > -1) { - @if (premined > 0) { + @if (runestone?.etching?.supply) { + @if (runestone?.etching.premine > 0) { Premine - {{ premined >= 100000 ? (premined | amountShortener:undefined:undefined:true) : premined }} - {{ etchedSymbol }} - {{ etchedName }} - ({{ premined / totalSupply * 100 | amountShortener:0}}% of total supply) + {{ runestone.etching.premine >= 100000 ? (toNumber(runestone.etching.premine) | amountShortener:undefined:undefined:true) : runestone.etching.premine }} + {{ runestone.etching.symbol }} + {{ runestone.etching.spacedName }} + ({{ toNumber(runestone.etching.premine) / toNumber(runestone.etching.supply) * 100 | amountShortener:0}}% of total supply) - } @else { + } @else { Etching of - {{ etchedSymbol }} - {{ etchedName }} + {{ runestone.etching.symbol }} + {{ runestone.etching.spacedName }} } } @@ -36,12 +36,6 @@ } - - @if (inscriptions?.length && type === 'vin') {
@@ -68,8 +62,8 @@ } - {{ runeInfo[id]?.etching.symbol.isSome() ? runeInfo[id]?.etching.symbol.unwrap() : '' }} + {{ runeInfo[id]?.etching.symbol || '' }} - {{ runeInfo[id]?.name }} + {{ runeInfo[id]?.etching.spacedName }} \ No newline at end of file diff --git a/frontend/src/app/components/ord-data/ord-data.component.ts b/frontend/src/app/components/ord-data/ord-data.component.ts index 8d7eef973..233b8d243 100644 --- a/frontend/src/app/components/ord-data/ord-data.component.ts +++ b/frontend/src/app/components/ord-data/ord-data.component.ts @@ -1,9 +1,6 @@ import { ChangeDetectionStrategy, Component, Input, OnChanges, SimpleChanges } from '@angular/core'; -import { Runestone } from '../../shared/ord/rune/runestone'; -import { Etching } from '../../shared/ord/rune/etching'; -import { u128, u32, u8 } from '../../shared/ord/rune/integer'; import { HttpErrorResponse } from '@angular/common/http'; -import { SpacedRune } from '../../shared/ord/rune/spacedrune'; +import { Runestone, Etching } from '../../shared/ord/rune.utils'; export interface Inscription { body?: Uint8Array; @@ -22,79 +19,34 @@ export interface Inscription { export class OrdDataComponent implements OnChanges { @Input() inscriptions: Inscription[]; @Input() runestone: Runestone; - @Input() runeInfo: { [id: string]: { etching: Etching; txid: string; name?: string; } }; + @Input() runeInfo: { [id: string]: { etching: Etching; txid: string } }; @Input() error: HttpErrorResponse; @Input() type: 'vin' | 'vout'; + toNumber = (value: bigint): number => Number(value); + // Inscriptions inscriptionsData: { [key: string]: { count: number, totalSize: number, text?: string; json?: JSON; tag?: string; delegate?: string } }; // Rune mints minted: number; - // Rune etching - premined: number = -1; - totalSupply: number = -1; - etchedName: string; - etchedSymbol: string; // Rune transfers - transferredRunes: { key: string; etching: Etching; txid: string; name?: string; }[] = []; + transferredRunes: { key: string; etching: Etching; txid: string }[] = []; constructor() { } ngOnChanges(changes: SimpleChanges): void { if (changes.runestone && this.runestone) { - - Object.keys(this.runeInfo).forEach((key) => { - const rune = this.runeInfo[key].etching.rune.isSome() ? this.runeInfo[key].etching.rune.unwrap() : null; - const spacers = this.runeInfo[key].etching.spacers.isSome() ? this.runeInfo[key].etching.spacers.unwrap() : u32(0); - if (rune) { - this.runeInfo[key].name = new SpacedRune(rune, Number(spacers)).toString(); - } - this.transferredRunes.push({ key, ...this.runeInfo[key] }); - }); - - - if (this.runestone.mint.isSome() && this.runeInfo[this.runestone.mint.unwrap().toString()]) { - const mint = this.runestone.mint.unwrap().toString(); + this.transferredRunes = Object.entries(this.runeInfo).map(([key, runeInfo]) => ({ key, ...runeInfo })); + if (this.runestone.mint && this.runeInfo[this.runestone.mint.toString()]) { + const mint = this.runestone.mint.toString(); this.transferredRunes = this.transferredRunes.filter(rune => rune.key !== mint); - const terms = this.runeInfo[mint].etching.terms.isSome() ? this.runeInfo[mint].etching.terms.unwrap() : null; - let amount: u128; - if (terms) { - amount = terms.amount.isSome() ? terms.amount.unwrap() : u128(0); - } - const divisibility = this.runeInfo[mint].etching.divisibility.isSome() ? this.runeInfo[mint].etching.divisibility.unwrap() : u8(0); + const terms = this.runeInfo[mint].etching.terms; + const amount = terms?.amount; + const divisibility = this.runeInfo[mint].etching.divisibility; if (amount) { this.minted = this.getAmount(amount, divisibility); } } - - if (this.runestone.etching.isSome()) { - const etching = this.runestone.etching.unwrap(); - const rune = etching.rune.isSome() ? etching.rune.unwrap() : null; - const spacers = etching.spacers.isSome() ? etching.spacers.unwrap() : u32(0); - if (rune) { - this.etchedName = new SpacedRune(rune, Number(spacers)).toString(); - } - this.etchedSymbol = etching.symbol.isSome() ? etching.symbol.unwrap() : ''; - - const divisibility = etching.divisibility.isSome() ? etching.divisibility.unwrap() : u8(0); - const premine = etching.premine.isSome() ? etching.premine.unwrap() : u128(0); - if (premine) { - this.premined = this.getAmount(premine, divisibility); - } else { - this.premined = 0; - } - const terms = etching.terms.isSome() ? etching.terms.unwrap() : null; - let amount: u128; - if (terms) { - amount = terms.amount.isSome() ? terms.amount.unwrap() : u128(0); - if (amount) { - const cap = terms.cap.isSome() ? terms.cap.unwrap() : u128(0); - this.totalSupply = this.premined + this.getAmount(amount, divisibility) * Number(cap); - } - } else { - this.totalSupply = this.premined; - } - } } if (changes.inscriptions && this.inscriptions) { @@ -131,7 +83,7 @@ export class OrdDataComponent implements OnChanges { } } - getAmount(amount: u128 | bigint, divisibility: u8): number { + getAmount(amount: bigint, divisibility: number): number { const divisor = BigInt(10) ** BigInt(divisibility); const result = amount / divisor; diff --git a/frontend/src/app/components/transactions-list/transactions-list.component.ts b/frontend/src/app/components/transactions-list/transactions-list.component.ts index 1f45d5241..706ee9684 100644 --- a/frontend/src/app/components/transactions-list/transactions-list.component.ts +++ b/frontend/src/app/components/transactions-list/transactions-list.component.ts @@ -6,15 +6,14 @@ import { Outspend, Transaction, Vin, Vout } from '../../interfaces/electrs.inter import { ElectrsApiService } from '../../services/electrs-api.service'; import { environment } from '../../../environments/environment'; import { AssetsService } from '../../services/assets.service'; -import { filter, map, tap, switchMap, shareReplay, catchError } from 'rxjs/operators'; +import { filter, map, tap, switchMap, catchError } from 'rxjs/operators'; import { BlockExtended } from '../../interfaces/node-api.interface'; import { ApiService } from '../../services/api.service'; import { PriceService } from '../../services/price.service'; import { StorageService } from '../../services/storage.service'; import { OrdApiService } from '../../services/ord-api.service'; import { Inscription } from '../ord-data/ord-data.component'; -import { Runestone } from '../../shared/ord/rune/runestone'; -import { Etching } from '../../shared/ord/rune/etching'; +import { Etching, Runestone } from '../../shared/ord/rune.utils'; @Component({ selector: 'app-transactions-list', @@ -261,7 +260,7 @@ export class TransactionsListComponent implements OnInit, OnChanges { tx.vout[i].isRunestone = true; break; } - } + } } }); diff --git a/frontend/src/app/services/ord-api.service.ts b/frontend/src/app/services/ord-api.service.ts index bc726e839..da75a74af 100644 --- a/frontend/src/app/services/ord-api.service.ts +++ b/frontend/src/app/services/ord-api.service.ts @@ -3,10 +3,9 @@ import { catchError, forkJoin, map, Observable, of, switchMap, tap } from 'rxjs' import { Inscription } from '../components/ord-data/ord-data.component'; import { Transaction } from '../interfaces/electrs.interface'; import { getNextInscriptionMark, hexToBytes, extractInscriptionData } from '../shared/ord/inscription.utils'; -import { Runestone } from '../shared/ord/rune/runestone'; -import { Etching } from '../shared/ord/rune/etching'; +import { decipherRunestone, Runestone, Etching, UNCOMMON_GOODS } from '../shared/ord/rune.utils'; import { ElectrsApiService } from './electrs-api.service'; -import { UNCOMMON_GOODS } from '../shared/ord/rune/runestone'; + @Injectable({ providedIn: 'root' @@ -18,27 +17,16 @@ export class OrdApiService { ) { } decodeRunestone$(tx: Transaction): Observable<{ runestone: Runestone, runeInfo: { [id: string]: { etching: Etching; txid: string; } } }> { - const runestoneTx = { vout: tx.vout.map(vout => ({ scriptpubkey: vout.scriptpubkey })) }; - const decipher = Runestone.decipher(runestoneTx); - - // For now, ignore cenotaphs - let message = decipher.isSome() ? decipher.unwrap() : null; - if (message?.type === 'cenotaph') { - return of({ runestone: null, runeInfo: {} }); - } - - const runestone = message as Runestone; + const runestone = decipherRunestone(tx); const runeInfo: { [id: string]: { etching: Etching; txid: string; } } = {}; const runesToFetch: Set = new Set(); if (runestone) { - if (runestone.mint.isSome()) { - const mint = runestone.mint.unwrap().toString(); - - if (mint === '1:0') { - runeInfo[mint] = { etching: UNCOMMON_GOODS, txid: '0000000000000000000000000000000000000000000000000000000000000000' }; + if (runestone.mint) { + if (runestone.mint.toString() === '1:0') { + runeInfo[runestone.mint.toString()] = { etching: UNCOMMON_GOODS, txid: '0000000000000000000000000000000000000000000000000000000000000000' }; } else { - runesToFetch.add(mint); + runesToFetch.add(runestone.mint.toString()); } } @@ -65,9 +53,10 @@ export class OrdApiService { }) ); } + return of({ runestone: runestone, runeInfo }); + } else { + return of({ runestone: null, runeInfo: {} }); } - - return of({ runestone: runestone, runeInfo }); } // Get etching from runeId by looking up the transaction that etched the rune @@ -78,11 +67,11 @@ export class OrdApiService { switchMap(blockHash => this.electrsApiService.getBlockTxId$(blockHash, parseInt(txIndex))), switchMap(txId => this.electrsApiService.getTransaction$(txId)), switchMap(tx => { - const decipheredMessage = Runestone.decipher(tx); - if (decipheredMessage.isSome()) { - const message = decipheredMessage.unwrap(); - if (message?.type === 'runestone' && message.etching.isSome()) { - return of({ etching: message.etching.unwrap(), txid: tx.txid }); + const runestone = decipherRunestone(tx); + if (runestone) { + const etching = runestone.etching; + if (etching) { + return of({ etching, txid: tx.txid }); } } return of(null); diff --git a/frontend/src/app/shared/ord/rune.utils.ts b/frontend/src/app/shared/ord/rune.utils.ts new file mode 100644 index 000000000..a1f947b46 --- /dev/null +++ b/frontend/src/app/shared/ord/rune.utils.ts @@ -0,0 +1,258 @@ +import { Transaction } from '../../interfaces/electrs.interface'; + +export const U128_MAX_BIGINT = 0xffff_ffff_ffff_ffff_ffff_ffff_ffff_ffffn; + +export class RuneId { + block: number; + index: number; + + constructor(block: number, index: number) { + this.block = block; + this.index = index; + } + + toString(): string { + return `${this.block}:${this.index}`; + } +} + +export type Etching = { + divisibility?: number; + premine?: bigint; + symbol?: string; + terms?: { + cap?: bigint; + amount?: bigint; + offset?: { + start?: bigint; + end?: bigint; + }; + height?: { + start?: bigint; + end?: bigint; + }; + }; + turbo?: boolean; + name?: string; + spacedName?: string; + supply?: bigint; +}; + +export type Edict = { + id: RuneId; + amount: bigint; + output: number; +}; + +export type Runestone = { + mint?: RuneId; + pointer?: number; + edicts?: Edict[]; + etching?: Etching; +}; + +type Message = { + fields: Record; + edicts: Edict[]; +} + +export const UNCOMMON_GOODS: Etching = { + divisibility: 0, + premine: 0n, + symbol: '⧉', + terms: { + cap: U128_MAX_BIGINT, + amount: 1n, + offset: { + start: 0n, + end: 0n, + }, + height: { + start: 840000n, + end: 1050000n, + }, + }, + turbo: false, + name: 'UNCOMMONGOODS', + spacedName: 'UNCOMMON•GOODS', + supply: U128_MAX_BIGINT, +}; + +enum Tag { + Body = 0, + Flags = 2, + Rune = 4, + Premine = 6, + Cap = 8, + Amount = 10, + HeightStart = 12, + HeightEnd = 14, + OffsetStart = 16, + OffsetEnd = 18, + Mint = 20, + Pointer = 22, + Cenotaph = 126, + + Divisibility = 1, + Spacers = 3, + Symbol = 5, + Nop = 127, +} + +const Flag = { + ETCHING: 1n, + TERMS: 1n << 1n, + TURBO: 1n << 2n, + CENOTAPH: 1n << 127n, +}; + +function hexToBytes(hex: string): Uint8Array { + return new Uint8Array(hex.match(/.{2}/g).map((byte) => parseInt(byte, 16))); +} + +function decodeLEB128(bytes: Uint8Array): bigint[] { + const integers: bigint[] = []; + let index = 0; + while (index < bytes.length) { + let value = BigInt(0); + let shift = 0; + let byte: number; + do { + byte = bytes[index++]; + value |= BigInt(byte & 0x7f) << BigInt(shift); + shift += 7; + } while (byte & 0x80); + integers.push(value); + } + return integers; +} + +function integersToMessage(integers: bigint[]): Message { + const message = { + fields: {}, + edicts: [], + }; + let inBody = false; + while (integers.length) { + if (!inBody) { + // The integers are interpreted as a sequence of tag/value pairs, with duplicate tags appending their value to the field value. + const tag: Tag = Number(integers.shift()); + if (tag === Tag.Body) { + inBody = true; + } else { + const value = integers.shift(); + if (message.fields[tag]) { + message.fields[tag].push(value); + } else { + message.fields[tag] = [value]; + } + } + } else { + // If a tag with value zero is encountered, all following integers are interpreted as a series of four-integer edicts, each consisting of a rune ID block height, rune ID transaction index, amount, and output. + const height = integers.shift(); + const txIndex = integers.shift(); + const amount = integers.shift(); + const output = integers.shift(); + message.edicts.push({ + id: { + block: height, + index: txIndex, + }, + amount, + output, + }); + } + } + return message; +} + +function parseRuneName(rune: bigint): string { + let name = ''; + rune += 1n; + while (rune > 0n) { + name = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'[Number((rune - 1n) % 26n)] + name; + rune = (rune - 1n) / 26n; + } + return name; +} + +function spaceRuneName(name: string, spacers: bigint): string { + let i = 0; + let spacedName = ''; + while (spacers > 0n || i < name.length) { + spacedName += name[i]; + if (spacers & 1n) { + spacedName += '•'; + } + if (spacers > 0n) { + spacers >>= 1n; + } + i++; + } + return spacedName; +} + +function messageToRunestone(message: Message): Runestone { + let etching: Etching | undefined; + let mint: RuneId | undefined; + let pointer: number | undefined; + + const flags = message.fields[Tag.Flags]?.[0] || 0n; + if (flags & Flag.ETCHING) { + const hasTerms = (flags & Flag.TERMS) > 0n; + const isTurbo = (flags & Flag.TURBO) > 0n; + const name = parseRuneName(message.fields[Tag.Rune][0]); + etching = { + divisibility: Number(message.fields[Tag.Divisibility][0]), + premine: message.fields[Tag.Premine]?.[0], + symbol: message.fields[Tag.Symbol]?.[0] ? String.fromCodePoint(Number(message.fields[Tag.Symbol][0])) : '¤', + terms: hasTerms ? { + cap: message.fields[Tag.Cap]?.[0], + amount: message.fields[Tag.Amount]?.[0], + offset: { + start: message.fields[Tag.OffsetStart]?.[0], + end: message.fields[Tag.OffsetEnd]?.[0], + }, + height: { + start: message.fields[Tag.HeightStart]?.[0], + end: message.fields[Tag.HeightEnd]?.[0], + }, + } : undefined, + turbo: isTurbo, + name, + spacedName: spaceRuneName(name, message.fields[Tag.Spacers]?.[0] ?? 0n), + }; + etching.supply = ( + (etching.terms?.cap ?? 0n) * (etching.terms?.amount ?? 0n) + ) + (etching.premine ?? 0n); + } + const mintField = message.fields[Tag.Mint]; + if (mintField) { + mint = new RuneId(Number(mintField[0]), Number(mintField[1])); + } + const pointerField = message.fields[Tag.Pointer]; + if (pointerField) { + pointer = Number(pointerField[0]); + } + return { + mint, + pointer, + edicts: message.edicts, + etching, + }; +} + +export function decipherRunestone(tx: Transaction): Runestone | void { + const payload = tx.vout.find((vout) => vout.scriptpubkey.startsWith('6a5d'))?.scriptpubkey_asm.replace(/OP_\w+|\s/g, ''); + if (!payload) { + return; + } + try { + const integers = decodeLEB128(hexToBytes(payload)); + const message = integersToMessage(integers); + return messageToRunestone(message); + } catch (error) { + console.error(error); + return; + } +} diff --git a/frontend/src/app/shared/ord/rune/artifact.ts b/frontend/src/app/shared/ord/rune/artifact.ts deleted file mode 100644 index 2eba9f158..000000000 --- a/frontend/src/app/shared/ord/rune/artifact.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { Cenotaph } from './cenotaph'; -import { Runestone } from './runestone'; - -export type Artifact = Cenotaph | Runestone; diff --git a/frontend/src/app/shared/ord/rune/cenotaph.ts b/frontend/src/app/shared/ord/rune/cenotaph.ts deleted file mode 100644 index 368a0f938..000000000 --- a/frontend/src/app/shared/ord/rune/cenotaph.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Flaw } from './flaw'; -import { None, Option } from './monads'; -import { Rune } from './rune'; -import { RuneId } from './runeid'; - -export class Cenotaph { - readonly type = 'cenotaph'; - - constructor( - readonly flaws: Flaw[], - readonly etching: Option = None, - readonly mint: Option = None - ) {} -} diff --git a/frontend/src/app/shared/ord/rune/constants.ts b/frontend/src/app/shared/ord/rune/constants.ts deleted file mode 100644 index 0e4bab116..000000000 --- a/frontend/src/app/shared/ord/rune/constants.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { u8 } from './integer'; -import { opcodes } from './script'; - -export const MAX_DIVISIBILITY = u8(38); - -export const OP_RETURN = opcodes.OP_RETURN; -export const MAGIC_NUMBER = opcodes.OP_13; diff --git a/frontend/src/app/shared/ord/rune/edict.ts b/frontend/src/app/shared/ord/rune/edict.ts deleted file mode 100644 index ede5865a6..000000000 --- a/frontend/src/app/shared/ord/rune/edict.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { Option, Some, None } from './monads'; -import { RuneId } from './runeid'; -import { u128, u32 } from './integer'; - -export type Edict = { - id: RuneId; - amount: u128; - output: u32; -}; - -export namespace Edict { - export function fromIntegers( - numOutputs: number, - id: RuneId, - amount: u128, - output: u128 - ): Option { - if (id.block === 0n && id.tx > 0n) { - return None; - } - - const optionOutputU32 = u128.tryIntoU32(output); - if (optionOutputU32.isNone()) { - return None; - } - const outputU32 = optionOutputU32.unwrap(); - - if (outputU32 > numOutputs) { - return None; - } - - return Some({ id, amount, output: outputU32 }); - } -} diff --git a/frontend/src/app/shared/ord/rune/etching.ts b/frontend/src/app/shared/ord/rune/etching.ts deleted file mode 100644 index edc245565..000000000 --- a/frontend/src/app/shared/ord/rune/etching.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { None, Option, Some } from './monads'; -import { Terms } from './terms'; -import { Rune } from './rune'; -import { u128, u32, u8 } from './integer'; - -type RuneEtchingBase = { - divisibility?: number; - premine?: bigint; - symbol?: string; - terms?: { - cap?: bigint; - amount?: bigint; - offset?: { - start?: bigint; - end?: bigint; - }; - height?: { - start?: bigint; - end?: bigint; - }; - }; - turbo?: boolean; -}; - -export type RuneEtchingSpec = RuneEtchingBase & { runeName?: string }; - -export class Etching { - readonly symbol: Option; - - constructor( - readonly divisibility: Option, - readonly rune: Option, - readonly spacers: Option, - symbol: Option, - readonly terms: Option, - readonly premine: Option, - readonly turbo: boolean - ) { - this.symbol = symbol.andThen((value) => { - const codePoint = value.codePointAt(0); - return codePoint !== undefined ? Some(String.fromCodePoint(codePoint)) : None; - }); - } - - get supply(): Option { - const premine = this.premine.unwrapOr(u128(0)); - const cap = this.terms.andThen((terms) => terms.cap).unwrapOr(u128(0)); - const amount = this.terms.andThen((terms) => terms.amount).unwrapOr(u128(0)); - - return u128 - .checkedMultiply(cap, amount) - .andThen((multiplyResult) => u128.checkedAdd(premine, multiplyResult)); - } -} diff --git a/frontend/src/app/shared/ord/rune/flag.ts b/frontend/src/app/shared/ord/rune/flag.ts deleted file mode 100644 index 317c74ae5..000000000 --- a/frontend/src/app/shared/ord/rune/flag.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { u128 } from './integer'; - -export enum Flag { - ETCHING = 0, - TERMS = 1, - TURBO = 2, - CENOTAPH = 127, -} - -export namespace Flag { - export function mask(flag: Flag): u128 { - return u128(1n << BigInt(flag)); - } - - export function take(flags: u128, flag: Flag): { set: boolean; flags: u128 } { - const mask = Flag.mask(flag); - const set = (flags & mask) !== 0n; - return { set, flags: set ? u128(flags - mask) : flags }; - } -} diff --git a/frontend/src/app/shared/ord/rune/flaw.ts b/frontend/src/app/shared/ord/rune/flaw.ts deleted file mode 100644 index 2ed5ea506..000000000 --- a/frontend/src/app/shared/ord/rune/flaw.ts +++ /dev/null @@ -1,12 +0,0 @@ -export enum Flaw { - EDICT_OUTPUT, - EDICT_RUNE_ID, - INVALID_SCRIPT, - OPCODE, - SUPPLY_OVERFLOW, - TRAILING_INTEGERS, - TRUNCATED_FIELD, - UNRECOGNIZED_EVEN_TAG, - UNRECOGNIZED_FLAG, - VARINT, -} diff --git a/frontend/src/app/shared/ord/rune/integer/index.ts b/frontend/src/app/shared/ord/rune/integer/index.ts deleted file mode 100644 index 3c54a77e7..000000000 --- a/frontend/src/app/shared/ord/rune/integer/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export { u8 } from './u8'; -export { u32 } from './u32'; -export { u64 } from './u64'; -export { u128 } from './u128'; diff --git a/frontend/src/app/shared/ord/rune/integer/u128.ts b/frontend/src/app/shared/ord/rune/integer/u128.ts deleted file mode 100644 index 78de8506f..000000000 --- a/frontend/src/app/shared/ord/rune/integer/u128.ts +++ /dev/null @@ -1,176 +0,0 @@ -import { None, Option, Some } from '../monads'; -import { SeekArray } from '../seekarray'; -import { u64 } from './u64'; -import { u32 } from './u32'; -import { u8 } from './u8'; - -/** - * A little utility type used for nominal typing. - * - * See {@link https://michalzalecki.com/nominal-typing-in-typescript/} - */ -type BigTypedNumber = bigint & { - /** - * # !!! DO NOT USE THIS PROPERTY IN YOUR CODE !!! - * ## This is just used to make each `BigTypedNumber` alias unique for Typescript and doesn't actually exist. - * @ignore - * @private - * @readonly - * @type {undefined} - */ - readonly __kind__: T; -}; - -/** - * ## 128-bit unsigned integer - * - * - **Value Range:** `0` to `340282366920938463463374607431768211455` - * - **Size in bytes:** `16` - * - **Web IDL type:** `bigint` - * - **Equivalent C type:** `uint128_t` - */ -export type u128 = BigTypedNumber<'u128'>; - -export const U128_MAX_BIGINT = 0xffff_ffff_ffff_ffff_ffff_ffff_ffff_ffffn; - -/** - * Convert Number or BigInt to 128-bit unsigned integer. - * @param num - The Number or BigInt to convert. - * @returns - The resulting 128-bit unsigned integer (BigInt). - */ -export function u128(num: number | bigint): u128 { - if (typeof num == 'bigint') { - if (num < 0n || num > U128_MAX_BIGINT) { - throw new Error('num is out of range'); - } - } else { - if (!Number.isSafeInteger(num) || num < 0) { - throw new Error('num is not a valid integer'); - } - } - - return BigInt(num) as u128; -} - -export namespace u128 { - export const MAX = u128(U128_MAX_BIGINT); - - export function checkedAdd(x: u128, y: u128): Option { - const result = x + y; - if (result > u128.MAX) { - return None; - } - - return Some(u128(result)); - } - - export function checkedAddThrow(x: u128, y: u128): u128 { - const option = u128.checkedAdd(x, y); - if (option.isNone()) { - throw new Error('checked add overflow'); - } - return option.unwrap(); - } - - export function checkedSub(x: u128, y: u128): Option { - const result = x - y; - if (result < 0n) { - return None; - } - - return Some(u128(result)); - } - - export function checkedSubThrow(x: u128, y: u128): u128 { - const option = u128.checkedSub(x, y); - if (option.isNone()) { - throw new Error('checked sub overflow'); - } - return option.unwrap(); - } - - export function checkedMultiply(x: u128, y: u128): Option { - const result = x * y; - if (result > u128.MAX) { - return None; - } - - return Some(u128(result)); - } - - export function saturatingAdd(x: u128, y: u128): u128 { - const result = x + y; - return result > u128.MAX ? u128.MAX : u128(result); - } - - export function saturatingMultiply(x: u128, y: u128): u128 { - const result = x * y; - return result > u128.MAX ? u128.MAX : u128(result); - } - - export function saturatingSub(x: u128, y: u128): u128 { - return u128(x < y ? 0 : x - y); - } - - export function decodeVarInt(seekArray: SeekArray): Option { - try { - return Some(tryDecodeVarInt(seekArray)); - } catch (e) { - return None; - } - } - - export function tryDecodeVarInt(seekArray: SeekArray): u128 { - let result: u128 = u128(0); - for (let i = 0; i <= 18; i++) { - const byte = seekArray.readUInt8(); - if (byte === undefined) throw new Error('Unterminated or invalid data'); - - // Ensure all operations are done in bigint domain. - const byteBigint = BigInt(byte); - const value = u128(byteBigint & 0x7Fn); // Ensure the 'value' is treated as u128. - - if (i === 18 && (value & 0x7Cn) !== 0n) throw new Error('Overflow'); - - // Use bigint addition instead of bitwise OR to combine the results, - // and ensure shifting is handled correctly within the bigint domain. - result = u128(result + (value << (7n * BigInt(i)))); - - if ((byte & 0x80) === 0) return result; - } - throw new Error('Overlong encoding'); - } - - export function encodeVarInt(value: u128): Uint8Array { - const bytes = []; - while (value >> 7n > 0n) { - bytes.push(Number(value & 0x7Fn) | 0x80); - value = u128(value >> 7n); // Explicitly cast the shifted value back to u128 - } - bytes.push(Number(value & 0x7Fn)); - return new Uint8Array(bytes); - } - - export function tryIntoU64(n: u128): Option { - return n > u64.MAX ? None : Some(u64(n)); - } - - export function tryIntoU32(n: u128): Option { - return n > u32.MAX ? None : Some(u32(n)); - } - - export function tryIntoU8(n: u128): Option { - return n > u8.MAX ? None : Some(u8(n)); - } -} - -export function* getAllU128(data: Uint8Array): Generator { - const seekArray = new SeekArray(data); - while (!seekArray.isFinished()) { - const nextValue = u128.decodeVarInt(seekArray); - if (nextValue.isNone()) { - return; - } - yield nextValue.unwrap(); - } -} diff --git a/frontend/src/app/shared/ord/rune/integer/u32.ts b/frontend/src/app/shared/ord/rune/integer/u32.ts deleted file mode 100644 index 90e517bb8..000000000 --- a/frontend/src/app/shared/ord/rune/integer/u32.ts +++ /dev/null @@ -1,58 +0,0 @@ -import { None, Option, Some } from '../monads'; - -/** - * A little utility type used for nominal typing. - * - * See {@link https://michalzalecki.com/nominal-typing-in-typescript/} - */ -type BigTypedNumber = bigint & { - /** - * # !!! DO NOT USE THIS PROPERTY IN YOUR CODE !!! - * ## This is just used to make each `BigTypedNumber` alias unique for Typescript and doesn't actually exist. - * @ignore - * @private - * @readonly - * @type {undefined} - */ - readonly __kind__: T; -}; - -export type u32 = BigTypedNumber<'u32'>; - -export const U32_MAX_BIGINT = 0xffff_ffffn; - -export function u32(num: number | bigint): u32 { - if (typeof num == 'bigint') { - if (num < 0n || num > U32_MAX_BIGINT) { - throw new Error('num is out of range'); - } - } else { - if (!Number.isSafeInteger(num) || num < 0) { - throw new Error('num is not a valid integer'); - } - } - - return BigInt(num) as u32; -} - -export namespace u32 { - export const MAX = u32(U32_MAX_BIGINT); - - export function checkedAdd(x: u32, y: u32): Option { - const result = x + y; - if (result > u32.MAX) { - return None; - } - - return Some(u32(result)); - } - - export function checkedSub(x: u32, y: u32): Option { - const result = x - y; - if (result < 0n) { - return None; - } - - return Some(u32(result)); - } -} diff --git a/frontend/src/app/shared/ord/rune/integer/u64.ts b/frontend/src/app/shared/ord/rune/integer/u64.ts deleted file mode 100644 index 8010dd99c..000000000 --- a/frontend/src/app/shared/ord/rune/integer/u64.ts +++ /dev/null @@ -1,58 +0,0 @@ -import { None, Option, Some } from '../monads'; - -/** - * A little utility type used for nominal typing. - * - * See {@link https://michalzalecki.com/nominal-typing-in-typescript/} - */ -type BigTypedNumber = bigint & { - /** - * # !!! DO NOT USE THIS PROPERTY IN YOUR CODE !!! - * ## This is just used to make each `BigTypedNumber` alias unique for Typescript and doesn't actually exist. - * @ignore - * @private - * @readonly - * @type {undefined} - */ - readonly __kind__: T; -}; - -export type u64 = BigTypedNumber<'u64'>; - -export const U64_MAX_BIGINT = 0xffff_ffff_ffff_ffffn; - -export function u64(num: number | bigint): u64 { - if (typeof num == 'bigint') { - if (num < 0n || num > U64_MAX_BIGINT) { - throw new Error('num is out of range'); - } - } else { - if (!Number.isSafeInteger(num) || num < 0) { - throw new Error('num is not a valid integer'); - } - } - - return BigInt(num) as u64; -} - -export namespace u64 { - export const MAX = u64(U64_MAX_BIGINT); - - export function checkedAdd(x: u64, y: u64): Option { - const result = x + y; - if (result > u64.MAX) { - return None; - } - - return Some(u64(result)); - } - - export function checkedSub(x: u64, y: u64): Option { - const result = x - y; - if (result < 0n) { - return None; - } - - return Some(u64(result)); - } -} diff --git a/frontend/src/app/shared/ord/rune/integer/u8.ts b/frontend/src/app/shared/ord/rune/integer/u8.ts deleted file mode 100644 index 5676421b0..000000000 --- a/frontend/src/app/shared/ord/rune/integer/u8.ts +++ /dev/null @@ -1,58 +0,0 @@ -import { None, Option, Some } from '../monads'; - -/** - * A little utility type used for nominal typing. - * - * See {@link https://michalzalecki.com/nominal-typing-in-typescript/} - */ -type BigTypedNumber = bigint & { - /** - * # !!! DO NOT USE THIS PROPERTY IN YOUR CODE !!! - * ## This is just used to make each `BigTypedNumber` alias unique for Typescript and doesn't actually exist. - * @ignore - * @private - * @readonly - * @type {undefined} - */ - readonly __kind__: T; -}; - -export type u8 = BigTypedNumber<'u8'>; - -export const U8_MAX_BIGINT = 0xffn; - -export function u8(num: number | bigint): u8 { - if (typeof num == 'bigint') { - if (num < 0n || num > U8_MAX_BIGINT) { - throw new Error('num is out of range'); - } - } else { - if (!Number.isSafeInteger(num) || num < 0) { - throw new Error('num is not a valid integer'); - } - } - - return BigInt(num) as u8; -} - -export namespace u8 { - export const MAX = u8(U8_MAX_BIGINT); - - export function checkedAdd(x: u8, y: u8): Option { - const result = x + y; - if (result > u8.MAX) { - return None; - } - - return Some(u8(result)); - } - - export function checkedSub(x: u8, y: u8): Option { - const result = x - y; - if (result < 0n) { - return None; - } - - return Some(u8(result)); - } -} diff --git a/frontend/src/app/shared/ord/rune/message.ts b/frontend/src/app/shared/ord/rune/message.ts deleted file mode 100644 index cad1a8ced..000000000 --- a/frontend/src/app/shared/ord/rune/message.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { Edict } from './edict'; -import { Flaw } from './flaw'; -import { u128, u64, u32 } from './integer'; -import { RuneId } from './runeid'; -import { Tag } from './tag'; - -export class Message { - constructor( - readonly flaws: Flaw[], - readonly edicts: Edict[], - readonly fields: Map - ) {} - - static fromIntegers(numOutputs: number, payload: u128[]): Message { - const edicts: Edict[] = []; - const fields = new Map(); - const flaws: Flaw[] = []; - - for (const i of [...Array(Math.ceil(payload.length / 2)).keys()].map((n) => n * 2)) { - const tag = payload[i]; - - if (u128(Tag.BODY) === tag) { - let id = new RuneId(u64(0), u32(0)); - const chunkSize = 4; - - const body = payload.slice(i + 1); - for (let j = 0; j < body.length; j += chunkSize) { - const chunk = body.slice(j, j + chunkSize); - if (chunk.length !== chunkSize) { - flaws.push(Flaw.TRAILING_INTEGERS); - break; - } - - const optionNext = id.next(chunk[0], chunk[1]); - if (optionNext.isNone()) { - flaws.push(Flaw.EDICT_RUNE_ID); - break; - } - const next = optionNext.unwrap(); - - const optionEdict = Edict.fromIntegers(numOutputs, next, chunk[2], chunk[3]); - if (optionEdict.isNone()) { - flaws.push(Flaw.EDICT_OUTPUT); - break; - } - const edict = optionEdict.unwrap(); - - id = next; - edicts.push(edict); - } - break; - } - - const value = payload[i + 1]; - if (value === undefined) { - flaws.push(Flaw.TRUNCATED_FIELD); - break; - } - - const values = fields.get(tag) ?? []; - values.push(value); - fields.set(tag, values); - } - - return new Message(flaws, edicts, fields); - } -} diff --git a/frontend/src/app/shared/ord/rune/monads.ts b/frontend/src/app/shared/ord/rune/monads.ts deleted file mode 100644 index 7822acca9..000000000 --- a/frontend/src/app/shared/ord/rune/monads.ts +++ /dev/null @@ -1,392 +0,0 @@ -// Copied with MIT License from link below: -// https://github.com/thames-technology/monads/blob/de957d3d68449d659518d99be4ea74bbb70dfc8e/src/option/option.ts - -/** - * Type representing any value except 'undefined'. - * This is useful when working with strict null checks, ensuring that a value can be null but not undefined. - */ -type NonUndefined = {} | null; // eslint-disable-line @typescript-eslint/ban-types - -/** - * Enum-like object to represent the type of an Option (Some or None). - */ -export const OptionType = { - Some: Symbol(':some'), - None: Symbol(':none'), -}; - -/** - * Interface for handling match operations on an Option. - * Allows executing different logic based on the Option being Some or None. - */ -interface Match { - some: (val: A) => B; - none: (() => B) | B; -} - -/** - * The Option interface representing an optional value. - * An Option is either Some, holding a value, or None, indicating the absence of a value. - */ -export interface Option { - /** - * Represents the type of the Option: either Some or None. Useful for debugging and runtime checks. - */ - type: symbol; - - /** - * Determines if the Option is a Some. - * - * @returns true if the Option is Some, otherwise false. - * - * #### Example - * - * ```ts - * console.log(Some(5).isSome()); // true - * console.log(None.isSome()); // false - * ``` - */ - isSome(): boolean; - - /** - * Determines if the Option is None. - * - * @returns true if the Option is None, otherwise false. - * - * #### Example - * - * ```ts - * console.log(Some(5).isNone()); // false - * console.log(None.isNone()); // true - * ``` - */ - isNone(): boolean; - - /** - * Performs a match operation on the Option, allowing for branching logic based on its state. - * This method takes an object with functions for each case (Some or None) and executes - * the corresponding function based on the Option's state, returning the result. - * - * @param fn An object containing two properties: `some` and `none`, which are functions - * to handle the Some and None cases, respectively. - * @returns The result of applying the corresponding function based on the Option's state. - * - * #### Example - * - * ```ts - * const optionSome = Some(5); - * const matchResultSome = optionSome.match({ - * some: (value) => `The value is ${value}.`, - * none: () => 'There is no value.', - * }); - * console.log(matchResultSome); // Outputs: "The value is 5." - * - * const optionNone = None; - * const matchResultNone = optionNone.match({ - * some: (value) => `The value is ${value}.`, - * none: () => 'There is no value.', - * }); - * console.log(matchResultNone); // Outputs: "There is no value." - * ``` - */ - match(fn: Match): U; - - /** - * Applies a function to the contained value (if any), or returns a default if None. - * - * @param fn A function that takes a value of type T and returns a value of type U. - * @returns An Option containing the function's return value if the original Option is Some, otherwise None. - * - * #### Examples - * - * ```ts - * const length = Some("hello").map(s => s.length); // Some(5) - * const noneLength = None.map(s => s.length); // None - * ``` - */ - map(fn: (val: T) => U): Option; - - inspect(fn: (val: T) => void): Option; - - /** - * Transforms the Option into another by applying a function to the contained value, - * chaining multiple potentially failing operations. - * - * @param fn A function that takes a value of type T and returns an Option of type U. - * @returns The Option returned by the function if the original Option is Some, otherwise None. - * - * #### Examples - * - * ```ts - * const parse = (s: string) => { - * const parsed = parseInt(s); - * return isNaN(parsed) ? None : Some(parsed); - * }; - * const result = Some("123").andThen(parse); // Some(123) - * const noResult = Some("abc").andThen(parse); // None - * ``` - */ - andThen(fn: (val: T) => Option): Option; - - /** - * Returns this Option if it is Some, otherwise returns the option provided as a parameter. - * - * @param optb The alternative Option to return if the original Option is None. - * @returns The original Option if it is Some, otherwise `optb`. - * - * #### Examples - * - * ```ts - * const defaultOption = Some("default"); - * const someOption = Some("some").or(defaultOption); // Some("some") - * const noneOption = None.or(defaultOption); // Some("default") - * ``` - */ - or(optb: Option): Option; - - orElse(optb: () => Option): Option; - - /** - * Returns the option provided as a parameter if the original Option is Some, otherwise returns None. - * - * @param optb The Option to return if the original Option is Some. - * @returns `optb` if the original Option is Some, otherwise None. - * - * #### Examples - * - * ```ts - * const anotherOption = Some("another"); - * const someOption = Some("some").and(anotherOption); // Some("another") - * const noneOption = None.and(anotherOption); // None - * ``` - */ - and(optb: Option): Option; - - /** - * Returns the contained value if Some, otherwise returns the provided default value. - * - * @param def The default value to return if the Option is None. - * @returns The contained value if Some, otherwise `def`. - * - * #### Examples - * - * ```ts - * const someValue = Some("value").unwrapOr("default"); // "value" - * const noneValue = None.unwrapOr("default"); // "default" - * ``` - */ - unwrapOr(def: T): T; - - /** - * Unwraps an Option, yielding the contained value if Some, otherwise throws an error. - * - * @returns The contained value. - * @throws Error if the Option is None. - * - * #### Examples - * - * ```ts - * console.log(Some("value").unwrap()); // "value" - * console.log(None.unwrap()); // throws Error - * ``` - */ - unwrap(): T | never; -} - -/** - * Implementation of Option representing a value (Some). - */ -interface SomeOption extends Option { - unwrap(): T; -} - -/** - * Implementation of Option representing the absence of a value (None). - */ -interface NoneOption extends Option { - unwrap(): never; -} - -/** - * Represents a Some value of Option. - */ -class SomeImpl implements SomeOption { - constructor(private readonly val: T) {} - - get type() { - return OptionType.Some; - } - - isSome() { - return true; - } - - isNone() { - return false; - } - - match(fn: Match): B { - return fn.some(this.val); - } - - map(fn: (val: T) => U): Option { - return Some(fn(this.val)); - } - - inspect(fn: (val: T) => void): Option { - fn(this.val); - return this; - } - - andThen(fn: (val: T) => Option): Option { - return fn(this.val); - } - - or(_optb: Option): Option { - return this; - } - - orElse(optb: () => Option): Option { - return this; - } - - and(optb: Option): Option { - return optb; - } - - unwrapOr(_def: T): T { - return this.val; - } - - unwrap(): T { - return this.val; - } -} - -/** - * Represents a None value of Option. - */ -class NoneImpl implements NoneOption { - get type() { - return OptionType.None; - } - - isSome() { - return false; - } - - isNone() { - return true; - } - - match({ none }: Match): U { - if (typeof none === 'function') { - return (none as () => U)(); - } - - return none; - } - - map(_fn: (val: T) => U): Option { - return new NoneImpl(); - } - - inspect(fn: (val: T) => void): Option { - return this; - } - - andThen(_fn: (val: T) => Option): Option { - return new NoneImpl(); - } - - or(optb: Option): Option { - return optb; - } - - orElse(optb: () => Option): Option { - return optb(); - } - - and(_optb: Option): Option { - return new NoneImpl(); - } - - unwrapOr(def: T): T { - return def; - } - - unwrap(): never { - throw new ReferenceError('Trying to unwrap None.'); - } -} - -/** - * Creates a Some instance of Option containing the given value. - * This function is used to represent the presence of a value in an operation that may not always produce a value. - * - * @param val The value to be wrapped in a Some Option. - * @returns An Option instance representing the presence of a value. - * - * #### Example - * - * ```ts - * const option = Some(42); - * console.log(option.unwrap()); // Outputs: 42 - * ``` - */ -export function Some(val: T): Option { - return new SomeImpl(val); -} - -/** - * The singleton instance representing None, an Option with no value. - * This constant is used to represent the absence of a value in operations that may not always produce a value. - * - * #### Example - * - * ```ts - * const option = None; - * console.log(option.isNone()); // Outputs: true - * ``` - */ -export const None: Option = new NoneImpl(); // eslint-disable-line @typescript-eslint/no-explicit-any - -/** - * Type guard to check if an Option is a Some value. - * This function is used to narrow down the type of an Option to SomeOption in TypeScript's type system. - * - * @param val The Option to be checked. - * @returns true if the provided Option is a SomeOption, false otherwise. - * - * #### Example - * - * ```ts - * const option = Some('Success'); - * if (isSome(option)) { - * console.log('Option has a value:', option.unwrap()); - * } - * ``` - */ -export function isSome(val: Option): val is SomeOption { - return val.isSome(); -} - -/** - * Type guard to check if an Option is a None value. - * This function is used to narrow down the type of an Option to NoneOption in TypeScript's type system. - * - * @param val The Option to be checked. - * @returns true if the provided Option is a NoneOption, false otherwise. - * - * #### Example - * - * ```ts - * const option = None; - * if (isNone(option)) { - * console.log('Option does not have a value.'); - * } - * ``` - */ -export function isNone(val: Option): val is NoneOption { - return val.isNone(); -} diff --git a/frontend/src/app/shared/ord/rune/rune.ts b/frontend/src/app/shared/ord/rune/rune.ts deleted file mode 100644 index c0dd96e1b..000000000 --- a/frontend/src/app/shared/ord/rune/rune.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { u128 } from './integer'; - -export class Rune { - - constructor(readonly value: u128) {} - - toString() { - let n = this.value; - - if (n === u128.MAX) { - return 'BCGDENLQRQWDSLRUGSNLBTMFIJAV'; - } - - n = u128(n + 1n); - let symbol = ''; - while (n > 0) { - symbol = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'[Number((n - 1n) % 26n)] + symbol; - n = u128((n - 1n) / 26n); - } - - return symbol; - } -} diff --git a/frontend/src/app/shared/ord/rune/runeid.ts b/frontend/src/app/shared/ord/rune/runeid.ts deleted file mode 100644 index ca0e938b7..000000000 --- a/frontend/src/app/shared/ord/rune/runeid.ts +++ /dev/null @@ -1,89 +0,0 @@ -import { None, Option, Some } from './monads'; -import { u64, u32, u128 } from './integer'; - -export class RuneId { - constructor(readonly block: u64, readonly tx: u32) {} - - static new(block: u64, tx: u32): Option { - const id = new RuneId(block, tx); - - if (id.block === 0n && id.tx > 0) { - return None; - } - - return Some(id); - } - - static sort(runeIds: RuneId[]): RuneId[] { - return [...runeIds].sort((x, y) => Number(x.block - y.block || x.tx - y.tx)); - } - - delta(next: RuneId): Option<[u128, u128]> { - const optionBlock = u64.checkedSub(next.block, this.block); - if (optionBlock.isNone()) { - return None; - } - const block = optionBlock.unwrap(); - - let tx: u32; - if (block === 0n) { - const optionTx = u32.checkedSub(next.tx, this.tx); - if (optionTx.isNone()) { - return None; - } - tx = optionTx.unwrap(); - } else { - tx = next.tx; - } - - return Some([u128(block), u128(tx)]); - } - - next(block: u128, tx: u128): Option { - const optionBlock = u128.tryIntoU64(block); - const optionTx = u128.tryIntoU32(tx); - - if (optionBlock.isNone() || optionTx.isNone()) { - return None; - } - - const blockU64 = optionBlock.unwrap(); - const txU32 = optionTx.unwrap(); - - const nextBlock = u64.checkedAdd(this.block, blockU64); - if (nextBlock.isNone()) { - return None; - } - - let nextTx: u32; - if (blockU64 === 0n) { - const optionAdd = u32.checkedAdd(this.tx, txU32); - if (optionAdd.isNone()) { - return None; - } - - nextTx = optionAdd.unwrap(); - } else { - nextTx = txU32; - } - - return RuneId.new(nextBlock.unwrap(), nextTx); - } - - toString() { - return `${this.block}:${this.tx}`; - } - - static fromString(s: string) { - const parts = s.split(':'); - if (parts.length !== 2) { - throw new Error(`invalid rune ID: ${s}`); - } - - const [block, tx] = parts; - if (!/^\d+$/.test(block) || !/^\d+$/.test(tx)) { - throw new Error(`invalid rune ID: ${s}`); - } - return new RuneId(u64(BigInt(block)), u32(BigInt(tx))); - } -} diff --git a/frontend/src/app/shared/ord/rune/runestone.ts b/frontend/src/app/shared/ord/rune/runestone.ts deleted file mode 100644 index c71cdcd90..000000000 --- a/frontend/src/app/shared/ord/rune/runestone.ts +++ /dev/null @@ -1,258 +0,0 @@ -import { concatUint8Arrays, hexToBytes } from '../inscription.utils'; -import { Artifact } from './artifact'; -import { Cenotaph } from './cenotaph'; -import { MAGIC_NUMBER, MAX_DIVISIBILITY, OP_RETURN } from './constants'; -import { Edict } from './edict'; -import { Etching } from './etching'; -import { Flag } from './flag'; -import { Flaw } from './flaw'; -import { u128, u32, u64, u8 } from './integer'; -import { Message } from './message'; -import { None, Option, Some } from './monads'; -import { Rune } from './rune'; -import { RuneId } from './runeid'; -import { script } from './script'; -import { SeekArray } from './seekarray'; -import { Tag } from './tag'; - -export const MAX_SPACERS = 0b00000111_11111111_11111111_11111111; - -export const UNCOMMON_GOODS = new Etching( - Some(u8(0)), - Some(new Rune(u128(2055900680524219742n))), - Some(u32(128)), - Some('⧉'), - Some({ - amount: Some(u128(1)), - cap: Some(u128(340282366920938463463374607431768211455n)), - height: [Some(u64(840000)), Some(u64(1050000))], - offset: [Some(u64(0)), Some(u64(0))], - }), - Some(u128(0)), - false -); - -// New: Esplora format instead of Bitcoin RPC format -export type RunestoneTx = { - vout: { - scriptpubkey: string - }[]; -}; - -type Payload = Uint8Array | Flaw; - -export class Runestone { - readonly type = 'runestone'; - - constructor( - readonly mint: Option, - readonly pointer: Option, - readonly edicts: Edict[], - readonly etching: Option - ) {} - - static decipher(transaction: RunestoneTx): Option { - const optionPayload = Runestone.payload(transaction); - if (optionPayload.isNone()) { - return None; - } - const payload = optionPayload.unwrap(); - if (!(payload instanceof Uint8Array)) { - return Some(new Cenotaph([payload])); - } - - const optionIntegers = Runestone.integers(payload); - if (optionIntegers.isNone()) { - return Some(new Cenotaph([Flaw.VARINT])); - } - - const { flaws, edicts, fields } = Message.fromIntegers( - transaction.vout.length, - optionIntegers.unwrap() - ); - - let flags = Tag.take(Tag.FLAGS, fields, 1, ([value]) => Some(value)).unwrapOr(u128(0)); - - const etchingResult = Flag.take(flags, Flag.ETCHING); - const etchingFlag = etchingResult.set; - flags = etchingResult.flags; - - const etching: Option = etchingFlag - ? (() => { - const divisibility = Tag.take( - Tag.DIVISIBILITY, - fields, - 1, - ([value]): Option => - u128 - .tryIntoU8(value) - .andThen((value) => (value <= MAX_DIVISIBILITY ? Some(value) : None)) - ); - - const rune = Tag.take(Tag.RUNE, fields, 1, ([value]) => Some(new Rune(value))); - - const spacers = Tag.take( - Tag.SPACERS, - fields, - 1, - ([value]): Option => - u128.tryIntoU32(value).andThen((value) => (value <= MAX_SPACERS ? Some(value) : None)) - ); - - const symbol = Tag.take(Tag.SYMBOL, fields, 1, ([value]) => - u128.tryIntoU32(value).andThen((value) => { - try { - return Some(String.fromCodePoint(Number(value))); - } catch (e) { - return None; - } - }) - ); - - const termsResult = Flag.take(flags, Flag.TERMS); - const termsFlag = termsResult.set; - flags = termsResult.flags; - - const terms = termsFlag - ? (() => { - const amount = Tag.take(Tag.AMOUNT, fields, 1, ([value]) => Some(value)); - - const cap = Tag.take(Tag.CAP, fields, 1, ([value]) => Some(value)); - - const offset = [ - Tag.take(Tag.OFFSET_START, fields, 1, ([value]) => u128.tryIntoU64(value)), - Tag.take(Tag.OFFSET_END, fields, 1, ([value]) => u128.tryIntoU64(value)), - ] as const; - - const height = [ - Tag.take(Tag.HEIGHT_START, fields, 1, ([value]) => u128.tryIntoU64(value)), - Tag.take(Tag.HEIGHT_END, fields, 1, ([value]) => u128.tryIntoU64(value)), - ] as const; - - return Some({ amount, cap, offset, height }); - })() - : None; - - const premine = Tag.take(Tag.PREMINE, fields, 1, ([value]) => Some(value)); - - const turboResult = Flag.take(flags, Flag.TURBO); - const turbo = etchingResult.set; - flags = turboResult.flags; - - return Some(new Etching(divisibility, rune, spacers, symbol, terms, premine, turbo)); - })() - : None; - - const mint = Tag.take(Tag.MINT, fields, 2, ([block, tx]): Option => { - const optionBlockU64 = u128.tryIntoU64(block); - const optionTxU32 = u128.tryIntoU32(tx); - - if (optionBlockU64.isNone() || optionTxU32.isNone()) { - return None; - } - - return RuneId.new(optionBlockU64.unwrap(), optionTxU32.unwrap()); - }); - - const pointer = Tag.take( - Tag.POINTER, - fields, - 1, - ([value]): Option => - u128 - .tryIntoU32(value) - .andThen((value) => (value < transaction.vout.length ? Some(value) : None)) - ); - - if (etching.map((etching) => etching.supply.isNone()).unwrapOr(false)) { - flaws.push(Flaw.SUPPLY_OVERFLOW); - } - - if (flags !== 0n) { - flaws.push(Flaw.UNRECOGNIZED_FLAG); - } - - if ([...fields.keys()].find((tag) => tag % 2n === 0n) !== undefined) { - flaws.push(Flaw.UNRECOGNIZED_EVEN_TAG); - } - - if (flaws.length !== 0) { - return Some( - new Cenotaph( - flaws, - etching.andThen((etching) => etching.rune), - mint - ) - ); - } - - return Some(new Runestone(mint, pointer, edicts, etching)); - } - - static payload(transaction: RunestoneTx): Option { - // search transaction outputs for payload - for (const output of transaction.vout) { - const instructions = script.decompile(hexToBytes(output.scriptpubkey)); - if (instructions === null) { - throw new Error('unable to decompile'); - } - - // payload starts with OP_RETURN - let nextInstructionResult = instructions.next(); - if (nextInstructionResult.done || nextInstructionResult.value !== OP_RETURN) { - continue; - } - - // followed by the protocol identifier - nextInstructionResult = instructions.next(); - if ( - nextInstructionResult.done || - nextInstructionResult.value instanceof Uint8Array || - nextInstructionResult.value !== MAGIC_NUMBER - ) { - continue; - } - - // construct the payload by concatinating remaining data pushes - let payloads: Uint8Array[] = []; - - do { - nextInstructionResult = instructions.next(); - - if (nextInstructionResult.done) { - const decodedSuccessfully = nextInstructionResult.value; - if (!decodedSuccessfully) { - return Some(Flaw.INVALID_SCRIPT); - } - break; - } - - const instruction = nextInstructionResult.value; - if (instruction instanceof Uint8Array) { - payloads.push(instruction); - } else { - return Some(Flaw.OPCODE); - } - } while (true); - - return Some(concatUint8Arrays(payloads)); - } - - return None; - } - - static integers(payload: Uint8Array): Option { - const integers: u128[] = []; - - const seekArray = new SeekArray(payload); - while (!seekArray.isFinished()) { - const optionInt = u128.decodeVarInt(seekArray); - if (optionInt.isNone()) { - return None; - } - integers.push(optionInt.unwrap()); - } - - return Some(integers); - } -} diff --git a/frontend/src/app/shared/ord/rune/script.ts b/frontend/src/app/shared/ord/rune/script.ts deleted file mode 100644 index 67d579ab8..000000000 --- a/frontend/src/app/shared/ord/rune/script.ts +++ /dev/null @@ -1,237 +0,0 @@ -namespace pushdata { - /** - * Calculates the encoding length of a number used for push data in Bitcoin transactions. - * @param i The number to calculate the encoding length for. - * @returns The encoding length of the number. - */ - export function encodingLength(i: number): number { - return i < OPS.OP_PUSHDATA1 ? 1 : i <= 0xff ? 2 : i <= 0xffff ? 3 : 5; - } - - /** - * Decodes a byte array and returns information about the opcode, number, and size. - * @param array - The byte array to decode. - * @param offset - The offset within the array to start decoding. - * @returns An object containing the opcode, number, and size, or null if decoding fails. - */ - export function decode( - array: Uint8Array, - offset: number - ): { - opcode: number; - number: number; - size: number; - } | null { - const dataView = new DataView(array.buffer, array.byteOffset, array.byteLength); - const opcode = dataView.getUint8(offset); - let num: number; - let size: number; - - // ~6 bit - if (opcode < OPS.OP_PUSHDATA1) { - num = opcode; - size = 1; - - // 8 bit - } else if (opcode === OPS.OP_PUSHDATA1) { - if (offset + 2 > array.length) return null; - num = dataView.getUint8(offset + 1); - size = 2; - - // 16 bit - } else if (opcode === OPS.OP_PUSHDATA2) { - if (offset + 3 > array.length) return null; - num = dataView.getUint16(offset + 1, true); // true for little-endian - size = 3; - - // 32 bit - } else { - if (offset + 5 > array.length) return null; - if (opcode !== OPS.OP_PUSHDATA4) throw new Error('Unexpected opcode'); - - num = dataView.getUint32(offset + 1, true); // true for little-endian - size = 5; - } - - return { - opcode, - number: num, - size, - }; - } -} - -const OPS = { - OP_FALSE: 0, - OP_0: 0, - OP_PUSHDATA1: 76, - OP_PUSHDATA2: 77, - OP_PUSHDATA4: 78, - OP_1NEGATE: 79, - OP_RESERVED: 80, - OP_TRUE: 81, - OP_1: 81, - OP_2: 82, - OP_3: 83, - OP_4: 84, - OP_5: 85, - OP_6: 86, - OP_7: 87, - OP_8: 88, - OP_9: 89, - OP_10: 90, - OP_11: 91, - OP_12: 92, - OP_13: 93, - OP_14: 94, - OP_15: 95, - OP_16: 96, - - OP_NOP: 97, - OP_VER: 98, - OP_IF: 99, - OP_NOTIF: 100, - OP_VERIF: 101, - OP_VERNOTIF: 102, - OP_ELSE: 103, - OP_ENDIF: 104, - OP_VERIFY: 105, - OP_RETURN: 106, - - OP_TOALTSTACK: 107, - OP_FROMALTSTACK: 108, - OP_2DROP: 109, - OP_2DUP: 110, - OP_3DUP: 111, - OP_2OVER: 112, - OP_2ROT: 113, - OP_2SWAP: 114, - OP_IFDUP: 115, - OP_DEPTH: 116, - OP_DROP: 117, - OP_DUP: 118, - OP_NIP: 119, - OP_OVER: 120, - OP_PICK: 121, - OP_ROLL: 122, - OP_ROT: 123, - OP_SWAP: 124, - OP_TUCK: 125, - - OP_CAT: 126, - OP_SUBSTR: 127, - OP_LEFT: 128, - OP_RIGHT: 129, - OP_SIZE: 130, - - OP_INVERT: 131, - OP_AND: 132, - OP_OR: 133, - OP_XOR: 134, - OP_EQUAL: 135, - OP_EQUALVERIFY: 136, - OP_RESERVED1: 137, - OP_RESERVED2: 138, - - OP_1ADD: 139, - OP_1SUB: 140, - OP_2MUL: 141, - OP_2DIV: 142, - OP_NEGATE: 143, - OP_ABS: 144, - OP_NOT: 145, - OP_0NOTEQUAL: 146, - OP_ADD: 147, - OP_SUB: 148, - OP_MUL: 149, - OP_DIV: 150, - OP_MOD: 151, - OP_LSHIFT: 152, - OP_RSHIFT: 153, - - OP_BOOLAND: 154, - OP_BOOLOR: 155, - OP_NUMEQUAL: 156, - OP_NUMEQUALVERIFY: 157, - OP_NUMNOTEQUAL: 158, - OP_LESSTHAN: 159, - OP_GREATERTHAN: 160, - OP_LESSTHANOREQUAL: 161, - OP_GREATERTHANOREQUAL: 162, - OP_MIN: 163, - OP_MAX: 164, - - OP_WITHIN: 165, - - OP_RIPEMD160: 166, - OP_SHA1: 167, - OP_SHA256: 168, - OP_HASH160: 169, - OP_HASH256: 170, - OP_CODESEPARATOR: 171, - OP_CHECKSIG: 172, - OP_CHECKSIGVERIFY: 173, - OP_CHECKMULTISIG: 174, - OP_CHECKMULTISIGVERIFY: 175, - - OP_NOP1: 176, - - OP_NOP2: 177, - OP_CHECKLOCKTIMEVERIFY: 177, - - OP_NOP3: 178, - OP_CHECKSEQUENCEVERIFY: 178, - - OP_NOP4: 179, - OP_NOP5: 180, - OP_NOP6: 181, - OP_NOP7: 182, - OP_NOP8: 183, - OP_NOP9: 184, - OP_NOP10: 185, - - OP_CHECKSIGADD: 186, - - OP_PUBKEYHASH: 253, - OP_PUBKEY: 254, - OP_INVALIDOPCODE: 255, -} as const; - -export const opcodes = OPS; - -export namespace script { - export type Instruction = number | Uint8Array; - - export function* decompile(array: Uint8Array): Generator { - let i = 0; - - while (i < array.length) { - const opcode = array[i]; - - // data chunk - if (opcode >= OPS.OP_0 && opcode <= OPS.OP_PUSHDATA4) { - const d = pushdata.decode(array, i); - - // did reading a pushDataInt fail? - if (d === null) return false; - i += d.size; - - // attempt to read too much data? - if (i + d.number > array.length) return false; - - const data = array.subarray(i, i + d.number); - i += d.number; - - yield data; - - // opcode - } else { - yield opcode; - - i += 1; - } - } - - return true; - } -} diff --git a/frontend/src/app/shared/ord/rune/seekarray.ts b/frontend/src/app/shared/ord/rune/seekarray.ts deleted file mode 100644 index 1f465cbd3..000000000 --- a/frontend/src/app/shared/ord/rune/seekarray.ts +++ /dev/null @@ -1,43 +0,0 @@ -/** - * This class provides a way to read data sequentially from a Uint8Array with automatic cursor management. - * It utilizes DataView for handling multi-byte data types. - * - * This replaces the SeekBuffer from the original runestone-lib! - */ -export class SeekArray { - - public seekIndex: number = 0; - private dataView: DataView; - - /** - * Constructs a SeekArray instance. - * - * @param array - The Uint8Array from which data will be read. - */ - constructor(private array: Uint8Array) { - this.dataView = new DataView(array.buffer, array.byteOffset, array.byteLength); - } - - /** - * Reads an unsigned 8-bit integer from the current position and advances the seek index by 1 byte. - * - * @returns The read value or undefined if reading beyond the end of the array. - */ - readUInt8(): number | undefined { - if (this.isFinished()) { - return undefined; - } - const value = this.dataView.getUint8(this.seekIndex); - this.seekIndex += 1; - return value; - } - - /** - * Checks if the seek index has reached or surpassed the length of the underlying array. - * - * @returns true if there are no more bytes to read, false otherwise. - */ - isFinished(): boolean { - return this.seekIndex >= this.array.length; - } -} diff --git a/frontend/src/app/shared/ord/rune/spacedrune.ts b/frontend/src/app/shared/ord/rune/spacedrune.ts deleted file mode 100644 index b00b0da3a..000000000 --- a/frontend/src/app/shared/ord/rune/spacedrune.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { Rune } from './rune'; - -export class SpacedRune { - constructor(readonly rune: Rune, readonly spacers: number) {} - - toString(): string { - const rune = this.rune.toString(); - let i = 0; - let result = ''; - for (const c of rune) { - result += c; - - if (i < rune.length - 1 && (this.spacers & (1 << i)) !== 0) { - result += '•'; - } - i++; - } - - return result; - } -} diff --git a/frontend/src/app/shared/ord/rune/tag.ts b/frontend/src/app/shared/ord/rune/tag.ts deleted file mode 100644 index 8e39925d4..000000000 --- a/frontend/src/app/shared/ord/rune/tag.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { None, Option, Some } from './monads'; -import { u128 } from './integer'; -import { FixedArray } from './utils'; - -export enum Tag { - BODY = 0, - FLAGS = 2, - RUNE = 4, - - PREMINE = 6, - CAP = 8, - AMOUNT = 10, - HEIGHT_START = 12, - HEIGHT_END = 14, - OFFSET_START = 16, - OFFSET_END = 18, - MINT = 20, - POINTER = 22, - CENOTAPH = 126, - - DIVISIBILITY = 1, - SPACERS = 3, - SYMBOL = 5, - NOP = 127, -} - -export namespace Tag { - export function take( - tag: Tag, - fields: Map, - n: N, - withFn: (values: FixedArray) => Option - ): Option { - const field = fields.get(u128(tag)); - if (field === undefined) { - return None; - } - - const values: u128[] = []; - for (const i of [...Array(n).keys()]) { - if (field[i] === undefined) { - return None; - } - values[i] = field[i]; - } - - const optionValue = withFn(values as FixedArray); - if (optionValue.isNone()) { - return None; - } - - field.splice(0, n); - - if (field.length === 0) { - fields.delete(u128(tag)); - } - - return Some(optionValue.unwrap()); - } -} diff --git a/frontend/src/app/shared/ord/rune/terms.ts b/frontend/src/app/shared/ord/rune/terms.ts deleted file mode 100644 index 464c166e0..000000000 --- a/frontend/src/app/shared/ord/rune/terms.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Option } from './monads'; -import { u128, u64 } from './integer'; - -export type Terms = { - amount: Option; - cap: Option; - height: readonly [Option, Option]; - offset: readonly [Option, Option]; -}; diff --git a/frontend/src/app/shared/ord/rune/utils.ts b/frontend/src/app/shared/ord/rune/utils.ts deleted file mode 100644 index a6fa8e0a1..000000000 --- a/frontend/src/app/shared/ord/rune/utils.ts +++ /dev/null @@ -1,6 +0,0 @@ -type GrowToSize = A['length'] extends N - ? A - : GrowToSize; - -export type FixedArray = GrowToSize; - From 65f080d5268b7365a0a0f428ddc340fca6a19d8d Mon Sep 17 00:00:00 2001 From: natsoni Date: Tue, 8 Oct 2024 11:24:17 +0900 Subject: [PATCH 087/147] FIx error handling logic in ord-data --- .../ord-data/ord-data.component.html | 104 ++++++++---------- .../components/ord-data/ord-data.component.ts | 2 - .../transactions-list.component.html | 4 +- 3 files changed, 50 insertions(+), 60 deletions(-) diff --git a/frontend/src/app/components/ord-data/ord-data.component.html b/frontend/src/app/components/ord-data/ord-data.component.html index 696e7ea17..97dbc0d9d 100644 --- a/frontend/src/app/components/ord-data/ord-data.component.html +++ b/frontend/src/app/components/ord-data/ord-data.component.html @@ -1,64 +1,56 @@ -@if (error) { -
- Error fetching data (code {{ error.status }}) -
-} @else { - @if (minted) { - - Mint - {{ minted >= 100000 ? (minted | amountShortener:undefined:undefined:true) : minted }} - +@if (minted) { + + Mint + {{ minted >= 100000 ? (minted | amountShortener:undefined:undefined:true) : minted }} + + +} +@if (runestone?.etching?.supply) { + @if (runestone?.etching.premine > 0) { + + Premine + {{ runestone.etching.premine >= 100000 ? (toNumber(runestone.etching.premine) | amountShortener:undefined:undefined:true) : runestone.etching.premine }} + {{ runestone.etching.symbol }} + {{ runestone.etching.spacedName }} + ({{ toNumber(runestone.etching.premine) / toNumber(runestone.etching.supply) * 100 | amountShortener:0}}% of total supply) + + } @else { + + Etching of + {{ runestone.etching.symbol }} + {{ runestone.etching.spacedName }} } - @if (runestone?.etching?.supply) { - @if (runestone?.etching.premine > 0) { - - Premine - {{ runestone.etching.premine >= 100000 ? (toNumber(runestone.etching.premine) | amountShortener:undefined:undefined:true) : runestone.etching.premine }} - {{ runestone.etching.symbol }} - {{ runestone.etching.spacedName }} - ({{ toNumber(runestone.etching.premine) / toNumber(runestone.etching.supply) * 100 | amountShortener:0}}% of total supply) - - } @else { - - Etching of - {{ runestone.etching.symbol }} - {{ runestone.etching.spacedName }} - - } - } - @if (transferredRunes?.length && type === 'vout') { -
- - Transfer - - -
- } +} +@if (transferredRunes?.length && type === 'vout') { +
+ + Transfer + + +
+} - @if (inscriptions?.length && type === 'vin') { -
-
- {{ contentType.value.count > 1 ? contentType.value.count + " " : "" }}{{ contentType.value?.tag || contentType.key }} - {{ contentType.value.totalSize | bytes:2:'B':undefined:true }} - - Source inscription - -
-
{{ contentType.value.json | json }}
-
{{ contentType.value.text }}
-
- } - - @if (!runestone && type === 'vout') { -
- } - - @if (!inscriptions?.length && type === 'vin') { +@if (inscriptions?.length && type === 'vin') { +
- Error decoding inscription data + {{ contentType.value.count > 1 ? contentType.value.count + " " : "" }}{{ contentType.value?.tag || contentType.key }} + {{ contentType.value.totalSize | bytes:2:'B':undefined:true }} + + Source inscription +
- } +
{{ contentType.value.json | json }}
+
{{ contentType.value.text }}
+
+} + +@if (!runestone && type === 'vout') { +
+} + +@if ((runestone && !minted && !runestone.etching?.supply && !transferredRunes?.length && type === 'vout') || (!inscriptions?.length && type === 'vin')) { + Error decoding data } diff --git a/frontend/src/app/components/ord-data/ord-data.component.ts b/frontend/src/app/components/ord-data/ord-data.component.ts index 233b8d243..ccc77bce6 100644 --- a/frontend/src/app/components/ord-data/ord-data.component.ts +++ b/frontend/src/app/components/ord-data/ord-data.component.ts @@ -1,5 +1,4 @@ import { ChangeDetectionStrategy, Component, Input, OnChanges, SimpleChanges } from '@angular/core'; -import { HttpErrorResponse } from '@angular/common/http'; import { Runestone, Etching } from '../../shared/ord/rune.utils'; export interface Inscription { @@ -20,7 +19,6 @@ export class OrdDataComponent implements OnChanges { @Input() inscriptions: Inscription[]; @Input() runestone: Runestone; @Input() runeInfo: { [id: string]: { etching: Etching; txid: string } }; - @Input() error: HttpErrorResponse; @Input() type: 'vin' | 'vout'; toNumber = (value: bigint): number => Number(value); diff --git a/frontend/src/app/components/transactions-list/transactions-list.component.html b/frontend/src/app/components/transactions-list/transactions-list.component.html index 26187ecde..217eab7d7 100644 --- a/frontend/src/app/components/transactions-list/transactions-list.component.html +++ b/frontend/src/app/components/transactions-list/transactions-list.component.html @@ -103,7 +103,7 @@ }">
@@ -297,7 +297,7 @@ 'highlight': this.address !== '' && (vout.scriptpubkey_address === this.address || (vout.scriptpubkey_type === 'p2pk' && vout.scriptpubkey.slice(2, -2) === this.address)) }"> From 15b3c88a1f56cdbd98a77b326ee2da4d5e9a4a7a Mon Sep 17 00:00:00 2001 From: Mononaut Date: Tue, 8 Oct 2024 02:40:14 +0000 Subject: [PATCH 088/147] fix optional rune divisibility bug --- frontend/src/app/shared/ord/rune.utils.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/app/shared/ord/rune.utils.ts b/frontend/src/app/shared/ord/rune.utils.ts index a1f947b46..c36f3ef06 100644 --- a/frontend/src/app/shared/ord/rune.utils.ts +++ b/frontend/src/app/shared/ord/rune.utils.ts @@ -201,9 +201,9 @@ function messageToRunestone(message: Message): Runestone { if (flags & Flag.ETCHING) { const hasTerms = (flags & Flag.TERMS) > 0n; const isTurbo = (flags & Flag.TURBO) > 0n; - const name = parseRuneName(message.fields[Tag.Rune][0]); + const name = parseRuneName(message.fields[Tag.Rune]?.[0] ?? 0n); etching = { - divisibility: Number(message.fields[Tag.Divisibility][0]), + divisibility: Number(message.fields[Tag.Divisibility]?.[0] ?? 0n), premine: message.fields[Tag.Premine]?.[0], symbol: message.fields[Tag.Symbol]?.[0] ? String.fromCodePoint(Number(message.fields[Tag.Symbol][0])) : '¤', terms: hasTerms ? { From 040c067aac47d855284a90f9357d1f6b8d872cfd Mon Sep 17 00:00:00 2001 From: Mononaut Date: Tue, 8 Oct 2024 02:49:46 +0000 Subject: [PATCH 089/147] fix rune edict wrong id type bug --- frontend/src/app/shared/ord/rune.utils.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/frontend/src/app/shared/ord/rune.utils.ts b/frontend/src/app/shared/ord/rune.utils.ts index c36f3ef06..c23a55264 100644 --- a/frontend/src/app/shared/ord/rune.utils.ts +++ b/frontend/src/app/shared/ord/rune.utils.ts @@ -154,10 +154,7 @@ function integersToMessage(integers: bigint[]): Message { const amount = integers.shift(); const output = integers.shift(); message.edicts.push({ - id: { - block: height, - index: txIndex, - }, + id: new RuneId(Number(height), Number(txIndex)), amount, output, }); From 177bbc83f3f73cd5dbcf98f8271c607e13250fab Mon Sep 17 00:00:00 2001 From: natsoni Date: Tue, 8 Oct 2024 12:38:12 +0900 Subject: [PATCH 090/147] Clean up etches fetching logic --- frontend/src/app/services/ord-api.service.ts | 63 ++++++++++---------- 1 file changed, 30 insertions(+), 33 deletions(-) diff --git a/frontend/src/app/services/ord-api.service.ts b/frontend/src/app/services/ord-api.service.ts index da75a74af..6a38e5b17 100644 --- a/frontend/src/app/services/ord-api.service.ts +++ b/frontend/src/app/services/ord-api.service.ts @@ -19,15 +19,12 @@ export class OrdApiService { decodeRunestone$(tx: Transaction): Observable<{ runestone: Runestone, runeInfo: { [id: string]: { etching: Etching; txid: string; } } }> { const runestone = decipherRunestone(tx); const runeInfo: { [id: string]: { etching: Etching; txid: string; } } = {}; - const runesToFetch: Set = new Set(); if (runestone) { + const runesToFetch: Set = new Set(); + if (runestone.mint) { - if (runestone.mint.toString() === '1:0') { - runeInfo[runestone.mint.toString()] = { etching: UNCOMMON_GOODS, txid: '0000000000000000000000000000000000000000000000000000000000000000' }; - } else { - runesToFetch.add(runestone.mint.toString()); - } + runesToFetch.add(runestone.mint.toString()); } if (runestone.edicts.length) { @@ -37,18 +34,15 @@ export class OrdApiService { } if (runesToFetch.size) { - const runeEtchingObservables = Array.from(runesToFetch).map(runeId => { - return this.getEtchingFromRuneId$(runeId).pipe( - tap(etching => { - if (etching) { - runeInfo[runeId] = etching; - } - }) - ); - }); + const runeEtchingObservables = Array.from(runesToFetch).map(runeId => this.getEtchingFromRuneId$(runeId)); return forkJoin(runeEtchingObservables).pipe( - map(() => { + map((etchings) => { + etchings.forEach((el) => { + if (el) { + runeInfo[el.runeId] = { etching: el.etching, txid: el.txid }; + } + }); return { runestone: runestone, runeInfo }; }) ); @@ -60,24 +54,27 @@ export class OrdApiService { } // Get etching from runeId by looking up the transaction that etched the rune - getEtchingFromRuneId$(runeId: string): Observable<{ etching: Etching; txid: string; }> { - const [blockNumber, txIndex] = runeId.split(':'); - - return this.electrsApiService.getBlockHashFromHeight$(parseInt(blockNumber)).pipe( - switchMap(blockHash => this.electrsApiService.getBlockTxId$(blockHash, parseInt(txIndex))), - switchMap(txId => this.electrsApiService.getTransaction$(txId)), - switchMap(tx => { - const runestone = decipherRunestone(tx); - if (runestone) { - const etching = runestone.etching; - if (etching) { - return of({ etching, txid: tx.txid }); + getEtchingFromRuneId$(runeId: string): Observable<{ runeId: string; etching: Etching; txid: string; }> { + if (runeId === '1:0') { + return of({ runeId, etching: UNCOMMON_GOODS, txid: '0000000000000000000000000000000000000000000000000000000000000000' }); + } else { + const [blockNumber, txIndex] = runeId.split(':'); + return this.electrsApiService.getBlockHashFromHeight$(parseInt(blockNumber)).pipe( + switchMap(blockHash => this.electrsApiService.getBlockTxId$(blockHash, parseInt(txIndex))), + switchMap(txId => this.electrsApiService.getTransaction$(txId)), + switchMap(tx => { + const runestone = decipherRunestone(tx); + if (runestone) { + const etching = runestone.etching; + if (etching) { + return of({ runeId, etching, txid: tx.txid }); + } } - } - return of(null); - }), - catchError(() => of(null)) - ); + return of(null); + }), + catchError(() => of(null)) + ); + } } decodeInscriptions(witness: string): Inscription[] | null { From e440c3f235070e135713ada13b4299235cbf7f8a Mon Sep 17 00:00:00 2001 From: natsoni Date: Tue, 8 Oct 2024 12:40:25 +0900 Subject: [PATCH 091/147] Fix edicts displaying --- .../src/app/components/ord-data/ord-data.component.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/frontend/src/app/components/ord-data/ord-data.component.ts b/frontend/src/app/components/ord-data/ord-data.component.ts index ccc77bce6..ccf8f6eae 100644 --- a/frontend/src/app/components/ord-data/ord-data.component.ts +++ b/frontend/src/app/components/ord-data/ord-data.component.ts @@ -34,10 +34,8 @@ export class OrdDataComponent implements OnChanges { ngOnChanges(changes: SimpleChanges): void { if (changes.runestone && this.runestone) { - this.transferredRunes = Object.entries(this.runeInfo).map(([key, runeInfo]) => ({ key, ...runeInfo })); if (this.runestone.mint && this.runeInfo[this.runestone.mint.toString()]) { const mint = this.runestone.mint.toString(); - this.transferredRunes = this.transferredRunes.filter(rune => rune.key !== mint); const terms = this.runeInfo[mint].etching.terms; const amount = terms?.amount; const divisibility = this.runeInfo[mint].etching.divisibility; @@ -45,6 +43,12 @@ export class OrdDataComponent implements OnChanges { this.minted = this.getAmount(amount, divisibility); } } + + this.runestone.edicts.forEach(edict => { + if (this.runeInfo[edict.id.toString()]) { + this.transferredRunes.push({ key: edict.id.toString(), ...this.runeInfo[edict.id.toString()] }); + } + }); } if (changes.inscriptions && this.inscriptions) { From 0a614291760ca51d4664e5a8f2853385f3b26887 Mon Sep 17 00:00:00 2001 From: natsoni Date: Tue, 8 Oct 2024 12:41:14 +0900 Subject: [PATCH 092/147] Increase inscription max height --- frontend/src/app/components/ord-data/ord-data.component.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/app/components/ord-data/ord-data.component.scss b/frontend/src/app/components/ord-data/ord-data.component.scss index 7cb2cdca6..b218359d9 100644 --- a/frontend/src/app/components/ord-data/ord-data.component.scss +++ b/frontend/src/app/components/ord-data/ord-data.component.scss @@ -31,5 +31,5 @@ a.disabled { pre { margin-top: 5px; - max-height: 150px; + max-height: 200px; } \ No newline at end of file From 1ddb8a39c9aa9dab934e63d59f80093a95b8d696 Mon Sep 17 00:00:00 2001 From: natsoni Date: Tue, 8 Oct 2024 12:50:56 +0900 Subject: [PATCH 093/147] Show text inscriptions up to 50kB --- frontend/src/app/components/ord-data/ord-data.component.ts | 3 ++- frontend/src/app/shared/ord/inscription.utils.ts | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/frontend/src/app/components/ord-data/ord-data.component.ts b/frontend/src/app/components/ord-data/ord-data.component.ts index ccf8f6eae..0e18750f1 100644 --- a/frontend/src/app/components/ord-data/ord-data.component.ts +++ b/frontend/src/app/components/ord-data/ord-data.component.ts @@ -3,6 +3,7 @@ import { Runestone, Etching } from '../../shared/ord/rune.utils'; export interface Inscription { body?: Uint8Array; + is_cropped?: boolean; body_length?: number; content_type?: Uint8Array; content_type_str?: string; @@ -68,7 +69,7 @@ export class OrdDataComponent implements OnChanges { } // Text / JSON data - if ((key.includes('text') || key.includes('json')) && inscription.body?.length && !this.inscriptionsData[key].text && !this.inscriptionsData[key].json) { + if ((key.includes('text') || key.includes('json')) && !inscription.is_cropped && !this.inscriptionsData[key].text && !this.inscriptionsData[key].json) { const decoder = new TextDecoder('utf-8'); const text = decoder.decode(inscription.body); try { diff --git a/frontend/src/app/shared/ord/inscription.utils.ts b/frontend/src/app/shared/ord/inscription.utils.ts index efa9e8fe8..e62f892d7 100644 --- a/frontend/src/app/shared/ord/inscription.utils.ts +++ b/frontend/src/app/shared/ord/inscription.utils.ts @@ -390,7 +390,8 @@ export function extractInscriptionData(raw: Uint8Array, pointer: number): Inscri return { content_type_str: contentType, - body: combinedData.slice(0, 150), // Limit body to 150 bytes for now + body: combinedData.slice(0, 50_000), // Limit body to 50 kB for now + is_cropped: combinedData.length > 50_000, body_length: combinedData.length, delegate_txid: getKnownFieldValue(fields, knownFields.delegate) ? bytesToHex(getKnownFieldValue(fields, knownFields.delegate).reverse()) : null }; From 57a05c80a25cd7d3510b169d7495652ecaaac495 Mon Sep 17 00:00:00 2001 From: natsoni Date: Tue, 8 Oct 2024 12:53:18 +0900 Subject: [PATCH 094/147] Move inscription type to utils --- .../src/app/components/ord-data/ord-data.component.ts | 10 +--------- .../transactions-list/transactions-list.component.ts | 2 +- frontend/src/app/services/ord-api.service.ts | 2 +- frontend/src/app/shared/ord/inscription.utils.ts | 11 +++++++++-- 4 files changed, 12 insertions(+), 13 deletions(-) diff --git a/frontend/src/app/components/ord-data/ord-data.component.ts b/frontend/src/app/components/ord-data/ord-data.component.ts index 0e18750f1..40e189f7b 100644 --- a/frontend/src/app/components/ord-data/ord-data.component.ts +++ b/frontend/src/app/components/ord-data/ord-data.component.ts @@ -1,14 +1,6 @@ import { ChangeDetectionStrategy, Component, Input, OnChanges, SimpleChanges } from '@angular/core'; import { Runestone, Etching } from '../../shared/ord/rune.utils'; - -export interface Inscription { - body?: Uint8Array; - is_cropped?: boolean; - body_length?: number; - content_type?: Uint8Array; - content_type_str?: string; - delegate_txid?: string; -} +import { Inscription } from '../../shared/ord/inscription.utils'; @Component({ selector: 'app-ord-data', diff --git a/frontend/src/app/components/transactions-list/transactions-list.component.ts b/frontend/src/app/components/transactions-list/transactions-list.component.ts index 706ee9684..7bb1604c6 100644 --- a/frontend/src/app/components/transactions-list/transactions-list.component.ts +++ b/frontend/src/app/components/transactions-list/transactions-list.component.ts @@ -12,7 +12,7 @@ import { ApiService } from '../../services/api.service'; import { PriceService } from '../../services/price.service'; import { StorageService } from '../../services/storage.service'; import { OrdApiService } from '../../services/ord-api.service'; -import { Inscription } from '../ord-data/ord-data.component'; +import { Inscription } from '../../shared/ord/inscription.utils'; import { Etching, Runestone } from '../../shared/ord/rune.utils'; @Component({ diff --git a/frontend/src/app/services/ord-api.service.ts b/frontend/src/app/services/ord-api.service.ts index 6a38e5b17..5fcd75298 100644 --- a/frontend/src/app/services/ord-api.service.ts +++ b/frontend/src/app/services/ord-api.service.ts @@ -1,6 +1,6 @@ import { Injectable } from '@angular/core'; import { catchError, forkJoin, map, Observable, of, switchMap, tap } from 'rxjs'; -import { Inscription } from '../components/ord-data/ord-data.component'; +import { Inscription } from '../shared/ord/inscription.utils'; import { Transaction } from '../interfaces/electrs.interface'; import { getNextInscriptionMark, hexToBytes, extractInscriptionData } from '../shared/ord/inscription.utils'; import { decipherRunestone, Runestone, Etching, UNCOMMON_GOODS } from '../shared/ord/rune.utils'; diff --git a/frontend/src/app/shared/ord/inscription.utils.ts b/frontend/src/app/shared/ord/inscription.utils.ts index e62f892d7..f4d92b206 100644 --- a/frontend/src/app/shared/ord/inscription.utils.ts +++ b/frontend/src/app/shared/ord/inscription.utils.ts @@ -1,8 +1,6 @@ // Adapted from https://github.com/ordpool-space/ordpool-parser/tree/ce04d7a5b6bb1cf37b9fdadd77ba430f5bd6e7d6/src // Utils functions to decode ord inscriptions -import { Inscription } from "../../components/ord-data/ord-data.component"; - export const OP_FALSE = 0x00; export const OP_IF = 0x63; export const OP_0 = 0x00; @@ -304,6 +302,15 @@ export function concatUint8Arrays(arrays: Uint8Array[]): Uint8Array { ////////////////////////////// Inscription /////////////////////////// +export interface Inscription { + body?: Uint8Array; + is_cropped?: boolean; + body_length?: number; + content_type?: Uint8Array; + content_type_str?: string; + delegate_txid?: string; +} + /** * Extracts fields from the raw data until OP_0 is encountered. * From 3486c35f5e28db3d68060b7dd940a700b869a766 Mon Sep 17 00:00:00 2001 From: natsoni Date: Tue, 8 Oct 2024 12:59:36 +0900 Subject: [PATCH 095/147] 50kb -> 100kb --- frontend/src/app/shared/ord/inscription.utils.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/app/shared/ord/inscription.utils.ts b/frontend/src/app/shared/ord/inscription.utils.ts index f4d92b206..78095f22f 100644 --- a/frontend/src/app/shared/ord/inscription.utils.ts +++ b/frontend/src/app/shared/ord/inscription.utils.ts @@ -397,8 +397,8 @@ export function extractInscriptionData(raw: Uint8Array, pointer: number): Inscri return { content_type_str: contentType, - body: combinedData.slice(0, 50_000), // Limit body to 50 kB for now - is_cropped: combinedData.length > 50_000, + body: combinedData.slice(0, 100_000), // Limit body to 100 kB for now + is_cropped: combinedData.length > 100_000, body_length: combinedData.length, delegate_txid: getKnownFieldValue(fields, knownFields.delegate) ? bytesToHex(getKnownFieldValue(fields, knownFields.delegate).reverse()) : null }; From 1b2f1b38b45eae900b464e557a25d108dd03f80a Mon Sep 17 00:00:00 2001 From: natsoni Date: Tue, 8 Oct 2024 13:09:19 +0900 Subject: [PATCH 096/147] undefined -> unknown --- .../src/app/components/ord-data/ord-data.component.html | 6 +++++- frontend/src/app/components/ord-data/ord-data.component.ts | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/frontend/src/app/components/ord-data/ord-data.component.html b/frontend/src/app/components/ord-data/ord-data.component.html index 97dbc0d9d..14f24d5f3 100644 --- a/frontend/src/app/components/ord-data/ord-data.component.html +++ b/frontend/src/app/components/ord-data/ord-data.component.html @@ -34,7 +34,11 @@ @if (inscriptions?.length && type === 'vin') {
- {{ contentType.value.count > 1 ? contentType.value.count + " " : "" }}{{ contentType.value?.tag || contentType.key }} + @if (contentType.key !== 'undefined') { + {{ contentType.value.count > 1 ? contentType.value.count + " " : "" }}{{ contentType.value?.tag || contentType.key }} + } @else { + Unknown + } {{ contentType.value.totalSize | bytes:2:'B':undefined:true }} Source inscription diff --git a/frontend/src/app/components/ord-data/ord-data.component.ts b/frontend/src/app/components/ord-data/ord-data.component.ts index 40e189f7b..6c6d2af20 100644 --- a/frontend/src/app/components/ord-data/ord-data.component.ts +++ b/frontend/src/app/components/ord-data/ord-data.component.ts @@ -41,7 +41,7 @@ export class OrdDataComponent implements OnChanges { if (this.runeInfo[edict.id.toString()]) { this.transferredRunes.push({ key: edict.id.toString(), ...this.runeInfo[edict.id.toString()] }); } - }); + }); } if (changes.inscriptions && this.inscriptions) { From 933a204462b805e31bcec2a416010d51d493f734 Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Tue, 8 Oct 2024 18:37:03 +0900 Subject: [PATCH 097/147] [accelerator] fee delta matches what the user accepted to pay in frontend --- .../accelerate-checkout.component.ts | 9 ++++++--- frontend/src/app/services/services-api.service.ts | 12 ++++++------ 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts b/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts index 162594cd6..c6f442c84 100644 --- a/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts +++ b/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts @@ -525,7 +525,8 @@ export class AccelerateCheckout implements OnInit, OnDestroy { tokenResult.token, cardTag, `accelerator-${this.tx.txid.substring(0, 15)}-${Math.round(new Date().getTime() / 1000)}`, - this.accelerationUUID + this.accelerationUUID, + costUSD ).subscribe({ next: () => { this.processing = false; @@ -624,7 +625,8 @@ export class AccelerateCheckout implements OnInit, OnDestroy { tokenResult.token, cardTag, `accelerator-${this.tx.txid.substring(0, 15)}-${Math.round(new Date().getTime() / 1000)}`, - this.accelerationUUID + this.accelerationUUID, + costUSD ).subscribe({ next: () => { this.processing = false; @@ -714,7 +716,8 @@ export class AccelerateCheckout implements OnInit, OnDestroy { tokenResult.token, tokenResult.details.cashAppPay.cashtag, tokenResult.details.cashAppPay.referenceId, - this.accelerationUUID + this.accelerationUUID, + costUSD ).subscribe({ next: () => { this.processing = false; diff --git a/frontend/src/app/services/services-api.service.ts b/frontend/src/app/services/services-api.service.ts index 4d841521b..5a17026a9 100644 --- a/frontend/src/app/services/services-api.service.ts +++ b/frontend/src/app/services/services-api.service.ts @@ -135,16 +135,16 @@ export class ServicesApiServices { return this.httpClient.post(`${this.stateService.env.SERVICES_API}/accelerator/accelerate`, { txInput: txInput, userBid: userBid, accelerationUUID: accelerationUUID }); } - accelerateWithCashApp$(txInput: string, token: string, cashtag: string, referenceId: string, accelerationUUID: string) { - return this.httpClient.post(`${this.stateService.env.SERVICES_API}/accelerator/accelerate/cashapp`, { txInput: txInput, token: token, cashtag: cashtag, referenceId: referenceId, accelerationUUID: accelerationUUID }); + accelerateWithCashApp$(txInput: string, token: string, cashtag: string, referenceId: string, accelerationUUID: string, userApprovedUSD: number) { + return this.httpClient.post(`${this.stateService.env.SERVICES_API}/accelerator/accelerate/cashapp`, { txInput: txInput, token: token, cashtag: cashtag, referenceId: referenceId, accelerationUUID: accelerationUUID, userApprovedUSD: userApprovedUSD }); } - accelerateWithApplePay$(txInput: string, token: string, cardTag: string, referenceId: string, accelerationUUID: string) { - return this.httpClient.post(`${this.stateService.env.SERVICES_API}/accelerator/accelerate/applePay`, { txInput: txInput, cardTag: cardTag, token: token, referenceId: referenceId, accelerationUUID: accelerationUUID }); + accelerateWithApplePay$(txInput: string, token: string, cardTag: string, referenceId: string, accelerationUUID: string, userApprovedUSD: number) { + return this.httpClient.post(`${this.stateService.env.SERVICES_API}/accelerator/accelerate/applePay`, { txInput: txInput, cardTag: cardTag, token: token, referenceId: referenceId, accelerationUUID: accelerationUUID, userApprovedUSD: userApprovedUSD }); } - accelerateWithGooglePay$(txInput: string, token: string, cardTag: string, referenceId: string, accelerationUUID: string) { - return this.httpClient.post(`${this.stateService.env.SERVICES_API}/accelerator/accelerate/googlePay`, { txInput: txInput, cardTag: cardTag, token: token, referenceId: referenceId, accelerationUUID: accelerationUUID }); + accelerateWithGooglePay$(txInput: string, token: string, cardTag: string, referenceId: string, accelerationUUID: string, userApprovedUSD: number) { + return this.httpClient.post(`${this.stateService.env.SERVICES_API}/accelerator/accelerate/googlePay`, { txInput: txInput, cardTag: cardTag, token: token, referenceId: referenceId, accelerationUUID: accelerationUUID, userApprovedUSD: userApprovedUSD }); } getAccelerations$(): Observable { From 2a27ee0c7cbf3e0ac36f843593820c4a0e5b171c Mon Sep 17 00:00:00 2001 From: natsoni Date: Tue, 8 Oct 2024 19:20:08 +0900 Subject: [PATCH 098/147] Fix rune premine amount --- frontend/src/app/components/ord-data/ord-data.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/app/components/ord-data/ord-data.component.html b/frontend/src/app/components/ord-data/ord-data.component.html index 14f24d5f3..8e58e66a4 100644 --- a/frontend/src/app/components/ord-data/ord-data.component.html +++ b/frontend/src/app/components/ord-data/ord-data.component.html @@ -9,7 +9,7 @@ @if (runestone?.etching.premine > 0) { Premine - {{ runestone.etching.premine >= 100000 ? (toNumber(runestone.etching.premine) | amountShortener:undefined:undefined:true) : runestone.etching.premine }} + {{ getAmount(runestone.etching.premine, runestone.etching.divisibility || 0) >= 100000 ? (getAmount(runestone.etching.premine, runestone.etching.divisibility || 0) | amountShortener:undefined:undefined:true) : getAmount(runestone.etching.premine, runestone.etching.divisibility || 0) }} {{ runestone.etching.symbol }} {{ runestone.etching.spacedName }} ({{ toNumber(runestone.etching.premine) / toNumber(runestone.etching.supply) * 100 | amountShortener:0}}% of total supply) From 15b7e75b69d03eb1db058e3986c94e6c7c424b4a Mon Sep 17 00:00:00 2001 From: natsoni Date: Wed, 9 Oct 2024 16:33:19 +0900 Subject: [PATCH 099/147] Fix wrong timespan in acc timeline --- .../acceleration-timeline/acceleration-timeline.component.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/frontend/src/app/components/acceleration-timeline/acceleration-timeline.component.ts b/frontend/src/app/components/acceleration-timeline/acceleration-timeline.component.ts index 16fd24c7f..93001a66b 100644 --- a/frontend/src/app/components/acceleration-timeline/acceleration-timeline.component.ts +++ b/frontend/src/app/components/acceleration-timeline/acceleration-timeline.component.ts @@ -43,12 +43,10 @@ export class AccelerationTimelineComponent implements OnInit, OnChanges { this.poolsData[pool.unique_id] = pool; } }); - - this.updateTimes(); - this.interval = window.setInterval(this.updateTimes.bind(this), 60000); } ngOnChanges(changes): void { + this.updateTimes(); // Hide standard ETA while we don't have a proper standard ETA calculation, see https://github.com/mempool/mempool/issues/65 // if (changes?.eta?.currentValue || changes?.standardETA?.currentValue || changes?.acceleratedETA?.currentValue) { From c4004ba301078221fc3bdaa86c3a1a47d9be1e6d Mon Sep 17 00:00:00 2001 From: natsoni Date: Wed, 9 Oct 2024 17:50:24 +0900 Subject: [PATCH 100/147] Clean up timeline code --- .../acceleration-timeline.component.html | 4 +--- .../acceleration-timeline.component.ts | 20 ------------------- 2 files changed, 1 insertion(+), 23 deletions(-) diff --git a/frontend/src/app/components/acceleration-timeline/acceleration-timeline.component.html b/frontend/src/app/components/acceleration-timeline/acceleration-timeline.component.html index ba0d44884..ef3ace5ea 100644 --- a/frontend/src/app/components/acceleration-timeline/acceleration-timeline.component.html +++ b/frontend/src/app/components/acceleration-timeline/acceleration-timeline.component.html @@ -9,7 +9,7 @@
@if (eta) { - ~ + ~ }
@@ -48,8 +48,6 @@
- } @else if (standardETA && !tx.status.confirmed) { - }
diff --git a/frontend/src/app/components/acceleration-timeline/acceleration-timeline.component.ts b/frontend/src/app/components/acceleration-timeline/acceleration-timeline.component.ts index 93001a66b..14f533a05 100644 --- a/frontend/src/app/components/acceleration-timeline/acceleration-timeline.component.ts +++ b/frontend/src/app/components/acceleration-timeline/acceleration-timeline.component.ts @@ -14,16 +14,11 @@ export class AccelerationTimelineComponent implements OnInit, OnChanges { @Input() tx: Transaction; @Input() accelerationInfo: Acceleration; @Input() eta: ETA; - // A mined transaction has standard ETA and accelerated ETA undefined - // A transaction in mempool has either standardETA defined (if accelerated) or acceleratedETA defined (if not accelerated yet) - @Input() standardETA: number; - @Input() acceleratedETA: number; acceleratedAt: number; now: number; accelerateRatio: number; useAbsoluteTime: boolean = false; - interval: number; firstSeenToAccelerated: number; acceleratedToMined: number; @@ -47,17 +42,6 @@ export class AccelerationTimelineComponent implements OnInit, OnChanges { ngOnChanges(changes): void { this.updateTimes(); - // Hide standard ETA while we don't have a proper standard ETA calculation, see https://github.com/mempool/mempool/issues/65 - - // if (changes?.eta?.currentValue || changes?.standardETA?.currentValue || changes?.acceleratedETA?.currentValue) { - // if (changes?.eta?.currentValue) { - // if (changes?.acceleratedETA?.currentValue) { - // this.accelerateRatio = Math.floor((Math.floor(changes.eta.currentValue.time / 1000) - this.now) / (Math.floor(changes.acceleratedETA.currentValue / 1000) - this.now)); - // } else if (changes?.standardETA?.currentValue) { - // this.accelerateRatio = Math.floor((Math.floor(changes.standardETA.currentValue / 1000) - this.now) / (Math.floor(changes.eta.currentValue.time / 1000) - this.now)); - // } - // } - // } } updateTimes(): void { @@ -66,10 +50,6 @@ export class AccelerationTimelineComponent implements OnInit, OnChanges { this.firstSeenToAccelerated = Math.max(0, this.acceleratedAt - this.transactionTime); this.acceleratedToMined = Math.max(0, this.tx.status.block_time - this.acceleratedAt); } - - ngOnDestroy(): void { - clearInterval(this.interval); - } onHover(event, status: string): void { if (status === 'seen') { From 22236bdabef549837cc749fa90fefb47c0c0d202 Mon Sep 17 00:00:00 2001 From: natsoni Date: Wed, 9 Oct 2024 18:17:17 +0900 Subject: [PATCH 101/147] Fix frontend build --- .../transaction/transaction.component.html | 2 +- .../transaction/transaction.component.ts | 16 ---------------- 2 files changed, 1 insertion(+), 17 deletions(-) diff --git a/frontend/src/app/components/transaction/transaction.component.html b/frontend/src/app/components/transaction/transaction.component.html index ec06dd5ad..abaeaeb06 100644 --- a/frontend/src/app/components/transaction/transaction.component.html +++ b/frontend/src/app/components/transaction/transaction.component.html @@ -169,7 +169,7 @@

Acceleration Timeline

- +
diff --git a/frontend/src/app/components/transaction/transaction.component.ts b/frontend/src/app/components/transaction/transaction.component.ts index 1306c432d..5fb9e5921 100644 --- a/frontend/src/app/components/transaction/transaction.component.ts +++ b/frontend/src/app/components/transaction/transaction.component.ts @@ -119,7 +119,6 @@ export class TransactionComponent implements OnInit, AfterViewInit, OnDestroy { txChanged$ = new BehaviorSubject(false); // triggered whenever this.tx changes (long term, we should refactor to make this.tx an observable itself) isAccelerated$ = new BehaviorSubject(false); // refactor this to make isAccelerated an observable itself ETA$: Observable; - standardETA$: Observable; isCached: boolean = false; now = Date.now(); da$: Observable; @@ -883,21 +882,6 @@ export class TransactionComponent implements OnInit, AfterViewInit, OnDestroy { this.miningStats = stats; this.isAccelerated$.next(this.isAcceleration); // hack to trigger recalculation of ETA without adding another source observable }); - if (!this.tx.status?.confirmed) { - this.standardETA$ = combineLatest([ - this.stateService.mempoolBlocks$.pipe(startWith(null)), - this.stateService.difficultyAdjustment$.pipe(startWith(null)), - ]).pipe( - map(([mempoolBlocks, da]) => { - return this.etaService.calculateUnacceleratedETA( - this.tx, - mempoolBlocks, - da, - this.cpfpInfo, - ); - }) - ) - } } this.isAccelerated$.next(this.isAcceleration); } From 73e8ba3e47b8d0e38884b2c71d1f3400efbf6294 Mon Sep 17 00:00:00 2001 From: natsoni Date: Wed, 9 Oct 2024 20:52:23 +0900 Subject: [PATCH 102/147] Fix timestamps on acceleration timeline --- .../acceleration-timeline/acceleration-timeline.component.ts | 4 ++-- .../src/app/components/transaction/transaction.component.html | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/frontend/src/app/components/acceleration-timeline/acceleration-timeline.component.ts b/frontend/src/app/components/acceleration-timeline/acceleration-timeline.component.ts index 14f533a05..b0cf98d86 100644 --- a/frontend/src/app/components/acceleration-timeline/acceleration-timeline.component.ts +++ b/frontend/src/app/components/acceleration-timeline/acceleration-timeline.component.ts @@ -11,11 +11,11 @@ import { MiningService } from '../../services/mining.service'; }) export class AccelerationTimelineComponent implements OnInit, OnChanges { @Input() transactionTime: number; + @Input() acceleratedAt: number; @Input() tx: Transaction; @Input() accelerationInfo: Acceleration; @Input() eta: ETA; - acceleratedAt: number; now: number; accelerateRatio: number; useAbsoluteTime: boolean = false; @@ -31,7 +31,7 @@ export class AccelerationTimelineComponent implements OnInit, OnChanges { ) {} ngOnInit(): void { - this.acceleratedAt = this.tx.acceleratedAt ?? new Date().getTime() / 1000; + this.updateTimes(); this.miningService.getPools().subscribe(pools => { for (const pool of pools) { diff --git a/frontend/src/app/components/transaction/transaction.component.html b/frontend/src/app/components/transaction/transaction.component.html index abaeaeb06..056b27fc5 100644 --- a/frontend/src/app/components/transaction/transaction.component.html +++ b/frontend/src/app/components/transaction/transaction.component.html @@ -164,12 +164,12 @@
- +

Acceleration Timeline

- +
From cdb4580c6d2251c583678e4ce29fe91e11f2973f Mon Sep 17 00:00:00 2001 From: softsimon Date: Thu, 10 Oct 2024 18:01:35 +0900 Subject: [PATCH 103/147] Set audit start heights on prod --- production/mempool-frontend-config.mainnet.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/production/mempool-frontend-config.mainnet.json b/production/mempool-frontend-config.mainnet.json index 84cde82cf..61a8c2c2a 100644 --- a/production/mempool-frontend-config.mainnet.json +++ b/production/mempool-frontend-config.mainnet.json @@ -10,6 +10,9 @@ "MEMPOOL_WEBSITE_URL": "https://mempool.space", "LIQUID_WEBSITE_URL": "https://liquid.network", "BISQ_WEBSITE_URL": "https://bisq.markets", + "MAINNET_BLOCK_AUDIT_START_HEIGHT": 773911, + "TESTNET_BLOCK_AUDIT_START_HEIGHT": 2417829, + "SIGNET_BLOCK_AUDIT_START_HEIGHT": 127609, "ITEMS_PER_PAGE": 25, "LIGHTNING": true, "ACCELERATOR": true, From dd0542bbe1bc3ca8fc835ec3e7171ef4e592d0d1 Mon Sep 17 00:00:00 2001 From: natsoni Date: Wed, 9 Oct 2024 11:15:31 +0900 Subject: [PATCH 104/147] Store block first seen in db --- backend/src/api/audit.ts | 40 +------------ backend/src/api/database-migration.ts | 2 +- backend/src/api/websocket-handler.ts | 13 ++++- backend/src/mempool.interfaces.ts | 3 +- backend/src/replication/AuditReplication.ts | 3 +- .../repositories/BlocksAuditsRepository.ts | 16 ++--- backend/src/repositories/BlocksRepository.ts | 23 +++++++- backend/src/utils/file-read.ts | 58 +++++++++++++++++++ 8 files changed, 101 insertions(+), 57 deletions(-) create mode 100644 backend/src/utils/file-read.ts diff --git a/backend/src/api/audit.ts b/backend/src/api/audit.ts index b29c3bf2b..e09234cdc 100644 --- a/backend/src/api/audit.ts +++ b/backend/src/api/audit.ts @@ -1,4 +1,3 @@ -import * as fs from 'fs'; import config from '../config'; import logger from '../logger'; import { MempoolTransactionExtended, MempoolBlockWithTransactions } from '../mempool.interfaces'; @@ -8,10 +7,10 @@ import transactionUtils from './transaction-utils'; const PROPAGATION_MARGIN = 180; // in seconds, time since a transaction is first seen after which it is assumed to have propagated to all miners class Audit { - auditBlock(height: number, transactions: MempoolTransactionExtended[], projectedBlocks: MempoolBlockWithTransactions[], mempool: { [txId: string]: MempoolTransactionExtended }, hash: string) - : { unseen: string[], censored: string[], added: string[], prioritized: string[], fresh: string[], sigop: string[], fullrbf: string[], accelerated: string[], score: number, similarity: number, firstSeen: string | undefined } { + auditBlock(height: number, transactions: MempoolTransactionExtended[], projectedBlocks: MempoolBlockWithTransactions[], mempool: { [txId: string]: MempoolTransactionExtended }) + : { unseen: string[], censored: string[], added: string[], prioritized: string[], fresh: string[], sigop: string[], fullrbf: string[], accelerated: string[], score: number, similarity: number } { if (!projectedBlocks?.[0]?.transactionIds || !mempool) { - return { unseen: [], censored: [], added: [], prioritized: [], fresh: [], sigop: [], fullrbf: [], accelerated: [], score: 1, similarity: 1, firstSeen: undefined }; + return { unseen: [], censored: [], added: [], prioritized: [], fresh: [], sigop: [], fullrbf: [], accelerated: [], score: 1, similarity: 1 }; } const matches: string[] = []; // present in both mined block and template @@ -177,8 +176,6 @@ class Audit { } const similarity = projectedWeight ? matchedWeight / projectedWeight : 1; - const firstSeen = this.getFirstSeenFromLogs(hash); - return { unseen, censored: Object.keys(isCensored), @@ -190,39 +187,8 @@ class Audit { accelerated, score, similarity, - firstSeen }; } - - getFirstSeenFromLogs(hash: string): string | undefined { - const debugLogPath = config.CORE_RPC.DEBUG_LOG_PATH; - if (debugLogPath) { - try { - const fileDescriptor = fs.openSync(debugLogPath, 'r'); - const bufferSize = 2048; // Read the last few lines of the file - const buffer = Buffer.alloc(bufferSize); - const fileSize = fs.statSync(debugLogPath).size; - const chunkSize = Math.min(bufferSize, fileSize); - fs.readSync(fileDescriptor, buffer, 0, chunkSize, fileSize - chunkSize); - const lines = buffer.toString('utf8', 0, chunkSize).split('\n'); - fs.closeSync(fileDescriptor); - - for (let i = lines.length - 1; i >= 0; i--) { - const line = lines[i]; - if (line && line.includes(`Saw new header hash=${hash}`)) { - // Extract time from log: "2021-08-31T12:34:56Z" or "2021-08-31T12:34:56.123456Z" if logtimemicros=1 - const dateMatch = line.match(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.?\d{6})?Z/); - if (dateMatch) { - return dateMatch[0].replace("T", " ").replace("Z", ""); - } - } - } - } catch (e) { - logger.err(`Cannot parse block first seen time from Core logs. Reason: ` + (e instanceof Error ? e.message : e)); - } - } - return undefined; - } } export default new Audit(); \ No newline at end of file diff --git a/backend/src/api/database-migration.ts b/backend/src/api/database-migration.ts index 8efa9d42a..ee9df9151 100644 --- a/backend/src/api/database-migration.ts +++ b/backend/src/api/database-migration.ts @@ -707,7 +707,7 @@ class DatabaseMigration { } if (databaseSchemaVersion < 83 && isBitcoin === true) { - await this.$executeQuery('ALTER TABLE `blocks_audits` ADD first_seen timestamp(6) DEFAULT NULL'); + await this.$executeQuery('ALTER TABLE `blocks` ADD first_seen datetime(6) DEFAULT NULL'); await this.updateToSchemaVersion(83); } } diff --git a/backend/src/api/websocket-handler.ts b/backend/src/api/websocket-handler.ts index 387f5e837..d0e8f2cbd 100644 --- a/backend/src/api/websocket-handler.ts +++ b/backend/src/api/websocket-handler.ts @@ -16,6 +16,7 @@ import transactionUtils from './transaction-utils'; import rbfCache, { ReplacementInfo } from './rbf-cache'; import difficultyAdjustment from './difficulty-adjustment'; import feeApi from './fee-api'; +import BlocksRepository from '../repositories/BlocksRepository'; import BlocksAuditsRepository from '../repositories/BlocksAuditsRepository'; import BlocksSummariesRepository from '../repositories/BlocksSummariesRepository'; import Audit from './audit'; @@ -34,6 +35,7 @@ interface AddressTransactions { } import bitcoinSecondClient from './bitcoin/bitcoin-second-client'; import { calculateMempoolTxCpfp } from './cpfp'; +import { getRecentFirstSeen } from '../utils/file-read'; // valid 'want' subscriptions const wantable = [ @@ -975,7 +977,7 @@ class WebsocketHandler { } if (Common.indexingEnabled()) { - const { unseen, censored, added, prioritized, fresh, sigop, fullrbf, accelerated, score, similarity, firstSeen } = Audit.auditBlock(block.height, blockTransactions, projectedBlocks, auditMempool, block.id); + const { unseen, censored, added, prioritized, fresh, sigop, fullrbf, accelerated, score, similarity } = Audit.auditBlock(block.height, blockTransactions, projectedBlocks, auditMempool); const matchRate = Math.round(score * 100 * 100) / 100; const stripped = projectedBlocks[0]?.transactions ? projectedBlocks[0].transactions : []; @@ -1012,7 +1014,6 @@ class WebsocketHandler { matchRate: matchRate, expectedFees: totalFees, expectedWeight: totalWeight, - firstSeen: firstSeen, }); if (block.extras) { @@ -1029,6 +1030,14 @@ class WebsocketHandler { } } + if (config.CORE_RPC.DEBUG_LOG_PATH && block.extras) { + const firstSeen = getRecentFirstSeen(block.id); + if (firstSeen) { + BlocksRepository.$saveFirstSeenTime(block.id, firstSeen); + block.extras.firstSeen = firstSeen; + } + } + const confirmedTxids: { [txid: string]: boolean } = {}; // Update mempool to remove transactions included in the new block diff --git a/backend/src/mempool.interfaces.ts b/backend/src/mempool.interfaces.ts index fde465afb..dc703af21 100644 --- a/backend/src/mempool.interfaces.ts +++ b/backend/src/mempool.interfaces.ts @@ -45,7 +45,6 @@ export interface BlockAudit { expectedFees?: number, expectedWeight?: number, template?: any[]; - firstSeen?: string; } export interface TransactionAudit { @@ -58,7 +57,6 @@ export interface TransactionAudit { conflict?: boolean; coinbase?: boolean; firstSeen?: number; - blockFirstSeen?: string; } export interface AuditScore { @@ -322,6 +320,7 @@ export interface BlockExtension { segwitTotalSize: number; segwitTotalWeight: number; header: string; + firstSeen: number | null; utxoSetChange: number; // Requires coinstatsindex, will be set to NULL otherwise utxoSetSize: number | null; diff --git a/backend/src/replication/AuditReplication.ts b/backend/src/replication/AuditReplication.ts index 720cbd9d7..6f616dbbe 100644 --- a/backend/src/replication/AuditReplication.ts +++ b/backend/src/replication/AuditReplication.ts @@ -124,8 +124,7 @@ class AuditReplication { matchRate: auditSummary.matchRate, expectedFees: auditSummary.expectedFees, expectedWeight: auditSummary.expectedWeight, - firstSeen: auditSummary.firstSeen, - }, true); + }); // add missing data to cached blocks const cachedBlock = blocks.getBlocks().find(block => block.id === blockHash); if (cachedBlock) { diff --git a/backend/src/repositories/BlocksAuditsRepository.ts b/backend/src/repositories/BlocksAuditsRepository.ts index fabb7ecd9..3b3f79ce0 100644 --- a/backend/src/repositories/BlocksAuditsRepository.ts +++ b/backend/src/repositories/BlocksAuditsRepository.ts @@ -15,11 +15,11 @@ interface MigrationAudit { } class BlocksAuditRepositories { - public async $saveAudit(audit: BlockAudit, replication = false): Promise { + public async $saveAudit(audit: BlockAudit): Promise { try { - await DB.query(`INSERT INTO blocks_audits(version, time, height, hash, unseen_txs, missing_txs, added_txs, prioritized_txs, fresh_txs, sigop_txs, fullrbf_txs, accelerated_txs, match_rate, expected_fees, expected_weight, first_seen) - VALUE (?, FROM_UNIXTIME(?), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ${replication ? 'FROM_UNIXTIME(?)' : '?'})`, [audit.version, audit.time, audit.height, audit.hash, JSON.stringify(audit.unseenTxs), JSON.stringify(audit.missingTxs), - JSON.stringify(audit.addedTxs), JSON.stringify(audit.prioritizedTxs), JSON.stringify(audit.freshTxs), JSON.stringify(audit.sigopTxs), JSON.stringify(audit.fullrbfTxs), JSON.stringify(audit.acceleratedTxs), audit.matchRate, audit.expectedFees, audit.expectedWeight, audit.firstSeen]); + await DB.query(`INSERT INTO blocks_audits(version, time, height, hash, unseen_txs, missing_txs, added_txs, prioritized_txs, fresh_txs, sigop_txs, fullrbf_txs, accelerated_txs, match_rate, expected_fees, expected_weight) + VALUE (?, FROM_UNIXTIME(?), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [audit.version, audit.time, audit.height, audit.hash, JSON.stringify(audit.unseenTxs), JSON.stringify(audit.missingTxs), + JSON.stringify(audit.addedTxs), JSON.stringify(audit.prioritizedTxs), JSON.stringify(audit.freshTxs), JSON.stringify(audit.sigopTxs), JSON.stringify(audit.fullrbfTxs), JSON.stringify(audit.acceleratedTxs), audit.matchRate, audit.expectedFees, audit.expectedWeight]); } catch (e: any) { if (e.errno === 1062) { // ER_DUP_ENTRY - This scenario is possible upon node backend restart logger.debug(`Cannot save block audit for block ${audit.hash} because it has already been indexed, ignoring`); @@ -78,7 +78,6 @@ class BlocksAuditRepositories { blocks_audits.height, blocks_audits.hash as id, UNIX_TIMESTAMP(blocks_audits.time) as timestamp, - UNIX_TIMESTAMP(blocks_audits.first_seen) as firstSeen, template, unseen_txs as unseenTxs, missing_txs as missingTxs, @@ -97,7 +96,6 @@ class BlocksAuditRepositories { `, [hash]); if (rows.length) { - console.log(rows[0].firstSeen); rows[0].unseenTxs = JSON.parse(rows[0].unseenTxs); rows[0].missingTxs = JSON.parse(rows[0].missingTxs); rows[0].addedTxs = JSON.parse(rows[0].addedTxs); @@ -108,10 +106,6 @@ class BlocksAuditRepositories { rows[0].acceleratedTxs = JSON.parse(rows[0].acceleratedTxs); rows[0].template = JSON.parse(rows[0].template); - if (!rows[0].firstSeen) { - delete rows[0].firstSeen; - } - return rows[0]; } return null; @@ -130,7 +124,6 @@ class BlocksAuditRepositories { const isPrioritized = blockAudit.prioritizedTxs.includes(txid); const isAccelerated = blockAudit.acceleratedTxs.includes(txid); const isConflict = blockAudit.fullrbfTxs.includes(txid); - const blockFirstSeen = blockAudit.firstSeen; let isExpected = false; let firstSeen = undefined; blockAudit.template?.forEach(tx => { @@ -149,7 +142,6 @@ class BlocksAuditRepositories { conflict: isConflict, accelerated: isAccelerated, firstSeen, - ...(blockFirstSeen) && { blockFirstSeen }, }; } return null; diff --git a/backend/src/repositories/BlocksRepository.ts b/backend/src/repositories/BlocksRepository.ts index f958e5c8b..112cb1903 100644 --- a/backend/src/repositories/BlocksRepository.ts +++ b/backend/src/repositories/BlocksRepository.ts @@ -57,6 +57,7 @@ interface DatabaseBlock { utxoSetChange: number; utxoSetSize: number; totalInputAmt: number; + firstSeen: number; } const BLOCK_DB_FIELDS = ` @@ -99,7 +100,8 @@ const BLOCK_DB_FIELDS = ` blocks.header, blocks.utxoset_change AS utxoSetChange, blocks.utxoset_size AS utxoSetSize, - blocks.total_input_amt AS totalInputAmt + blocks.total_input_amt AS totalInputAmt, + UNIX_TIMESTAMP(blocks.first_seen) AS firstSeen `; class BlocksRepository { @@ -1021,6 +1023,24 @@ class BlocksRepository { } } + /** + * Save block first seen time + * + * @param id + */ + public async $saveFirstSeenTime(id: string, firstSeen: number): Promise { + try { + await DB.query(` + UPDATE blocks SET first_seen = FROM_UNIXTIME(?) + WHERE hash = ?`, + [firstSeen, id] + ); + } catch (e) { + logger.err(`Cannot update block first seen time. Reason: ` + (e instanceof Error ? e.message : e)); + throw e; + } + } + /** * Convert a mysql row block into a BlockExtended. Note that you * must provide the correct field into dbBlk object param @@ -1078,6 +1098,7 @@ class BlocksRepository { extras.utxoSetSize = dbBlk.utxoSetSize; extras.totalInputAmt = dbBlk.totalInputAmt; extras.virtualSize = dbBlk.weight / 4.0; + extras.firstSeen = dbBlk.firstSeen; // Re-org can happen after indexing so we need to always get the // latest state from core diff --git a/backend/src/utils/file-read.ts b/backend/src/utils/file-read.ts new file mode 100644 index 000000000..ddf8660c4 --- /dev/null +++ b/backend/src/utils/file-read.ts @@ -0,0 +1,58 @@ +import * as fs from 'fs'; +import logger from '../logger'; +import config from '../config'; + +function readFile(filePath: string, bufferSize?: number): string[] { + const fileSize = fs.statSync(filePath).size; + const chunkSize = bufferSize || fileSize; + const fileDescriptor = fs.openSync(filePath, 'r'); + const buffer = Buffer.alloc(chunkSize); + + fs.readSync(fileDescriptor, buffer, 0, chunkSize, fileSize - chunkSize); + fs.closeSync(fileDescriptor); + + const lines = buffer.toString('utf8', 0, chunkSize).split('\n'); + return lines; +} + +function extractDateFromLogLine(line: string): number | undefined { + // Extract time from log: "2021-08-31T12:34:56Z" or "2021-08-31T12:34:56.123456Z" + const dateMatch = line.match(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{6})?Z/); + if (!dateMatch) { + return undefined; + } + + const dateStr = dateMatch[0]; + const date = new Date(dateStr); + let timestamp = Math.floor(date.getTime() / 1000); // Remove decimal (microseconds are added later) + + const timePart = dateStr.split('T')[1]; + const microseconds = timePart.split('.')[1] || ''; + + if (!microseconds) { + return timestamp; + } + + return parseFloat(timestamp + '.' + microseconds); +} + +export function getRecentFirstSeen(hash: string): number | undefined { + const debugLogPath = config.CORE_RPC.DEBUG_LOG_PATH; + if (debugLogPath) { + try { + // Read the last few lines of debug.log + const lines = readFile(debugLogPath, 2048); + + for (let i = lines.length - 1; i >= 0; i--) { + const line = lines[i]; + if (line && line.includes(`Saw new header hash=${hash}`)) { + return extractDateFromLogLine(line); + } + } + } catch (e) { + logger.err(`Cannot parse block first seen time from Core logs. Reason: ` + (e instanceof Error ? e.message : e)); + } + } + + return undefined; +} From 69a994afd59c3c7fc492d29932b40d678fdafc99 Mon Sep 17 00:00:00 2001 From: natsoni Date: Thu, 10 Oct 2024 20:53:19 +0900 Subject: [PATCH 105/147] Add license to inscriptions.utils.ts --- frontend/src/app/shared/ord/inscription.utils.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/frontend/src/app/shared/ord/inscription.utils.ts b/frontend/src/app/shared/ord/inscription.utils.ts index 78095f22f..08ecc316a 100644 --- a/frontend/src/app/shared/ord/inscription.utils.ts +++ b/frontend/src/app/shared/ord/inscription.utils.ts @@ -1,3 +1,19 @@ +/* +MIT License + +Copyright (c) 2024 HAUS HOPPE + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. +*/ + // Adapted from https://github.com/ordpool-space/ordpool-parser/tree/ce04d7a5b6bb1cf37b9fdadd77ba430f5bd6e7d6/src // Utils functions to decode ord inscriptions From 93d95388457a25426e4aa68e0d637b528b74ff73 Mon Sep 17 00:00:00 2001 From: natsoni Date: Sat, 12 Oct 2024 15:56:38 +0900 Subject: [PATCH 106/147] Fix error formatting on core only backend --- .../components/push-transaction/push-transaction.component.ts | 2 +- .../components/test-transactions/test-transactions.component.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/app/components/push-transaction/push-transaction.component.ts b/frontend/src/app/components/push-transaction/push-transaction.component.ts index 03a050dfa..d56ffa2d1 100644 --- a/frontend/src/app/components/push-transaction/push-transaction.component.ts +++ b/frontend/src/app/components/push-transaction/push-transaction.component.ts @@ -59,7 +59,7 @@ export class PushTransactionComponent implements OnInit { }, (error) => { if (typeof error.error === 'string') { - const matchText = error.error.match('"message":"(.*?)"'); + const matchText = error.error.replace(/\\/g, '').match('"message":"(.*?)"'); this.error = 'Failed to broadcast transaction, reason: ' + (matchText && matchText[1] || error.error); } else if (error.message) { this.error = 'Failed to broadcast transaction, reason: ' + error.message; diff --git a/frontend/src/app/components/test-transactions/test-transactions.component.ts b/frontend/src/app/components/test-transactions/test-transactions.component.ts index c9abeed62..615f635cd 100644 --- a/frontend/src/app/components/test-transactions/test-transactions.component.ts +++ b/frontend/src/app/components/test-transactions/test-transactions.component.ts @@ -74,7 +74,7 @@ export class TestTransactionsComponent implements OnInit { }, (error) => { if (typeof error.error === 'string') { - const matchText = error.error.match('"message":"(.*?)"'); + const matchText = error.error.replace(/\\/g, '').match('"message":"(.*?)"'); this.error = matchText && matchText[1] || error.error; } else if (error.message) { this.error = error.message; From 9f0b3bd76969a4653b77153b76cf7ce6e453f2fa Mon Sep 17 00:00:00 2001 From: natsoni Date: Sat, 12 Oct 2024 17:38:37 +0900 Subject: [PATCH 107/147] Add submitpackage endpoint --- .../bitcoin/bitcoin-api-abstract-factory.ts | 3 ++- .../src/api/bitcoin/bitcoin-api.interface.ts | 18 ++++++++++++++++++ backend/src/api/bitcoin/bitcoin-api.ts | 6 +++++- backend/src/api/bitcoin/bitcoin.routes.ts | 14 ++++++++++++++ backend/src/api/bitcoin/esplora-api.ts | 6 +++++- backend/src/rpc-api/commands.ts | 1 + 6 files changed, 45 insertions(+), 3 deletions(-) diff --git a/backend/src/api/bitcoin/bitcoin-api-abstract-factory.ts b/backend/src/api/bitcoin/bitcoin-api-abstract-factory.ts index a08f43238..95c3ff2b6 100644 --- a/backend/src/api/bitcoin/bitcoin-api-abstract-factory.ts +++ b/backend/src/api/bitcoin/bitcoin-api-abstract-factory.ts @@ -1,4 +1,4 @@ -import { IBitcoinApi, TestMempoolAcceptResult } from './bitcoin-api.interface'; +import { IBitcoinApi, SubmitPackageResult, TestMempoolAcceptResult } from './bitcoin-api.interface'; import { IEsploraApi } from './esplora-api.interface'; export interface AbstractBitcoinApi { @@ -23,6 +23,7 @@ export interface AbstractBitcoinApi { $getScriptHashTransactions(address: string, lastSeenTxId: string): Promise; $sendRawTransaction(rawTransaction: string): Promise; $testMempoolAccept(rawTransactions: string[], maxfeerate?: number): Promise; + $submitPackage(rawTransactions: string[], maxfeerate?: number, maxburnamount?: number): Promise; $getOutspend(txId: string, vout: number): Promise; $getOutspends(txId: string): Promise; $getBatchedOutspends(txId: string[]): Promise; diff --git a/backend/src/api/bitcoin/bitcoin-api.interface.ts b/backend/src/api/bitcoin/bitcoin-api.interface.ts index 6e8583f6f..5d8371d27 100644 --- a/backend/src/api/bitcoin/bitcoin-api.interface.ts +++ b/backend/src/api/bitcoin/bitcoin-api.interface.ts @@ -218,3 +218,21 @@ export interface TestMempoolAcceptResult { }, ['reject-reason']?: string, } + +export interface SubmitPackageResult { + package_msg: string; + "tx-results": { [wtxid: string]: TxResult }; + "replaced-transactions"?: string[]; +} + +export interface TxResult { + txid: string; + "other-wtxid"?: string; + vsize?: number; + fees?: { + base: number; + "effective-feerate"?: number; + "effective-includes"?: string[]; + }; + error?: string; +} diff --git a/backend/src/api/bitcoin/bitcoin-api.ts b/backend/src/api/bitcoin/bitcoin-api.ts index 7fa431db6..4cbbf178a 100644 --- a/backend/src/api/bitcoin/bitcoin-api.ts +++ b/backend/src/api/bitcoin/bitcoin-api.ts @@ -1,6 +1,6 @@ import * as bitcoinjs from 'bitcoinjs-lib'; import { AbstractBitcoinApi, HealthCheckHost } from './bitcoin-api-abstract-factory'; -import { IBitcoinApi, TestMempoolAcceptResult } from './bitcoin-api.interface'; +import { IBitcoinApi, SubmitPackageResult, TestMempoolAcceptResult } from './bitcoin-api.interface'; import { IEsploraApi } from './esplora-api.interface'; import blocks from '../blocks'; import mempool from '../mempool'; @@ -196,6 +196,10 @@ class BitcoinApi implements AbstractBitcoinApi { } } + $submitPackage(rawTransactions: string[], maxfeerate?: number, maxburnamount?: number): Promise { + return this.bitcoindClient.submitPackage(rawTransactions, maxfeerate ?? undefined, maxburnamount ?? undefined); + } + async $getOutspend(txId: string, vout: number): Promise { const txOut = await this.bitcoindClient.getTxOut(txId, vout, false); return { diff --git a/backend/src/api/bitcoin/bitcoin.routes.ts b/backend/src/api/bitcoin/bitcoin.routes.ts index 498003d98..14e5e197d 100644 --- a/backend/src/api/bitcoin/bitcoin.routes.ts +++ b/backend/src/api/bitcoin/bitcoin.routes.ts @@ -58,6 +58,7 @@ class BitcoinRoutes { .get(config.MEMPOOL.API_URL_PREFIX + 'tx/:txId', this.getTransaction) .post(config.MEMPOOL.API_URL_PREFIX + 'tx', this.$postTransaction) .post(config.MEMPOOL.API_URL_PREFIX + 'txs/test', this.$testTransactions) + .post(config.MEMPOOL.API_URL_PREFIX + 'txs/package', this.$submitPackage) .get(config.MEMPOOL.API_URL_PREFIX + 'tx/:txId/hex', this.getRawTransaction) .get(config.MEMPOOL.API_URL_PREFIX + 'tx/:txId/status', this.getTransactionStatus) .get(config.MEMPOOL.API_URL_PREFIX + 'tx/:txId/outspends', this.getTransactionOutspends) @@ -794,6 +795,19 @@ class BitcoinRoutes { } } + private async $submitPackage(req: Request, res: Response) { + try { + const rawTxs = Common.getTransactionsFromRequest(req); + const maxfeerate = parseFloat(req.query.maxfeerate as string); + const maxburneamount = parseFloat(req.query.maxburneamount as string); + const result = await bitcoinApi.$submitPackage(rawTxs, maxfeerate, maxburneamount); + res.send(result); + } catch (e: any) { + handleError(req, res, 400, e.message && e.code ? 'submitpackage RPC error: ' + JSON.stringify({ code: e.code, message: e.message }) + : (e.message || 'Error')); + } + } + } export default new BitcoinRoutes(); diff --git a/backend/src/api/bitcoin/esplora-api.ts b/backend/src/api/bitcoin/esplora-api.ts index b4ae35da9..7b32115bb 100644 --- a/backend/src/api/bitcoin/esplora-api.ts +++ b/backend/src/api/bitcoin/esplora-api.ts @@ -5,7 +5,7 @@ import { AbstractBitcoinApi, HealthCheckHost } from './bitcoin-api-abstract-fact import { IEsploraApi } from './esplora-api.interface'; import logger from '../../logger'; import { Common } from '../common'; -import { TestMempoolAcceptResult } from './bitcoin-api.interface'; +import { SubmitPackageResult, TestMempoolAcceptResult } from './bitcoin-api.interface'; interface FailoverHost { host: string, @@ -332,6 +332,10 @@ class ElectrsApi implements AbstractBitcoinApi { throw new Error('Method not implemented.'); } + $submitPackage(rawTransactions: string[]): Promise { + throw new Error('Method not implemented.'); + } + $getOutspend(txId: string, vout: number): Promise { return this.failoverRouter.$get('/tx/' + txId + '/outspend/' + vout); } diff --git a/backend/src/rpc-api/commands.ts b/backend/src/rpc-api/commands.ts index 85675230b..89ab9cfe6 100644 --- a/backend/src/rpc-api/commands.ts +++ b/backend/src/rpc-api/commands.ts @@ -83,6 +83,7 @@ module.exports = { signRawTransaction: 'signrawtransaction', // bitcoind v0.7.0+ stop: 'stop', submitBlock: 'submitblock', // bitcoind v0.7.0+ + submitPackage: 'submitpackage', validateAddress: 'validateaddress', verifyChain: 'verifychain', // bitcoind v0.9.0+ verifyMessage: 'verifymessage', From d1741a51c975bdd124639dc6bf554f5417391bf6 Mon Sep 17 00:00:00 2001 From: natsoni Date: Sat, 12 Oct 2024 17:38:48 +0900 Subject: [PATCH 108/147] Add submit package option to tx push page --- .../push-transaction.component.html | 62 ++++++++++++++ .../push-transaction.component.ts | 80 +++++++++++++++++++ .../src/app/interfaces/node-api.interface.ts | 20 ++++- frontend/src/app/services/api.service.ts | 16 +++- 4 files changed, 176 insertions(+), 2 deletions(-) diff --git a/frontend/src/app/components/push-transaction/push-transaction.component.html b/frontend/src/app/components/push-transaction/push-transaction.component.html index dff79afbb..8d8402fd3 100644 --- a/frontend/src/app/components/push-transaction/push-transaction.component.html +++ b/frontend/src/app/components/push-transaction/push-transaction.component.html @@ -9,4 +9,66 @@

{{ error }}

{{ txId }} + @if (network === '' || network === 'testnet' || network === 'testnet4' || network === 'signet') { +
+

Submit Package

+ +
+
+ +
+ + + + +
+ +

{{ errorPackage }}

+

{{ packageMessage }}

+ + + +
+ +
+
- +
- +
+ + + + + + + + + + + + + + + + +
Allowed?TXIDEffective fee rateRejection reason
+ @if (result.error == null) { + + } + @else { + + } + + @if (!result.error) { + + } @else { + + } + + + - + + {{ result.error || '-' }} +
+ + } \ No newline at end of file diff --git a/frontend/src/app/components/push-transaction/push-transaction.component.ts b/frontend/src/app/components/push-transaction/push-transaction.component.ts index d56ffa2d1..cec2f026b 100644 --- a/frontend/src/app/components/push-transaction/push-transaction.component.ts +++ b/frontend/src/app/components/push-transaction/push-transaction.component.ts @@ -7,6 +7,7 @@ import { OpenGraphService } from '../../services/opengraph.service'; import { seoDescriptionNetwork } from '../../shared/common.utils'; import { ActivatedRoute, Router } from '@angular/router'; import { RelativeUrlPipe } from '../../shared/pipes/relative-url/relative-url.pipe'; +import { TxResult } from '../../interfaces/node-api.interface'; @Component({ selector: 'app-push-transaction', @@ -19,6 +20,16 @@ export class PushTransactionComponent implements OnInit { txId: string = ''; isLoading = false; + submitTxsForm: UntypedFormGroup; + errorPackage: string = ''; + packageMessage: string = ''; + results: TxResult[] = []; + invalidMaxfeerate = false; + invalidMaxburnamount = false; + isLoadingPackage = false; + + network = this.stateService.network; + constructor( private formBuilder: UntypedFormBuilder, private apiService: ApiService, @@ -35,6 +46,14 @@ export class PushTransactionComponent implements OnInit { txHash: ['', Validators.required], }); + this.submitTxsForm = this.formBuilder.group({ + txs: ['', Validators.required], + maxfeerate: ['', Validators.min(0)], + maxburnamount: ['', Validators.min(0)], + }); + + this.stateService.networkChanged$.subscribe((network) => this.network = network); + this.seoService.setTitle($localize`:@@meta.title.push-tx:Broadcast Transaction`); this.seoService.setDescription($localize`:@@meta.description.push-tx:Broadcast a transaction to the ${this.stateService.network==='liquid'||this.stateService.network==='liquidtestnet'?'Liquid':'Bitcoin'}${seoDescriptionNetwork(this.stateService.network)} network using the transaction's hash.`); this.ogService.setManualOgImage('tx-push.jpg'); @@ -70,6 +89,67 @@ export class PushTransactionComponent implements OnInit { }); } + submitTxs() { + let txs: string[] = []; + try { + txs = (this.submitTxsForm.get('txs')?.value as string).split(',').map(hex => hex.trim()); + if (txs?.length === 1) { + this.pushTxForm.get('txHash').setValue(txs[0]); + this.submitTxsForm.get('txs').setValue(''); + this.postTx(); + return; + } + } catch (e) { + this.errorPackage = e?.message; + return; + } + + let maxfeerate; + let maxburnamount; + this.invalidMaxfeerate = false; + this.invalidMaxburnamount = false; + try { + const maxfeerateVal = this.submitTxsForm.get('maxfeerate')?.value; + if (maxfeerateVal != null && maxfeerateVal !== '') { + maxfeerate = parseFloat(maxfeerateVal) / 100_000; + } + } catch (e) { + this.invalidMaxfeerate = true; + } + try { + const maxburnamountVal = this.submitTxsForm.get('maxburnamount')?.value; + if (maxburnamountVal != null && maxburnamountVal !== '') { + maxburnamount = parseInt(maxburnamountVal) / 100_000_000; + } + } catch (e) { + this.invalidMaxburnamount = true; + } + + this.isLoadingPackage = true; + this.errorPackage = ''; + this.results = []; + this.apiService.submitPackage$(txs, maxfeerate === 0.1 ? null : maxfeerate, maxburnamount === 0 ? null : maxburnamount) + .subscribe((result) => { + this.isLoadingPackage = false; + + this.packageMessage = result['package_msg']; + for (let wtxid in result['tx-results']) { + this.results.push(result['tx-results'][wtxid]); + } + + this.submitTxsForm.reset(); + }, + (error) => { + if (typeof error.error?.error === 'string') { + const matchText = error.error.error.replace(/\\/g, '').match('"message":"(.*?)"'); + this.errorPackage = matchText && matchText[1] || error.error.error; + } else if (error.message) { + this.errorPackage = error.message; + } + this.isLoadingPackage = false; + }); + } + private async handleColdcardPushTx(fragmentParams: URLSearchParams): Promise { // maybe conforms to Coldcard nfc-pushtx spec if (fragmentParams && fragmentParams.get('t')) { diff --git a/frontend/src/app/interfaces/node-api.interface.ts b/frontend/src/app/interfaces/node-api.interface.ts index 4c7796590..650773794 100644 --- a/frontend/src/app/interfaces/node-api.interface.ts +++ b/frontend/src/app/interfaces/node-api.interface.ts @@ -452,4 +452,22 @@ export interface TestMempoolAcceptResult { "effective-includes": string[], }, ['reject-reason']?: string, -} \ No newline at end of file +} + +export interface SubmitPackageResult { + package_msg: string; + "tx-results": { [wtxid: string]: TxResult }; + "replaced-transactions"?: string[]; +} + +export interface TxResult { + txid: string; + "other-wtxid"?: string; + vsize?: number; + fees?: { + base: number; + "effective-feerate"?: number; + "effective-includes"?: string[]; + }; + error?: string; +} diff --git a/frontend/src/app/services/api.service.ts b/frontend/src/app/services/api.service.ts index fa52ec707..c536c0bb4 100644 --- a/frontend/src/app/services/api.service.ts +++ b/frontend/src/app/services/api.service.ts @@ -1,7 +1,8 @@ import { Injectable } from '@angular/core'; import { HttpClient, HttpParams, HttpResponse } from '@angular/common/http'; import { CpfpInfo, OptimizedMempoolStats, AddressInformation, LiquidPegs, ITranslators, PoolStat, BlockExtended, TransactionStripped, RewardStats, AuditScore, BlockSizesAndWeights, - RbfTree, BlockAudit, CurrentPegs, AuditStatus, FederationAddress, FederationUtxo, RecentPeg, PegsVolume, AccelerationInfo, TestMempoolAcceptResult } from '../interfaces/node-api.interface'; + RbfTree, BlockAudit, CurrentPegs, AuditStatus, FederationAddress, FederationUtxo, RecentPeg, PegsVolume, AccelerationInfo, TestMempoolAcceptResult, + SubmitPackageResult} from '../interfaces/node-api.interface'; import { BehaviorSubject, Observable, catchError, filter, map, of, shareReplay, take, tap } from 'rxjs'; import { StateService } from './state.service'; import { Transaction } from '../interfaces/electrs.interface'; @@ -244,6 +245,19 @@ export class ApiService { return this.httpClient.post(this.apiBaseUrl + this.apiBasePath + `/api/txs/test${maxfeerate != null ? '?maxfeerate=' + maxfeerate.toFixed(8) : ''}`, rawTxs); } + submitPackage$(rawTxs: string[], maxfeerate?: number, maxburnamount?: number): Observable { + const queryParams = []; + + if (maxfeerate) { + queryParams.push(`maxfeerate=${maxfeerate}`); + } + + if (maxburnamount) { + queryParams.push(`maxburnamount=${maxburnamount}`); + } + return this.httpClient.post(this.apiBaseUrl + this.apiBasePath + '/api/txs/package' + (queryParams.length > 0 ? `?${queryParams.join('&')}` : ''), rawTxs); + } + getTransactionStatus$(txid: string): Observable { return this.httpClient.get(this.apiBaseUrl + this.apiBasePath + '/api/tx/' + txid + '/status'); } From 735ed87b7846b9e85bb2b189858132ae0de7f3bf Mon Sep 17 00:00:00 2001 From: natsoni Date: Sun, 13 Oct 2024 11:14:23 +0900 Subject: [PATCH 109/147] Route submitpackage calls to core on esplora backends --- backend/src/api/bitcoin/bitcoin.routes.ts | 7 ++++--- frontend/src/app/services/api.service.ts | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/backend/src/api/bitcoin/bitcoin.routes.ts b/backend/src/api/bitcoin/bitcoin.routes.ts index 14e5e197d..3b33c1ead 100644 --- a/backend/src/api/bitcoin/bitcoin.routes.ts +++ b/backend/src/api/bitcoin/bitcoin.routes.ts @@ -48,6 +48,8 @@ class BitcoinRoutes { .post(config.MEMPOOL.API_URL_PREFIX + 'psbt/addparents', this.postPsbtCompletion) .get(config.MEMPOOL.API_URL_PREFIX + 'blocks-bulk/:from', this.getBlocksByBulk.bind(this)) .get(config.MEMPOOL.API_URL_PREFIX + 'blocks-bulk/:from/:to', this.getBlocksByBulk.bind(this)) + // Temporarily add txs/package endpoint for all backends until esplora supports it + .post(config.MEMPOOL.API_URL_PREFIX + 'txs/package', this.$submitPackage) ; if (config.MEMPOOL.BACKEND !== 'esplora') { @@ -58,7 +60,6 @@ class BitcoinRoutes { .get(config.MEMPOOL.API_URL_PREFIX + 'tx/:txId', this.getTransaction) .post(config.MEMPOOL.API_URL_PREFIX + 'tx', this.$postTransaction) .post(config.MEMPOOL.API_URL_PREFIX + 'txs/test', this.$testTransactions) - .post(config.MEMPOOL.API_URL_PREFIX + 'txs/package', this.$submitPackage) .get(config.MEMPOOL.API_URL_PREFIX + 'tx/:txId/hex', this.getRawTransaction) .get(config.MEMPOOL.API_URL_PREFIX + 'tx/:txId/status', this.getTransactionStatus) .get(config.MEMPOOL.API_URL_PREFIX + 'tx/:txId/outspends', this.getTransactionOutspends) @@ -799,8 +800,8 @@ class BitcoinRoutes { try { const rawTxs = Common.getTransactionsFromRequest(req); const maxfeerate = parseFloat(req.query.maxfeerate as string); - const maxburneamount = parseFloat(req.query.maxburneamount as string); - const result = await bitcoinApi.$submitPackage(rawTxs, maxfeerate, maxburneamount); + const maxburnamount = parseFloat(req.query.maxburnamount as string); + const result = await bitcoinClient.submitPackage(rawTxs, maxfeerate ?? undefined, maxburnamount ?? undefined); res.send(result); } catch (e: any) { handleError(req, res, 400, e.message && e.code ? 'submitpackage RPC error: ' + JSON.stringify({ code: e.code, message: e.message }) diff --git a/frontend/src/app/services/api.service.ts b/frontend/src/app/services/api.service.ts index c536c0bb4..c58a67f0e 100644 --- a/frontend/src/app/services/api.service.ts +++ b/frontend/src/app/services/api.service.ts @@ -255,7 +255,7 @@ export class ApiService { if (maxburnamount) { queryParams.push(`maxburnamount=${maxburnamount}`); } - return this.httpClient.post(this.apiBaseUrl + this.apiBasePath + '/api/txs/package' + (queryParams.length > 0 ? `?${queryParams.join('&')}` : ''), rawTxs); + return this.httpClient.post(this.apiBaseUrl + this.apiBasePath + '/api/v1/txs/package' + (queryParams.length > 0 ? `?${queryParams.join('&')}` : ''), rawTxs); } getTransactionStatus$(txid: string): Observable { From 071e9b6c2c359ad86d5e9fea47696ebe3ef153b1 Mon Sep 17 00:00:00 2001 From: natsoni Date: Sun, 13 Oct 2024 12:54:58 +0900 Subject: [PATCH 110/147] Include optional seconds in search bar date --- frontend/src/app/shared/regex.utils.ts | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/frontend/src/app/shared/regex.utils.ts b/frontend/src/app/shared/regex.utils.ts index a349e9633..b3d277c9f 100644 --- a/frontend/src/app/shared/regex.utils.ts +++ b/frontend/src/app/shared/regex.utils.ts @@ -313,20 +313,24 @@ export function getRegex(type: RegexType, network?: Network): RegExp { } regex += `)`; // End the non-capturing group break; - // Match a date in the format YYYY-MM-DD (optional: HH:MM) + // Match a date in the format YYYY-MM-DD (optional: HH:MM or HH:MM:SS) // [Testing Order]: any order is fine case `date`: regex += `(?:`; // Start a non-capturing group regex += `${NUMBER_CHARS}{4}`; // Exactly 4 digits regex += `[-/]`; // 1 instance of the symbol "-" or "/" - regex += `${NUMBER_CHARS}{1,2}`; // Exactly 4 digits + regex += `${NUMBER_CHARS}{1,2}`; // 1 or 2 digits regex += `[-/]`; // 1 instance of the symbol "-" or "/" - regex += `${NUMBER_CHARS}{1,2}`; // Exactly 4 digits + regex += `${NUMBER_CHARS}{1,2}`; // 1 or 2 digits regex += `(?:`; // Start a non-capturing group regex += ` `; // 1 instance of the symbol " " - regex += `${NUMBER_CHARS}{1,2}`; // Exactly 4 digits + regex += `${NUMBER_CHARS}{1,2}`; // 1 or 2 digits regex += `:`; // 1 instance of the symbol ":" - regex += `${NUMBER_CHARS}{1,2}`; // Exactly 4 digits + regex += `${NUMBER_CHARS}{1,2}`; // 1 or 2 digits + regex += `(?:`; // Start a non-capturing group for optional seconds + regex += `:`; // 1 instance of the symbol ":" + regex += `${NUMBER_CHARS}{1,2}`; // 1 or 2 digits + regex += `)?`; // End the non-capturing group regex += `)?`; // End the non-capturing group. This group appears 0 or 1 times regex += `)`; // End the non-capturing group break; From f9300130fec01a0939d34e3bec869cd6dfc32376 Mon Sep 17 00:00:00 2001 From: softsimon Date: Sun, 13 Oct 2024 16:00:08 +0900 Subject: [PATCH 111/147] Bump Core to v28.0 --- production/install | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/production/install b/production/install index 4bd5fe287..41bcf47bc 100755 --- a/production/install +++ b/production/install @@ -357,7 +357,7 @@ BITCOIN_REPO_URL=https://github.com/bitcoin/bitcoin BITCOIN_REPO_NAME=bitcoin BITCOIN_REPO_BRANCH=master #BITCOIN_LATEST_RELEASE=$(curl -s https://api.github.com/repos/bitcoin/bitcoin/releases/latest|grep tag_name|head -1|cut -d '"' -f4) -BITCOIN_LATEST_RELEASE=v28.0rc2 +BITCOIN_LATEST_RELEASE=v28.0 echo -n '.' BISQ_REPO_URL=https://github.com/bisq-network/bisq From 2c12f890bddbfedea52d317acde87ef5fc516c79 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 13 Oct 2024 07:50:05 +0000 Subject: [PATCH 112/147] Bump cookie and express in /backend Bumps [cookie](https://github.com/jshttp/cookie) to 0.7.1 and updates ancestor dependency [express](https://github.com/expressjs/express). These dependencies need to be updated together. Updates `cookie` from 0.6.0 to 0.7.1 - [Release notes](https://github.com/jshttp/cookie/releases) - [Commits](https://github.com/jshttp/cookie/compare/v0.6.0...v0.7.1) Updates `express` from 4.21.0 to 4.21.1 - [Release notes](https://github.com/expressjs/express/releases) - [Changelog](https://github.com/expressjs/express/blob/4.21.1/History.md) - [Commits](https://github.com/expressjs/express/compare/4.21.0...4.21.1) --- updated-dependencies: - dependency-name: cookie dependency-type: indirect - dependency-name: express dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- backend/package-lock.json | 30 +++++++++++++++--------------- backend/package.json | 2 +- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/backend/package-lock.json b/backend/package-lock.json index 7696eddd6..e0d28bfc9 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -16,7 +16,7 @@ "axios": "1.7.2", "bitcoinjs-lib": "~6.1.3", "crypto-js": "~4.2.0", - "express": "~4.21.0", + "express": "~4.21.1", "maxmind": "~4.3.11", "mysql2": "~3.11.0", "redis": "^4.7.0", @@ -2827,9 +2827,9 @@ "dev": true }, "node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", "engines": { "node": ">= 0.6" } @@ -3461,16 +3461,16 @@ } }, "node_modules/express": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz", - "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==", + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", + "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.6.0", + "cookie": "0.7.1", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", @@ -9865,9 +9865,9 @@ "dev": true }, "cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==" + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==" }, "cookie-signature": { "version": "1.0.6", @@ -10319,16 +10319,16 @@ } }, "express": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz", - "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==", + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", + "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", "requires": { "accepts": "~1.3.8", "array-flatten": "1.1.1", "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.6.0", + "cookie": "0.7.1", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", diff --git a/backend/package.json b/backend/package.json index c18974021..9ac3f9199 100644 --- a/backend/package.json +++ b/backend/package.json @@ -45,7 +45,7 @@ "axios": "1.7.2", "bitcoinjs-lib": "~6.1.3", "crypto-js": "~4.2.0", - "express": "~4.21.0", + "express": "~4.21.1", "maxmind": "~4.3.11", "mysql2": "~3.11.0", "rust-gbt": "file:./rust-gbt", From 8a72a5871d90b32c4d2ed2cf4694bf014a3d5014 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 13 Oct 2024 07:51:12 +0000 Subject: [PATCH 113/147] Bump cookie, socket.io and express in /frontend Bumps [cookie](https://github.com/jshttp/cookie), [socket.io](https://github.com/socketio/socket.io) and [express](https://github.com/expressjs/express). These dependencies needed to be updated together. Updates `cookie` from 0.6.0 to 0.7.1 - [Release notes](https://github.com/jshttp/cookie/releases) - [Commits](https://github.com/jshttp/cookie/compare/v0.6.0...v0.7.1) Updates `socket.io` from 4.7.1 to 4.8.0 - [Release notes](https://github.com/socketio/socket.io/releases) - [Changelog](https://github.com/socketio/socket.io/blob/main/CHANGELOG.md) - [Commits](https://github.com/socketio/socket.io/compare/4.7.1...socket.io@4.8.0) Updates `express` from 4.21.0 to 4.21.1 - [Release notes](https://github.com/expressjs/express/releases) - [Changelog](https://github.com/expressjs/express/blob/4.21.1/History.md) - [Commits](https://github.com/expressjs/express/compare/4.21.0...4.21.1) --- updated-dependencies: - dependency-name: cookie dependency-type: indirect - dependency-name: socket.io dependency-type: indirect - dependency-name: express dependency-type: indirect ... Signed-off-by: dependabot[bot] --- frontend/package-lock.json | 86 +++++++++++++++++++------------------- 1 file changed, 43 insertions(+), 43 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index f7e104bf3..e5681072a 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -4800,9 +4800,9 @@ "devOptional": true }, "node_modules/@types/cors": { - "version": "2.8.13", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz", - "integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==", + "version": "2.8.17", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", + "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", "devOptional": true, "dependencies": { "@types/node": "*" @@ -7695,9 +7695,9 @@ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, "node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", "engines": { "node": ">= 0.6" } @@ -8906,9 +8906,9 @@ } }, "node_modules/engine.io": { - "version": "6.5.5", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.5.tgz", - "integrity": "sha512-C5Pn8Wk+1vKBoHghJODM63yk8MvrO9EWZUfkAt5HAqIgPE4/8FF0PEGHXtEd40l223+cE5ABWuPzm38PHFXfMA==", + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.2.tgz", + "integrity": "sha512-gmNvsYi9C8iErnZdVcJnvCpSKbWTt1E8+JZo8b+daLninywUWi5NQ5STSHZ9rFjFO7imNcvb8Pc5pe/wMR5xEw==", "devOptional": true, "dependencies": { "@types/cookie": "^0.4.1", @@ -8916,7 +8916,7 @@ "@types/node": ">=10.0.0", "accepts": "~1.3.4", "base64id": "2.0.0", - "cookie": "~0.4.1", + "cookie": "~0.7.2", "cors": "~2.8.5", "debug": "~4.3.1", "engine.io-parser": "~5.2.1", @@ -8949,9 +8949,9 @@ } }, "node_modules/engine.io/node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", "devOptional": true, "engines": { "node": ">= 0.6" @@ -9846,16 +9846,16 @@ "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==" }, "node_modules/express": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz", - "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==", + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", + "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.6.0", + "cookie": "0.7.1", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", @@ -15893,21 +15893,21 @@ } }, "node_modules/socket.io": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.1.tgz", - "integrity": "sha512-W+utHys2w//dhFjy7iQQu9sGd3eokCjGbl2r59tyLqNiJJBdIebn3GAKEXBr3osqHTObJi2die/25bCx2zsaaw==", + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.0.tgz", + "integrity": "sha512-8U6BEgGjQOfGz3HHTYaC/L1GaxDCJ/KM0XTkJly0EhZ5U/du9uNEZy4ZgYzEzIqlx2CMm25CrCqr1ck899eLNA==", "devOptional": true, "dependencies": { "accepts": "~1.3.4", "base64id": "~2.0.0", "cors": "~2.8.5", "debug": "~4.3.2", - "engine.io": "~6.5.0", + "engine.io": "~6.6.0", "socket.io-adapter": "~2.5.2", "socket.io-parser": "~4.2.4" }, "engines": { - "node": ">=10.0.0" + "node": ">=10.2.0" } }, "node_modules/socket.io-adapter": { @@ -21585,9 +21585,9 @@ "devOptional": true }, "@types/cors": { - "version": "2.8.13", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz", - "integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==", + "version": "2.8.17", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", + "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", "devOptional": true, "requires": { "@types/node": "*" @@ -23833,9 +23833,9 @@ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, "cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==" + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==" }, "cookie-signature": { "version": "1.0.6", @@ -24771,9 +24771,9 @@ } }, "engine.io": { - "version": "6.5.5", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.5.tgz", - "integrity": "sha512-C5Pn8Wk+1vKBoHghJODM63yk8MvrO9EWZUfkAt5HAqIgPE4/8FF0PEGHXtEd40l223+cE5ABWuPzm38PHFXfMA==", + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.2.tgz", + "integrity": "sha512-gmNvsYi9C8iErnZdVcJnvCpSKbWTt1E8+JZo8b+daLninywUWi5NQ5STSHZ9rFjFO7imNcvb8Pc5pe/wMR5xEw==", "devOptional": true, "requires": { "@types/cookie": "^0.4.1", @@ -24781,7 +24781,7 @@ "@types/node": ">=10.0.0", "accepts": "~1.3.4", "base64id": "2.0.0", - "cookie": "~0.4.1", + "cookie": "~0.7.2", "cors": "~2.8.5", "debug": "~4.3.1", "engine.io-parser": "~5.2.1", @@ -24789,9 +24789,9 @@ }, "dependencies": { "cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", "devOptional": true } } @@ -25497,16 +25497,16 @@ "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==" }, "express": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz", - "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==", + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", + "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", "requires": { "accepts": "~1.3.8", "array-flatten": "1.1.1", "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.6.0", + "cookie": "0.7.1", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", @@ -29962,16 +29962,16 @@ "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" }, "socket.io": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.1.tgz", - "integrity": "sha512-W+utHys2w//dhFjy7iQQu9sGd3eokCjGbl2r59tyLqNiJJBdIebn3GAKEXBr3osqHTObJi2die/25bCx2zsaaw==", + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.0.tgz", + "integrity": "sha512-8U6BEgGjQOfGz3HHTYaC/L1GaxDCJ/KM0XTkJly0EhZ5U/du9uNEZy4ZgYzEzIqlx2CMm25CrCqr1ck899eLNA==", "devOptional": true, "requires": { "accepts": "~1.3.4", "base64id": "~2.0.0", "cors": "~2.8.5", "debug": "~4.3.2", - "engine.io": "~6.5.0", + "engine.io": "~6.6.0", "socket.io-adapter": "~2.5.2", "socket.io-parser": "~4.2.4" } From ce1babf67bf5303ed619f6c1bc87ac80e2042001 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 14 Oct 2024 02:28:52 +0000 Subject: [PATCH 114/147] Bump send and browser-sync in /frontend Bumps [send](https://github.com/pillarjs/send) to 0.19.0 and updates ancestor dependency [browser-sync](https://github.com/BrowserSync/browser-sync). These dependencies need to be updated together. Updates `send` from 0.16.2 to 0.19.0 - [Release notes](https://github.com/pillarjs/send/releases) - [Changelog](https://github.com/pillarjs/send/blob/master/HISTORY.md) - [Commits](https://github.com/pillarjs/send/compare/0.16.2...0.19.0) Updates `browser-sync` from 3.0.2 to 3.0.3 - [Release notes](https://github.com/BrowserSync/browser-sync/releases) - [Changelog](https://github.com/BrowserSync/browser-sync/blob/master/changelog.js) - [Commits](https://github.com/BrowserSync/browser-sync/compare/v3.0.2...v3.0.3) --- updated-dependencies: - dependency-name: send dependency-type: indirect - dependency-name: browser-sync dependency-type: direct:development ... Signed-off-by: dependabot[bot] --- frontend/package-lock.json | 316 +++++++------------------------------ frontend/package.json | 2 +- 2 files changed, 54 insertions(+), 264 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index e5681072a..44d3227d8 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -51,7 +51,7 @@ "@types/node": "^18.11.9", "@typescript-eslint/eslint-plugin": "^7.4.0", "@typescript-eslint/parser": "^7.4.0", - "browser-sync": "^3.0.0", + "browser-sync": "^3.0.3", "eslint": "^8.57.0", "http-proxy-middleware": "~2.0.6", "prettier": "^3.0.0", @@ -6209,13 +6209,13 @@ } }, "node_modules/browser-sync": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-3.0.2.tgz", - "integrity": "sha512-PC9c7aWJFVR4IFySrJxOqLwB9ENn3/TaXCXtAa0SzLwocLN3qMjN+IatbjvtCX92BjNXsY6YWg9Eb7F3Wy255g==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-3.0.3.tgz", + "integrity": "sha512-91hoBHKk1C4pGeD+oE9Ld222k2GNQEAsI5AElqR8iLLWNrmZR2LPP8B0h8dpld9u7kro5IEUB3pUb0DJ3n1cRQ==", "devOptional": true, "dependencies": { - "browser-sync-client": "^3.0.2", - "browser-sync-ui": "^3.0.2", + "browser-sync-client": "^3.0.3", + "browser-sync-ui": "^3.0.3", "bs-recipes": "1.3.4", "chalk": "4.1.2", "chokidar": "^3.5.1", @@ -6229,15 +6229,15 @@ "fs-extra": "3.0.1", "http-proxy": "^1.18.1", "immutable": "^3", - "micromatch": "^4.0.2", + "micromatch": "^4.0.8", "opn": "5.3.0", "portscanner": "2.2.0", "raw-body": "^2.3.2", "resp-modifier": "6.0.2", "rx": "4.1.0", - "send": "0.16.2", - "serve-index": "1.9.1", - "serve-static": "1.13.2", + "send": "^0.19.0", + "serve-index": "^1.9.1", + "serve-static": "^1.16.2", "server-destroy": "1.0.1", "socket.io": "^4.4.1", "ua-parser-js": "^1.0.33", @@ -6251,9 +6251,9 @@ } }, "node_modules/browser-sync-client": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-3.0.2.tgz", - "integrity": "sha512-tBWdfn9L0wd2Pjuz/NWHtNEKthVb1Y67vg8/qyGNtCqetNz5lkDkFnrsx5UhPNPYUO8vci50IWC/BhYaQskDiQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-3.0.3.tgz", + "integrity": "sha512-TOEXaMgYNjBYIcmX5zDlOdjEqCeCN/d7opf/fuyUD/hhGVCfP54iQIDhENCi012AqzYZm3BvuFl57vbwSTwkSQ==", "devOptional": true, "dependencies": { "etag": "1.8.1", @@ -6265,9 +6265,9 @@ } }, "node_modules/browser-sync-ui": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-3.0.2.tgz", - "integrity": "sha512-V3FwWAI+abVbFLTyJjXJlCMBwjc3GXf/BPGfwO2fMFACWbIGW9/4SrBOFYEOOtqzCjQE0Di+U3VIb7eES4omNA==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-3.0.3.tgz", + "integrity": "sha512-FcGWo5lP5VodPY6O/f4pXQy5FFh4JK0f2/fTBsp0Lx1NtyBWs/IfPPJbW8m1ujTW/2r07oUXKTF2LYZlCZktjw==", "devOptional": true, "dependencies": { "async-each-series": "0.1.1", @@ -6412,30 +6412,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "devOptional": true }, - "node_modules/browser-sync/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "devOptional": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/browser-sync/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "devOptional": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/browser-sync/node_modules/destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==", - "devOptional": true - }, "node_modules/browser-sync/node_modules/fs-extra": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", @@ -6456,27 +6432,6 @@ "node": ">=8" } }, - "node_modules/browser-sync/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "devOptional": true, - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/browser-sync/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "devOptional": true - }, "node_modules/browser-sync/node_modules/jsonfile": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", @@ -6486,75 +6441,6 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/browser-sync/node_modules/mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", - "devOptional": true, - "bin": { - "mime": "cli.js" - } - }, - "node_modules/browser-sync/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "devOptional": true - }, - "node_modules/browser-sync/node_modules/send": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", - "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", - "devOptional": true, - "dependencies": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.6.2", - "mime": "1.4.1", - "ms": "2.0.0", - "on-finished": "~2.3.0", - "range-parser": "~1.2.0", - "statuses": "~1.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/browser-sync/node_modules/serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", - "devOptional": true, - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.2", - "send": "0.16.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/browser-sync/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "devOptional": true - }, - "node_modules/browser-sync/node_modules/statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", - "devOptional": true, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/browser-sync/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -8927,16 +8813,16 @@ } }, "node_modules/engine.io-client": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.5.4.tgz", - "integrity": "sha512-GeZeeRjpD2qf49cZQ0Wvh/8NJNfeXkXXcoGh+F77oEAgo9gUHwT1fCRxSNU+YEEaysOJTnsFHmM5oAcPy4ntvQ==", + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.1.tgz", + "integrity": "sha512-aYuoak7I+R83M/BBPIOs2to51BmFIpC1wZe6zZzMrT2llVsHy5cvcmdsJgP2Qz6smHu+sD9oexiSUAVd8OfBPw==", "devOptional": true, "dependencies": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.1", "engine.io-parser": "~5.2.1", "ws": "~8.17.1", - "xmlhttprequest-ssl": "~2.0.0" + "xmlhttprequest-ssl": "~2.1.1" } }, "node_modules/engine.io-parser": { @@ -15921,14 +15807,14 @@ } }, "node_modules/socket.io-client": { - "version": "4.7.5", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.7.5.tgz", - "integrity": "sha512-sJ/tqHOCe7Z50JCBCXrsY3I2k03iOiUe+tj1OmKeD2lXPiGH/RUCdTZFoqVyN7l1MnpIzPrGtLcijffmeouNlQ==", + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.8.0.tgz", + "integrity": "sha512-C0jdhD5yQahMws9alf/yvtsMGTaIDBnZ8Rb5HU56svyq0l5LIrGzIDZZD5pHQlmzxLuU91Gz+VpQMKgCTNYtkw==", "devOptional": true, "dependencies": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.2", - "engine.io-client": "~6.5.2", + "engine.io-client": "~6.6.1", "socket.io-parser": "~4.2.4" }, "engines": { @@ -18290,9 +18176,9 @@ } }, "node_modules/xmlhttprequest-ssl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz", - "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.1.1.tgz", + "integrity": "sha512-ptjR8YSJIXoA3Mbv5po7RtSYHO6mZr8s7i5VGmEk7QY2pQWyT1o0N+W1gKbOyJPUCGXGnuw0wqe8f0L6Y0ny7g==", "devOptional": true, "engines": { "node": ">=0.4.0" @@ -22686,13 +22572,13 @@ } }, "browser-sync": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-3.0.2.tgz", - "integrity": "sha512-PC9c7aWJFVR4IFySrJxOqLwB9ENn3/TaXCXtAa0SzLwocLN3qMjN+IatbjvtCX92BjNXsY6YWg9Eb7F3Wy255g==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-3.0.3.tgz", + "integrity": "sha512-91hoBHKk1C4pGeD+oE9Ld222k2GNQEAsI5AElqR8iLLWNrmZR2LPP8B0h8dpld9u7kro5IEUB3pUb0DJ3n1cRQ==", "devOptional": true, "requires": { - "browser-sync-client": "^3.0.2", - "browser-sync-ui": "^3.0.2", + "browser-sync-client": "^3.0.3", + "browser-sync-ui": "^3.0.3", "bs-recipes": "1.3.4", "chalk": "4.1.2", "chokidar": "^3.5.1", @@ -22706,15 +22592,15 @@ "fs-extra": "3.0.1", "http-proxy": "^1.18.1", "immutable": "^3", - "micromatch": "^4.0.2", + "micromatch": "^4.0.8", "opn": "5.3.0", "portscanner": "2.2.0", "raw-body": "^2.3.2", "resp-modifier": "6.0.2", "rx": "4.1.0", - "send": "0.16.2", - "serve-index": "1.9.1", - "serve-static": "1.13.2", + "send": "^0.19.0", + "serve-index": "^1.9.1", + "serve-static": "^1.16.2", "server-destroy": "1.0.1", "socket.io": "^4.4.1", "ua-parser-js": "^1.0.33", @@ -22766,27 +22652,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "devOptional": true }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "devOptional": true, - "requires": { - "ms": "2.0.0" - } - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "devOptional": true - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==", - "devOptional": true - }, "fs-extra": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", @@ -22804,24 +22669,6 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "devOptional": true }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "devOptional": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "devOptional": true - }, "jsonfile": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", @@ -22831,63 +22678,6 @@ "graceful-fs": "^4.1.6" } }, - "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", - "devOptional": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "devOptional": true - }, - "send": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", - "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", - "devOptional": true, - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.6.2", - "mime": "1.4.1", - "ms": "2.0.0", - "on-finished": "~2.3.0", - "range-parser": "~1.2.0", - "statuses": "~1.4.0" - } - }, - "serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", - "devOptional": true, - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.2", - "send": "0.16.2" - } - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "devOptional": true - }, - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", - "devOptional": true - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -22950,9 +22740,9 @@ } }, "browser-sync-client": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-3.0.2.tgz", - "integrity": "sha512-tBWdfn9L0wd2Pjuz/NWHtNEKthVb1Y67vg8/qyGNtCqetNz5lkDkFnrsx5UhPNPYUO8vci50IWC/BhYaQskDiQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-3.0.3.tgz", + "integrity": "sha512-TOEXaMgYNjBYIcmX5zDlOdjEqCeCN/d7opf/fuyUD/hhGVCfP54iQIDhENCi012AqzYZm3BvuFl57vbwSTwkSQ==", "devOptional": true, "requires": { "etag": "1.8.1", @@ -22961,9 +22751,9 @@ } }, "browser-sync-ui": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-3.0.2.tgz", - "integrity": "sha512-V3FwWAI+abVbFLTyJjXJlCMBwjc3GXf/BPGfwO2fMFACWbIGW9/4SrBOFYEOOtqzCjQE0Di+U3VIb7eES4omNA==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-3.0.3.tgz", + "integrity": "sha512-FcGWo5lP5VodPY6O/f4pXQy5FFh4JK0f2/fTBsp0Lx1NtyBWs/IfPPJbW8m1ujTW/2r07oUXKTF2LYZlCZktjw==", "devOptional": true, "requires": { "async-each-series": "0.1.1", @@ -24797,16 +24587,16 @@ } }, "engine.io-client": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.5.4.tgz", - "integrity": "sha512-GeZeeRjpD2qf49cZQ0Wvh/8NJNfeXkXXcoGh+F77oEAgo9gUHwT1fCRxSNU+YEEaysOJTnsFHmM5oAcPy4ntvQ==", + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.1.tgz", + "integrity": "sha512-aYuoak7I+R83M/BBPIOs2to51BmFIpC1wZe6zZzMrT2llVsHy5cvcmdsJgP2Qz6smHu+sD9oexiSUAVd8OfBPw==", "devOptional": true, "requires": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.1", "engine.io-parser": "~5.2.1", "ws": "~8.17.1", - "xmlhttprequest-ssl": "~2.0.0" + "xmlhttprequest-ssl": "~2.1.1" } }, "engine.io-parser": { @@ -29987,14 +29777,14 @@ } }, "socket.io-client": { - "version": "4.7.5", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.7.5.tgz", - "integrity": "sha512-sJ/tqHOCe7Z50JCBCXrsY3I2k03iOiUe+tj1OmKeD2lXPiGH/RUCdTZFoqVyN7l1MnpIzPrGtLcijffmeouNlQ==", + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.8.0.tgz", + "integrity": "sha512-C0jdhD5yQahMws9alf/yvtsMGTaIDBnZ8Rb5HU56svyq0l5LIrGzIDZZD5pHQlmzxLuU91Gz+VpQMKgCTNYtkw==", "devOptional": true, "requires": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.2", - "engine.io-client": "~6.5.2", + "engine.io-client": "~6.6.1", "socket.io-parser": "~4.2.4" } }, @@ -31573,9 +31363,9 @@ "integrity": "sha512-sID0rrVCqkVNUn8t6xuv9+6FViXjUVXq8H5rWOH2rz9fDNQEd4g0EA2XlcEdJXRz5BMEn4O1pJFdT+z4YHhoWw==" }, "xmlhttprequest-ssl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz", - "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.1.1.tgz", + "integrity": "sha512-ptjR8YSJIXoA3Mbv5po7RtSYHO6mZr8s7i5VGmEk7QY2pQWyT1o0N+W1gKbOyJPUCGXGnuw0wqe8f0L6Y0ny7g==", "devOptional": true }, "xtend": { diff --git a/frontend/package.json b/frontend/package.json index 3318d5031..14e040996 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -105,7 +105,7 @@ "@typescript-eslint/eslint-plugin": "^7.4.0", "@typescript-eslint/parser": "^7.4.0", "eslint": "^8.57.0", - "browser-sync": "^3.0.0", + "browser-sync": "^3.0.3", "http-proxy-middleware": "~2.0.6", "prettier": "^3.0.0", "source-map-support": "^0.5.21", From 5f222f59a7b8972cd0b96fd60f98ffbfc43c0b54 Mon Sep 17 00:00:00 2001 From: softsimon Date: Mon, 14 Oct 2024 14:47:12 +0900 Subject: [PATCH 115/147] Whale size increase --- frontend/src/app/components/about/about.component.html | 2 +- frontend/src/app/components/about/about.component.scss | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/frontend/src/app/components/about/about.component.html b/frontend/src/app/components/about/about.component.html index 406835572..299a48b00 100644 --- a/frontend/src/app/components/about/about.component.html +++ b/frontend/src/app/components/about/about.component.html @@ -206,7 +206,7 @@
-
+

Whale Sponsors

diff --git a/frontend/src/app/components/about/about.component.scss b/frontend/src/app/components/about/about.component.scss index 6a20239cc..6a76bf299 100644 --- a/frontend/src/app/components/about/about.component.scss +++ b/frontend/src/app/components/about/about.component.scss @@ -92,6 +92,13 @@ } } + .whale-sponsor { + img { + width: 70px; + height: 70px; + } + } + .alliances { margin-bottom: 100px; a { From 450d83461c0b58e50db7a29afa2d400bc7cb512a Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Mon, 14 Oct 2024 14:49:53 +0900 Subject: [PATCH 116/147] [accelerator] revalidate user choice after choosing fee option --- .../accelerate-checkout/accelerate-checkout.component.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts b/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts index c6f442c84..e9888f58b 100644 --- a/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts +++ b/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts @@ -374,6 +374,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { this.selectFeeRateIndex = index; this.userBid = Math.max(0, fee); this.cost = this.userBid + this.estimate.mempoolBaseFee + this.estimate.vsizeFee; + this.validateChoice(); } } From 1c4be164dd30ae79779148a522d54d456a13d2a7 Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Mon, 14 Oct 2024 17:03:52 +0900 Subject: [PATCH 117/147] [mining] use getNetworkHashPs(1008) --- backend/src/api/mining/mining-routes.ts | 2 +- .../app/components/hashrate-chart/hashrate-chart.component.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/src/api/mining/mining-routes.ts b/backend/src/api/mining/mining-routes.ts index 69e6d95d4..f53630ce2 100644 --- a/backend/src/api/mining/mining-routes.ts +++ b/backend/src/api/mining/mining-routes.ts @@ -183,7 +183,7 @@ class MiningRoutes { private async $getHistoricalHashrate(req: Request, res: Response) { let currentHashrate = 0, currentDifficulty = 0; try { - currentHashrate = await bitcoinClient.getNetworkHashPs(); + currentHashrate = await bitcoinClient.getNetworkHashPs(1008); currentDifficulty = await bitcoinClient.getDifficulty(); } catch (e) { logger.debug('Bitcoin Core is not available, using zeroed value for current hashrate and difficulty'); diff --git a/frontend/src/app/components/hashrate-chart/hashrate-chart.component.html b/frontend/src/app/components/hashrate-chart/hashrate-chart.component.html index b50389ce8..b8a720743 100644 --- a/frontend/src/app/components/hashrate-chart/hashrate-chart.component.html +++ b/frontend/src/app/components/hashrate-chart/hashrate-chart.component.html @@ -5,7 +5,7 @@
-
Hashrate
+
Hashrate (1w)

{{ hashrates.currentHashrate | amountShortener: 1 : 'H/s' }}

From 7f4dc7eb3e9d3e83b04df4e6b54eabfddebeada2 Mon Sep 17 00:00:00 2001 From: softsimon Date: Mon, 14 Oct 2024 19:42:32 +0900 Subject: [PATCH 118/147] Add taproot wizards as enterprise sponsor --- .../app/components/about/about.component.html | 5 +++++ frontend/src/resources/profile/wizardhat.png | Bin 0 -> 131292 bytes 2 files changed, 5 insertions(+) create mode 100644 frontend/src/resources/profile/wizardhat.png diff --git a/frontend/src/app/components/about/about.component.html b/frontend/src/app/components/about/about.component.html index 406835572..6efa695c0 100644 --- a/frontend/src/app/components/about/about.component.html +++ b/frontend/src/app/components/about/about.component.html @@ -201,6 +201,11 @@ Leather + + + + Taproot Wizards +
diff --git a/frontend/src/resources/profile/wizardhat.png b/frontend/src/resources/profile/wizardhat.png new file mode 100644 index 0000000000000000000000000000000000000000..d385a56fa5cee913a4c19f8055a682e0c6383f92 GIT binary patch literal 131292 zcmeFYWm8<=6D>SI2o?f^2WQaW?h=N<3GVLh?ht|uZUKS^cY?bFcMl#QxV!r^`TcLz z{R~glovKrF=DeA;`}FQ!-K%%FqP!$JDj_NW06>?Pf+zz32q4%ciu@M#gqR7n6!rz@ zqAUr9TO48xfc-#ml+tnm0MM}iU2uT33<3Z=;EOawRMj)%s2#NY3AIYdI;gpgd#t*YmX_&Q*XJi|TkpTt`n0s(oCueCzh2u1!65zn z{Fs2w3jgmG@T(sI{N{i6lOE)d|MS!j>Hj?h0REpr{&R=_zd6HIBewV5S(NbZudV7! zhWh?LcZW|vg`Vr+BW&_-hAG+X^eTd=KANZkYTM} zOR#N=1P-A74jBlunIXd2dRS=@NmiEN?qF|qZLFNU5Zm;NqF8wKkoEJoi0O2-94R-7 z;zFE{`|&^!m71JBv5FySdhk1ss2JVL?{+$!9d@>R-VxTSjCYbmMuIoLR{dDAi&ZC} zf(~?8FOyv+i57?5th1y3V?Gg4mdIl_V0Co!Wn~#<@BM7?4~Kokgdc7C=~{(8vsnqN zE6g}{QR?vw6q#HQanbiuMB}4koDeL#j-4+z`1{;0?BRCS7Wv+?`_%&iso^Q$VJmn? zPR3WP;I$Wzz><}bCam?KPk^Si5jG7f<|G^ty4%ZR;XEA@5_~KlQ!`NEXBsU0pt34F z0B*i*%czQZd-2W7(kk1JQaLKqAqweIBDmM)ptme1YSPdSsG~&w5oDB|L|c1o)0&~9 zpPsqk2klD-sY9hGzmJ~FxY+t;JjE@2;8te1W%ao_I)ujdGMdB=`o=(IBm;;FR{-O7g zpdRQ6?eN(Nt9mOUi^`ONY1xPJzV(em;(Su=XLLL!dM!sQa4=$`e2g;90M!v2_gW$@ ziEp_&Z$Y*cuc$IN+I>A?(jhLP3i^`JmVrzE`7+DnARldj{S?w0fF>3uEQ0_(k=+dj z3vd6b-Y+8IWk0_PFFDvRh(8xg8f&wMu!a9H zd?WEGg6oTGH;6OTwb=M#%x2>9Ncfvf$d@Y6*Oc1ACS1~!MP|wIyf{$#0%od59!WgM zo|*C1K=^!qQXz5`IJmEixG?lmb`NsLxQY|sa<3R(M2#!TG%Z!!E1TdghQ)&6Bdsdc zF|BIIqClJ`E=C^?>Uz}uItbpvnLmW%SR zn9m(|j`jZF&jb`kZ$fTRain8Q(M|BsvW<`5Ipbk3A;)Vn*l5GDa1t!IQ4O!Qt6`$3eZQFKRi!62s4MuGz#&X{F``O@~3;q#eKpy9Z+GvC)6?i zaeNfttS+0?IL0zWr4WV^2mmw@EMi|7l-9`NcUFGNKSv6^#@Lq&{3;xO^4c!vtC^fszkd#yzM@SfTC$ z-98PU$7Dmi@rfO6`%WUS%6=Ic{Whtv$WlkMXkORx<-@7aRHq*b5-Q+3(*I%<%F~!A z*UOAw?8^=b#;H%w7wzX@?Hsx2UxJV>Xf*sRrT#DqG9DHi8e&NlYj_lj?VC_W0ybsV zw~oe`vb)!Y4xyjncup5vyUtv>PBIcly4LYSQ>(%l_u;-Ka`{jTI6a;5*v? z7WU=oClYP8S?~bSsj%l3KJC{jLm40L{j{FqCPAiM5661Ci^wfpRPL~^c7N(j?dUmk zi$%L{b$Ri^H1^GX6XWT&K8P(OH+^;%&ZT2tcFGM#_k2HcAsFwa;<~}+R9lbE$Bss= z^DPxKK6P@^F6+%Mli{W?$LX>VdbniQm`X)60jJL2QT((d5?UrEEg_-MW~EwTB5KL$ z3x2mj&ji8sor6iKUS8+ynR(TBqqn7ms^#+2J5>^`(rcF$DMH8J3P@N1KS=&t%nyVV zA=Qt6oc>M{*^4;tjrmxZk5>!^f+$((K|idNXmGzp0he*!+5To%4;i7L1vNN z+PRhaFtkxmxHU(VP{>0S)QuJ~^l*|emK!|3saU>%OnCTQ)lA5o&wx#?bx#k%_n&=O zG$%S7D^;$bdh1*1oqXM4+Dt%_hEut=wZ03j?@Q;A_GAaEN-S?s8GLEaI z8F~Mq0*mC1xodJb0Lh2AS}YiVswdxrV&;|V+cTn55$CN9zxsnqj6NCpd&IPjizfeg z<3qi(!MU;Rgcj)y4(uWBo<@>cak{~AP+zVE(Qw5nJ_Te)+rVS-)p|+=>k-s2bNrYZ zb}o@Q&V49i_c-{|Z>y~$TW1Ll9`GNRwj~g*(a3h*UH#hmaQ1sElC)G#q`rSP(bx_W z^5ZRSV7er+qt}YL$}dK$@U-v=CTbH6ROI-i6?qJ>DIKbn?+)E@l(p*+$2i|9hC31u z<2fDN!sLIZ)STD#p8p-f^XK{(nGmm*AB9GJL=e{J59>~Hy*u?(LlhbfNMVwd_6c=D z?BDFp=BW(WtVKa@NaG8t6)C1)?)j_X!TCSL=;w;8(qk-T%|i9>f71#bV<<2_dv*~4 z0Gj{dFBcHLDi*#y5IDW>?U1<+61)CR*r8C3uPEf+-eFb(p{H9SCCi8e)@o2?Q;m<@ zWvLKLhkC8rs;xi(Ou|T}F^Ee%3pf7pFWSV_!%d#JOX`fe5a&(eCdjYn*|1I<#V?djM$Z3ZpM(4u|0+NAKu{vKRbMzT&N`njp z2N7|3O>87k0Ip@ee<8}2EEf6%ab4*Dvcv_f)BDw&mSESt+gxUf*Zu7#s|vd$9rKH1 zJ{kfOWV9zL2b5wHV?xN?8ImOoX%)}3Z`u1$RRJ^aoe3;svMT!CWjz-??^PnbT*Q1l zpZ*X41)C^@Nyu^L7fMNCNdzkXU6%N2HJCKA@8~DgG#`eGA}#4+Pfw6OUoHOzdDq<$ z$;Cg58hp`Cr_QNH0yb@K=mdj%Ip86s3*3djoxY-)2SH z%WJHdPhEa0KbvmGABF22YMi~tkmIy-Y<+yI2LB$YSG!IOci`WohJ=ml?L$C}8LUIJ zHoHVu)OAEPH_|)rG^gZA?wi&gsiaGGh))>#~ZH~Z=LfiS2cAJUz{qM8L{3zt` zV20{L$Dpqvk{MUGiY{08QnF_)!Nh41iTHsT@|{QofkQq z%s#@H9SS3)m~HB{&oR9egtn8i{|KG-C0p|5bKR(LbOzy4zvtRbk|%hax<-~BxoFun zKM9k0=SSgo*xW$9wJmv?xbn zlGn9mgm8L2al6BNNO4)ZY?HU&o%{HoCR!XnUCs*Y0_Nz6_R3+7XUKH1+(_crQ{hAA z_t>HBdZJ`9surx!!V8Hvod|Q3-qltz4Gy{yOxO|4QlLP?qQRy7gScWH(?;+^3*JOD zKS#TbKIQVW+uQ2n{pKMscVhz~m`b3Z8a31&9UY&6lRJ%d-5Bu*SRI0ab3dd5$`0bq zbyCYYP7-sSVNeoB3zYvGivR%pDm@#~SbJR5!GK|@W-Y8zER;T0Ql*R6AS|5x{*Yvy z1tt5f?SSGYhQ;}&( zYmB|UBD8VTi%&a6p)pm^;;lP764=x$nar|jP_&DySM{jVgrb{Ipz?rF;db)6+rg<(`CCv8)_INhYosL5K6yuzQj zi@twN1O9GL8gJjL7aW`s@VMgtY!5Edl4;(2`^Tt`Dd9S72ra(gsYC1QNZp5MXMOGy z#l)+Dt8d(~ail6j5{-Jkp~a&h-G!bBt3k4WwymX!uJe5gL1T!Yi0<Q_fou}>Mq_Zk9dW@b=KD{kz-|(B57n3{8`8$h z4UDXI?94g1LAZbAwV`O+w#6e$`}K?Ds(%xfeI@QNrwK%AFNK#Yg;2>h1kpoSLn6*` z4I@+6*j1Jc!+I6vl#8=igS!QDpG`8@@(XEX!~EwjY_GSSim`H!&Wn%sSqa+&0idpSyesiufezhL$e2Njq^lpk-GYD(|xBu2@e^wT#)BiV_Fnt1Z3^VsXV*<$k^SdUcF z!IH(qDGj7$ENj4|+XU<(t$vF4z?GsnMbbv)5|L(x4QhUWyW|1xMRrn` z1{eO(W!(w=y0dtRhVuq41U)5gJa&OFDA#MYI&;nPEO^jc#_-e_>VX!00Uxk>@04Qd zzLJNDgGM4?<@`{7R>3Fy3i3B-Y+(0hmhVrn2!V12;OL6W4u;}_#3>;Xhq(M5{(+UP zTYLz@mHW){#?bSe)w}igHYgs?V17SS_pVsxONFmEh_xZv!N)g_mhQKk zNvL>bNjlq-@BXp{_oq!dkkwp$e>wWBH8$wxq?(YCqGo*f-d$GxG%Iha;6RNh_U*NL zN28CarZUwR=cF2KK^nV(#=$inY!JI#A!i7*>PxsAQJNb2On)w_U4@_wPv^tpS0NZG z^Z!rcsS)4tET0x=Y;TX{!;ndaIH{mSC@&sn2xfoI(LD`WOK~FqKY7S-lw_ zReOl}Viq^Z8Qg21_^RHt+;Rz}Q!7~iMcY|fqMG?*a|5MiKMBA41fCq}h5TQa?lSCF zmAU1nvQ?z6QCZ*;(?O)74(*Lmf>Q$&QrV6#^n%aIcjJog8)Bg~VAHbF$%a%v*A?oCuPcb3-am=Ln8Mq2 z7BcIMtIXxo`;GRbeng}wAYM$AvR>007w&s7F42tiaR8aoeDo)$YMwjBhQ~__I?NoNpo45vjPx*O#Z$(`$xD zKe9H-di}1&q#8@#S)7k&UImD2{J91=BVRflV}daoaD^sfaNtw~C};RrJHVQ~C+W8x z_pKhnXZt;(sphCXs_3YyxTGlm8dnT@)$0QV9?cXv%D!Pdc9Rm)a%%d}EpFzeEENP6 z^q%3!cvlt9J8*ttPMe|vgf>>Hb8j)Pno)8pb^8LjU^%|U&AZ&^`Heeg>oNUtZ;KbU zj$~v!UwmQiVk15wMJ|J@wddB(tH%`L?p2ctU=H_RL$PYSdCR9!&;L<%d!t7`+&pT~ zvNr)zE$7BuKcZHhK;?{UMKlf)oVbAtH({17RUUv+;+Jmkt1HC|^N7{oWkaA>3eKZr zsNRqzt?vlHB1g1)#E5p> z|1Et&5(CZvn{?mUhEd{t17Vk2j#ZC?2D0l0nDOwx`r*M?DJ$)1o6kXGhx?%(nUFSd zVJW^M9a@I6%@L(^bvuwT-I(0sZ1IMi>1}1&3{irukvyLD>Mdc;TB}IjK&bau`B*Zah8V$lJkB?4PM{A#MN4V(KL3wj&J1BSrr*BJ(df=$NP3FI0(>c-0mBRbllC%u zZ)#iVqd90%%}SAARYx|CSL)qgPxsV4j2OCV79>?@ah40YI-f&F z72{2kEvwf#;tfi5KxB(8fPD8He(I|xQhMafC#*F|`^@ zw6LC0$F$)nj63-XR@T&DoROc3g$5Nwd(#{%SIsV6q+IZl7dbAzs1Miy{38c%GaA>P z_D=l|8+=~M*=s_q#qu~w#ODxl1uG-OcPRcWX0=o7tkd3jSTbtaSl1JoyQqEFj&ubQ zmMLL*#A)t(!{y5E%?2@isZgTmj^?{R9pPG9e{6h1UEbV`CSx*h*8nZrnimKO2t*_(BmTrsSudQ4(atjuG1Dsl++hV z(sr?tgH7{%Ap9ZbOm*dU8nA-sw$V0oYTmZSTlpo$4Y_XzNErWfa9%hmFRme2{n_ROsbjJnn}h!gdH&JW%C zE!U^F7TUa@GF}svrM=?R(G#$7{S*RS_)8jF&kRY9=3;=@>f#N3Pv~BVx3k_$o&T3w ztcX=aI_~y`xEbIK{c0t~*VACP~;A-6@N%7{X{iePF; zOK*XdaoLgy#jxfxik+d4j!GA9-FB-xfkBjHp&!xCv-hp1YhF60)$3~QTHfYcq@zb& zyVxvsRl4M2HkG{f4a^dW9%x)#glf@L3Br|)g2>}yfa}ww8iNle;2k%D`y3n~FnWlg zvhDbghlKZ{+jE9MEh-ZiPr@>E7^Ye1;G|K5C^@kxa)osGe@7w~6c*vqr(#M!LKOqB z5cyZ8PJWZLr8^FB*H*I_MFK%gBz*$*j=wr4X7NBz9{3WfjPH~*?G%5!iAIVDy~eRC zBUTpi@8eiUhx>u{fBw8LjI=!K@s#Ij>p`;kQ+*Dw^t+XR^(T(&wY@0wL^W}6&oTgxRgd}p3HtDy{aMafKXA&BtW^paPQk;T7@_CqmoV%zng(&UOR~ri;8In~0@9){X#?)?Kmp_NabXbGvrl>SJ=#!)ffVs9TaiBgY z%Qq5I)pFp9I&y`3i9pZFayln@sEi;ru(S5~eK`uXa_rzR_tl~2fN<)7+Rux1@n@Ds zfdzE*WofaR8r`@y^3=;#yGUX}PKtyY)B!u$Pv1Mcg6@}5T_HV6Qkw&X`(Cjtmp<8o zuXiE_=P;vWvXWbT000&Up7vL;cb__SP9J}UfxP~hDi&JK(3Bp2FO7~1K21Eujq*Q> zCJ&b;pvaA;{)wf4>>~;>j=s2B2sP%4wo7%LR!?Oy-VT8ZCG$o7t>d`X&5C>3_AeKq zm`*?g3HZh?dc3EoQPoXdjSDK459#N$i?+E6!dCEoEz0tJLQ?nL1(Z|1-C~60r^D>E z$NiUi-%VJwyH?WsVd;uC+ZI?_9ghynp}Q(y1qvD7*RqFd7?R)A+!SZF6DI7J^`4St%#=YKRsu=ol@}W0DT4Z1%7PO*gr)U|jqA0}L+p8B=Q|!6**sMy zjF~9*jU3G%tjaiC#t9PNJVSnk>V!xHHktc(yF1_19j1+|RhQ%Ux-?U$hY&ER(c@A0 zNA_6@eH4O`*UYgbYnu#S*(fL@rwy}%)VyK^Iy1y}PX`Iu{d3u^pK&e$(`xP7_{z#Z zL(^N;j{ODCs=g|`3XOw|;!VYNaV~1x zHT!vlBNcW}Z3qPmqBHJ_X}abZp0vf*fTO>_pL<=}&jR(%=&Wi-?zGX4w?d7HQp>3J z3A=O}2ihvOc+pbcL3cVgc67;?!N|3v4G%Cz75s8nvzvWOJ90@4sABskxdy6jY|oRu zoK(!5yO0WTi&7B5#CAxQq|Uw_Px;;iB+lHkX2lo(! zWD{G^XPGp9=3wFuurcj@D=wic6)Q+_{Pg|xVf3J5>!J<)A}?-u$1g{pQbLgo^ktsJTa^4PwIBzOa&rB14%=FguWMd(hL3G*}l65zqza16K z8Z+UGAj4-2lz%r&Ym?LQMg#o4?_9!HS(La$0oad+s za~6ImEl^E47K4r|q#-1txyXtmi){2I3+R6ZL#URgnT+LVTCH|47pv3MjYc|>UHv=w zGu$tm=@0?}Kqc>Jlw)N#KCrR0OD(|KJ$0VuEe;K*F7mixrXg;G%y(Nn^jjLSQziqF z_ILL#ns@doqoW*8tyxx_r zZ4M5i`*2(uw+Ce!iR94}_@8v)a7Ww2X9udDRZPWg_@{Y6q{mfr!N!eWsJ@LP8^}Iv6x%vS5^x7t$p0$H`8vGg z@9AXQi>%ZYwfie-*VvS_RMZT23R&lSAe-JjC=kQlhCYP;Y4d*^177t0S=qu@Zrn(KHT)oO2Pc*NNo49*c!-jgmz> zxfVh4cOBpSSbILukEHit$ii7pA+6l5SUn!N)lst;M)`>2RZZ)nHZypoA(HeG5c=Ma zCz%JKs5wH1=8B<6F zO(sr8#uwVRYdnrHC4C+O0fCkORXV7bMDs#-Sq^{BCk^DHPjgejL&<9up>7vp5_EXe zC}3JAEv;!`V*;!BMEn(Pn9|!~OCMGwYO9c?5vA~$XSxvJDQY;U8ER}pjo4}h zDN^wbfk{7)yzQFl%IG2GvUw%cbSzCev2QnAM4_pCDr z=^R+`5kwMeXoR;y7c{h%W%*}K@t-xaT3nVz{O*qI4EEL$-~h>hU}RWlmAun`OsF$p z+wW1t)z(ztGrpwdl6*8B0liXvJk?=gsF}6y1&L#fl?JnASvEMIT5o|E$>&oBEtP#l z+!nK6(Ii8#Ia540#m0SyUrcTF6n}tdAL?8aX7x{J(oV+RuO5l?*z4d*SHhsA@{fsF zI;oEG5U42zawNt$1qzWWYk;IUN9_->i%lqZ654uY&c$tZmCFFFuP3!^q@jrIc!b2EA+8S@fd7 zYEd+qaBC>oRll+Fs%+(ByWUYDOI-^L9`r5#t*9VYtsFl+$JUXD8Q%H?Z^Oh{>6anl2AWWV z)^31+eM-G%u030=@#=RE)0EkrfS1ufw>?la;9Lo@rz-1O3TN(D>@}TAG4M{zdgI(7fkiq_70qX@BJQ_@TYnLE#CLm zwR$N>1OfcwV~sLen=~E~*`5-33TBvUOj+wie-KDxBqhuHjYpOx+ zq?@wvz3Q;@uL(_T-Qs8_N<{<{b zRO-SB>W3DT_{wtJ*jZvfxdrSEm!M`KrS3|E0g{m=gD!fiSC8^k7E|6DpVji+b`c5B zLvv$nM9J(UtXfVoj?O56S<}($WE+OmfVJ+?(kM8FUbJuBDXoON9I&pBlmQ*7Y82fc z?CXCV8m4EVUpjRxQ>RE+aA5~hYE3`D3|f&;FfG3?-FWr1;#E*fFYm<$i^r@NIkxv! zRw=G{pyPGT(WAI>xErV|9obRI_t3GPpBg2Y^HzV}9c+fl-e$L$T;h+f)*k0|veD3} zuUo9kmo9Z5dII zN;R@H_Uyg%1hqt(nXk^OiaZo*n&}1G>4l~21F7LC@v>>^^fsp7C-f|NieaNEMTwZz zt28e!Pt5_DA*k`bh_z2?i%o;ye~zafvHIO8+b`Q|@eL?s*FTfbkMzvgkNVuyvo9?R z)$-(Hir1}RUoDK~y*l+v`!Kg&@t)UL!UP3PkMheA7;`HpX6Zbi^l->37T#5?kZ94& zPTsAHB@KZCT8@-_CUUV})0)57J_5O<DcIF13kWsoJ+_ErE_EPzKXaqC_$m|FA-KaaC*8lF8!99gvXc z^f*(B$Vt=Y%k87W($iN`VSZR0_aFI`{c9((_}cL*sM&tiHCTK4Ob#S_yY4d{ct}oF z)8>-oEu<|VXVIN2w)dGHvLxmJNe=^61Sb*p`pS)0$vKPm5|)+Ly?5$VB2=M0?ztH` zyLdKC4oxDE{+YUk-=JTpN#%l#kv^)cu;k6@N)KhA2nSCk4{gVF@j4rQ{i7OJ6e3}G znd4%aGvOs>?kj2j;Ur))mE=*7BgQsSw9>s#dWZ4TuzB-m^A2Hd(IQ)z09uY6^LU3O zzZRiS3JBEtF9(9WMlep>t|VjSJ5IYU%+uZtYrP`r+|2Qd?jWZeK!l^{8;5nzpEJR! z{ICkx8Qc>QSNGLz?wl|s5LXHbepx6S5AiK((@**-7H@#-p6B*_q_1jg5B6;A!Vy%FaqPJenGBRR63#p zA=z{6fIaE+McBmhSLPi+pjVd~j8x!twfa8{>U8=I_+|4e6BOiavz0!G;+>eHH}yt# zNn}{xYS!76>DktWsgKd`E@jcjaTD7PA=xKyeHN=OcS;rh1HQ3rp%(bMYU$lJ7#;_K z5~!>`-%MwFJbP7x@)r$42j0hGWS+3tc@B}HlcF_e0P#R`9JxKFa>y4U3SV%kh5NSp z-|^u728s~QJ$BjgHm4wYu(PDX(Ufwia*o)MqQ1{`eyU{2a_b(CeZEn5dYu-*0T|}} zN1M^MNE%7K=Xo4DcYhY5_He2Ya1n>yJeD~zOpZ!&%)V)NgZc~xSi zw{B4DyhgDm=5vZ95mWrp~lZ`CuNN*m-mvYpR6svANYSlpCCx$ zqe$RpsPojnWp7#OZfxPgQLW%3Pv%tU6)aqlkmLX;t9YjPUs>AMtMJV4d0c@skRLpxOX zG-2oO5;Aah%YqkwPwY%IGQ6MW0v@uLw>*6KEdhYRFJ+hjfa|&#(xyx2*~(#MHu0)F zNA4##`S;v!wbe?@<&hKJsTIT=d1+0Ul_OcXAOc>H7Gzve`8Ng9`&v-V^0ZvKk0Uni z&S&q`0i0{X1z5Nd4JS!3Bz z9dE3wtT8+4A~lU1pWr28jz36hH$P#doO8ay_jRC{g@}DvFcu&hj=5Bxc zMMPtUKeLAzWws?KxRJD;rNQ_*`s;nE`F29+N@M{y)iB@j2`>2!vl#67%okaI z*ZJ*vVScCcscxESu{_mStv8<1p3#y<+W1^%%^^}nm=*bX4MloGf3;BdOEe1YxRB$w z#ShH4IS$XO)+{Oyy{ZijD!*Y$xAA9m_1H_fX-86Pcge<|c8Rujmx`Rbxu!-&&dGuMzb*3Tx$%fHZ%);UX3M7g zLptU&IQM;l!-%zpW(h&XGCJ_F@>iQa%zTGV z79DQ$nt4TEVcdlDml-TBE_og|`acvLVth7WZ?;04mFdArS25EQ$7z0NWU}jX!=@qD zvdvp!E#vc-%SGf)*n=K?RHsP|pYOAZ6g)T_7xJl^hstgVRtsO+maNJJmIq=w-HWzi zP)eA6Lylh{3EGhO8q_TT>FF`!kN{&z1lw|qM2q9{+w9&<1e`x58gy=D!n*wIUq)cA zzU6t#6x(rs=yCjf^?Oo1?VE642q=V}8=P+xE$lI{Tr07sJJdDm{Nd&PI3FA=M5Xn$ zo3(~CuC2(lGUg~V5OW_$316Z4t@-_dE{G2ZikLRN*j}s01r66efBLqi3nWE*Do?-^ zlhr(sFf9iqWi{Zad&HsX_z_7) z$8wq|S9{dyMcibm?>DP)Ffac1Q%{@A79bX42re$DBqyC^qHHE3ZgAxpPud~Qwqq`p zb)QCt9O7-Fe$7EC)uhS->&B#*Zg=d~S*MNQOAA!k%$F-N5V8;aoh`J?*U#C_^dDaH zJ&CF~)l8*?wbTm!GYXa9F2nput68DHZribE=`dCwx@d>N4^2s&S|<(Eg%8GsVeYWW zT_bla@{h-Fts1wF*`;4&<$|m5sYps%AuFV^u-j@UL zqRCm3Lpvq^=Vbi&>!5dBH2V;PNrnlb$Dz(nu|IXnlCTz;EMf`;Ok8TaTMO`gR_MO_ zV>xfnkA;dlL~HQaU-gboc~}s90Ux{3WYkU(vTl^#mSs^5Hl;W;UB#pXmji~={-Ri1 zId^;O+=$Nc>B*#FAjcOZzOJ}Vi|W1o!_nKgR%XYzSmENmq6s}j0*`+%FpWB)ROdJ=>NkS& z8G;Tj!xkx~l6IDcD=xtg9=wBQtPDE))_H8NkRV`b2MK<)G8(2=1E7|KhmrIfbktMk zLaxq29F;b+b<@gQ#8w~c=g6i!&me~hCuT+l^T%@fC2Q`g0_X3f2FRT^r}&w-39B8j zfjUjCf2t=@TH|xwO~=m_kKF>KXy76NA)7=e5Rhy72B1MH<1JS8cXFKk8f()r8PjN* zUIuLpIF#}_mb5f>0Z!<3U1k!JzeyY&*(DF$E`Ui*-t?m^zp^kCv>l*Q!`Jl77KO|D zyz_Kbr0B6&6dMEfEx;}?pVNB3*0*EWfXvSPE>1y}dOc~&)CF=9`15w2mbk@L%-V z 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 F^ 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 literal 0 HcmV?d00001 From 1f0b597e2fff7f6df4c368bbfe2af5f639c27088 Mon Sep 17 00:00:00 2001 From: junderw Date: Tue, 15 Oct 2024 19:43:56 +0900 Subject: [PATCH 119/147] Use llvm17 because C sucks --- production/install | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/production/install b/production/install index 41bcf47bc..1cac9e8e9 100755 --- a/production/install +++ b/production/install @@ -417,7 +417,7 @@ DEBIAN_UNFURL_PKG+=(libxdamage-dev libxrandr-dev libgbm-dev libpango1.0-dev liba # packages needed for mempool ecosystem FREEBSD_PKG=() FREEBSD_PKG+=(zsh sudo git git-lfs screen curl wget calc neovim) -FREEBSD_PKG+=(openssh-portable py311-pip rust llvm18 jq base64 libzmq4) +FREEBSD_PKG+=(openssh-portable py311-pip rust llvm17 jq base64 libzmq4) FREEBSD_PKG+=(boost-libs autoconf automake gmake gcc libevent libtool pkgconf) FREEBSD_PKG+=(nginx rsync py311-certbot-nginx mariadb1011-server) FREEBSD_PKG+=(geoipupdate redis) From 4498e14be8e3b34bcdc68167ec7439ac3601bd7a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 16 Oct 2024 02:51:18 +0000 Subject: [PATCH 120/147] Bump tslib from 2.7.0 to 2.8.0 in /frontend Bumps [tslib](https://github.com/Microsoft/tslib) from 2.7.0 to 2.8.0. - [Release notes](https://github.com/Microsoft/tslib/releases) - [Commits](https://github.com/Microsoft/tslib/compare/v2.7.0...v2.8.0) --- updated-dependencies: - dependency-name: tslib dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- frontend/package-lock.json | 14 +++++++------- frontend/package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 44d3227d8..a27bffcb4 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -42,7 +42,7 @@ "rxjs": "~7.8.1", "tinyify": "^4.0.0", "tlite": "^0.1.9", - "tslib": "~2.7.0", + "tslib": "~2.8.0", "zone.js": "~0.14.4" }, "devDependencies": { @@ -16789,9 +16789,9 @@ } }, "node_modules/tslib": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", - "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "node_modules/tuf-js": { "version": "2.2.0", @@ -30514,9 +30514,9 @@ } }, "tslib": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", - "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" }, "tuf-js": { "version": "2.2.0", diff --git a/frontend/package.json b/frontend/package.json index 14e040996..6a0d7dc12 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -95,7 +95,7 @@ "esbuild": "^0.24.0", "tinyify": "^4.0.0", "tlite": "^0.1.9", - "tslib": "~2.7.0", + "tslib": "~2.8.0", "zone.js": "~0.14.4" }, "devDependencies": { From 862c9591a17ec552a97b514326beeaf5af1d30cd Mon Sep 17 00:00:00 2001 From: Mononaut Date: Thu, 25 Jul 2024 22:33:32 +0000 Subject: [PATCH 121/147] wallet tracking backend support --- .../bitcoin/bitcoin-api-abstract-factory.ts | 1 + backend/src/api/bitcoin/bitcoin-api.ts | 4 + .../src/api/bitcoin/esplora-api.interface.ts | 7 + backend/src/api/bitcoin/esplora-api.ts | 4 + backend/src/api/services/services-routes.ts | 26 ++++ backend/src/api/services/wallets.ts | 131 ++++++++++++++++++ backend/src/api/websocket-handler.ts | 17 +++ backend/src/config.ts | 14 ++ backend/src/index.ts | 9 ++ 9 files changed, 213 insertions(+) create mode 100644 backend/src/api/services/services-routes.ts create mode 100644 backend/src/api/services/wallets.ts diff --git a/backend/src/api/bitcoin/bitcoin-api-abstract-factory.ts b/backend/src/api/bitcoin/bitcoin-api-abstract-factory.ts index 95c3ff2b6..e246f249d 100644 --- a/backend/src/api/bitcoin/bitcoin-api-abstract-factory.ts +++ b/backend/src/api/bitcoin/bitcoin-api-abstract-factory.ts @@ -30,6 +30,7 @@ export interface AbstractBitcoinApi { $getBatchedOutspendsInternal(txId: string[]): Promise; $getOutSpendsByOutpoint(outpoints: { txid: string, vout: number }[]): Promise; $getCoinbaseTx(blockhash: string): Promise; + $getAddressTransactionSummary(address: string): Promise; startHealthChecks(): void; getHealthStatus(): HealthCheckHost[]; diff --git a/backend/src/api/bitcoin/bitcoin-api.ts b/backend/src/api/bitcoin/bitcoin-api.ts index 4cbbf178a..b78c15bf2 100644 --- a/backend/src/api/bitcoin/bitcoin-api.ts +++ b/backend/src/api/bitcoin/bitcoin-api.ts @@ -255,6 +255,10 @@ class BitcoinApi implements AbstractBitcoinApi { return this.$getRawTransaction(txids[0]); } + async $getAddressTransactionSummary(address: string): Promise { + throw new Error('Method getAddressTransactionSummary not supported by the Bitcoin RPC API.'); + } + $getEstimatedHashrate(blockHeight: number): Promise { // 120 is the default block span in Core return this.bitcoindClient.getNetworkHashPs(120, blockHeight); diff --git a/backend/src/api/bitcoin/esplora-api.interface.ts b/backend/src/api/bitcoin/esplora-api.interface.ts index 6e6860a41..13fb3526d 100644 --- a/backend/src/api/bitcoin/esplora-api.interface.ts +++ b/backend/src/api/bitcoin/esplora-api.interface.ts @@ -179,4 +179,11 @@ export namespace IEsploraApi { burn_count: number; } + export interface AddressTxSummary { + txid: string; + value: number; + height: number; + time: number; + tx_position?: number; + } } diff --git a/backend/src/api/bitcoin/esplora-api.ts b/backend/src/api/bitcoin/esplora-api.ts index 7b32115bb..b701aa8a5 100644 --- a/backend/src/api/bitcoin/esplora-api.ts +++ b/backend/src/api/bitcoin/esplora-api.ts @@ -361,6 +361,10 @@ class ElectrsApi implements AbstractBitcoinApi { return this.failoverRouter.$get('/tx/' + txid); } + async $getAddressTransactionSummary(address: string): Promise { + return this.failoverRouter.$get('/address/' + address + '/txs/summary'); + } + public startHealthChecks(): void { this.failoverRouter.startHealthChecks(); } diff --git a/backend/src/api/services/services-routes.ts b/backend/src/api/services/services-routes.ts new file mode 100644 index 000000000..cff163174 --- /dev/null +++ b/backend/src/api/services/services-routes.ts @@ -0,0 +1,26 @@ +import { Application, Request, Response } from 'express'; +import config from '../../config'; +import WalletApi from './wallets'; + +class ServicesRoutes { + public initRoutes(app: Application): void { + app + .get(config.MEMPOOL.API_URL_PREFIX + 'wallet/:walletId', this.$getWallet) + ; + } + + private async $getWallet(req: Request, res: Response): Promise { + try { + res.header('Pragma', 'public'); + res.header('Cache-control', 'public'); + res.setHeader('Expires', new Date(Date.now() + 1000 * 5).toUTCString()); + const walletId = req.params.walletId; + const wallet = await WalletApi.getWallet(walletId); + res.status(200).send(wallet); + } catch (e) { + res.status(500).send(e instanceof Error ? e.message : e); + } + } +} + +export default new ServicesRoutes(); diff --git a/backend/src/api/services/wallets.ts b/backend/src/api/services/wallets.ts new file mode 100644 index 000000000..b20087ead --- /dev/null +++ b/backend/src/api/services/wallets.ts @@ -0,0 +1,131 @@ +import config from '../../config'; +import logger from '../../logger'; +import { IEsploraApi } from '../bitcoin/esplora-api.interface'; +import bitcoinApi from '../bitcoin/bitcoin-api-factory'; +import axios from 'axios'; +import { TransactionExtended } from '../../mempool.interfaces'; + +interface WalletAddress { + address: string; + active: boolean; + transactions?: IEsploraApi.AddressTxSummary[]; +} + +interface WalletConfig { + url: string; + name: string; + apiKey: string; +} + +interface Wallet extends WalletConfig { + addresses: Record; + lastPoll: number; +} + +const POLL_FREQUENCY = 60 * 60 * 1000; // 1 hour + +class WalletApi { + private wallets: Record = {}; + private syncing = false; + + constructor() { + this.wallets = (config.WALLETS.WALLETS as WalletConfig[]).reduce((acc, wallet) => { + acc[wallet.name] = { ...wallet, addresses: {}, lastPoll: 0 }; + return acc; + }, {} as Record); + } + + public getWallet(wallet: string): Record { + return this.wallets?.[wallet]?.addresses || {}; + } + + // resync wallet addresses from the provided API + async $syncWallets(): Promise { + this.syncing = true; + for (const walletKey of Object.keys(this.wallets)) { + const wallet = this.wallets[walletKey]; + if (wallet.lastPoll < (Date.now() - POLL_FREQUENCY)) { + try { + const response = await axios.get(`${wallet.url}/${wallet.name}`, { headers: { 'Authorization': `${wallet.apiKey}` } }); + const data: { walletBalances: WalletAddress[] } = response.data; + const addresses = data.walletBalances; + const newAddresses: Record = {}; + // sync all current addresses + for (const address of addresses) { + await this.$syncWalletAddress(wallet, address); + newAddresses[address.address] = true; + } + // remove old addresses + for (const address of Object.keys(wallet.addresses)) { + if (!newAddresses[address]) { + delete wallet.addresses[address]; + } + } + wallet.lastPoll = Date.now(); + logger.debug(`Synced ${Object.keys(wallet.addresses).length} addresses for wallet ${wallet.name}`); + } catch (e) { + logger.err(`Error syncing wallet ${wallet.name}: ${(e instanceof Error ? e.message : e)}`); + } + } + } + this.syncing = false; + } + + // resync address transactions from esplora + async $syncWalletAddress(wallet: Wallet, address: WalletAddress): Promise { + // fetch full transaction data if the address is new or still active + const refreshTransactions = !wallet.addresses[address.address] || address.active; + if (refreshTransactions) { + try { + const walletAddress: WalletAddress = { + address: address.address, + active: address.active, + transactions: await bitcoinApi.$getAddressTransactionSummary(address.address), + }; + logger.debug(`Synced ${walletAddress.transactions?.length || 0} transactions for wallet ${wallet.name} address ${address.address}`); + wallet.addresses[address.address] = walletAddress; + } catch (e) { + logger.err(`Error syncing wallet address ${address.address}: ${(e instanceof Error ? e.message : e)}`); + } + } + } + + // check a new block for transactions that affect wallet address balances, and add relevant transactions to wallets + processBlock(block: IEsploraApi.Block, blockTxs: TransactionExtended[]): Record> { + const walletTransactions: Record> = {}; + for (const walletKey of Object.keys(this.wallets)) { + const wallet = this.wallets[walletKey]; + walletTransactions[walletKey] = {}; + for (const tx of blockTxs) { + const funded: Record = {}; + const spent: Record = {}; + for (const vin of tx.vin) { + const address = vin.prevout?.scriptpubkey_address; + if (address && wallet.addresses[address]) { + spent[address] = (spent[address] ?? 0) + (vin.prevout?.value ?? 0); + } + } + for (const vout of tx.vout) { + const address = vout.scriptpubkey_address; + if (address && wallet.addresses[address]) { + funded[address] = (funded[address] ?? 0) + (vout.value ?? 0); + } + } + for (const address of Object.keys({ ...funded, ...spent })) { + if (!walletTransactions[walletKey][address]) { + walletTransactions[walletKey][address] = []; + } + walletTransactions[walletKey][address].push({ + txid: tx.txid, + value: (funded[address] ?? 0) - (spent[address] ?? 0), + height: block.height, + time: block.timestamp, + }); + } + } + } + return walletTransactions; + } +} + +export default new WalletApi(); \ No newline at end of file diff --git a/backend/src/api/websocket-handler.ts b/backend/src/api/websocket-handler.ts index d0e8f2cbd..75b3abbcb 100644 --- a/backend/src/api/websocket-handler.ts +++ b/backend/src/api/websocket-handler.ts @@ -27,6 +27,7 @@ import mempool from './mempool'; import statistics from './statistics/statistics'; import accelerationRepository from '../repositories/AccelerationRepository'; import bitcoinApi from './bitcoin/bitcoin-api-factory'; +import walletApi from './services/wallets'; interface AddressTransactions { mempool: MempoolTransactionExtended[], @@ -307,6 +308,14 @@ class WebsocketHandler { } } + if (parsedMessage && parsedMessage['track-wallet']) { + if (parsedMessage['track-wallet'] === 'stop') { + client['track-wallet'] = null; + } else { + client['track-wallet'] = parsedMessage['track-wallet']; + } + } + if (parsedMessage && parsedMessage['track-asset']) { if (/^[a-fA-F0-9]{64}$/.test(parsedMessage['track-asset'])) { client['track-asset'] = parsedMessage['track-asset']; @@ -1112,6 +1121,9 @@ class WebsocketHandler { replaced: replacedTransactions, }; + // check for wallet transactions + const walletTransactions = config.WALLETS.ENABLED ? walletApi.processBlock(block, transactions) : []; + const responseCache = { ...this.socketData }; function getCachedResponse(key, data): string { if (!responseCache[key]) { @@ -1316,6 +1328,11 @@ class WebsocketHandler { response['mempool-transactions'] = getCachedResponse('mempool-transactions', mempoolDelta); } + if (client['track-wallet']) { + const trackedWallet = client['track-wallet']; + response['wallet-transactions'] = getCachedResponse(`wallet-transactions-${trackedWallet}`, walletTransactions[trackedWallet] ?? {}); + } + if (Object.keys(response).length) { client.send(this.serializeResponse(response)); } diff --git a/backend/src/config.ts b/backend/src/config.ts index 90b324198..ee95be62d 100644 --- a/backend/src/config.ts +++ b/backend/src/config.ts @@ -162,6 +162,14 @@ interface IConfig { PAID: boolean; API_KEY: string; }, + WALLETS: { + ENABLED: boolean; + WALLETS: { + url: string; + name: string; + apiKey: string; + }[]; + } } const defaults: IConfig = { @@ -324,6 +332,10 @@ const defaults: IConfig = { 'PAID': false, 'API_KEY': '', }, + 'WALLETS': { + 'ENABLED': false, + 'WALLETS': [], + }, }; class Config implements IConfig { @@ -345,6 +357,7 @@ class Config implements IConfig { MEMPOOL_SERVICES: IConfig['MEMPOOL_SERVICES']; REDIS: IConfig['REDIS']; FIAT_PRICE: IConfig['FIAT_PRICE']; + WALLETS: IConfig['WALLETS']; constructor() { const configs = this.merge(configFromFile, defaults); @@ -366,6 +379,7 @@ class Config implements IConfig { this.MEMPOOL_SERVICES = configs.MEMPOOL_SERVICES; this.REDIS = configs.REDIS; this.FIAT_PRICE = configs.FIAT_PRICE; + this.WALLETS = configs.WALLETS; } merge = (...objects: object[]): IConfig => { diff --git a/backend/src/index.ts b/backend/src/index.ts index 446a6a140..080f21335 100644 --- a/backend/src/index.ts +++ b/backend/src/index.ts @@ -32,6 +32,7 @@ import pricesRoutes from './api/prices/prices.routes'; import miningRoutes from './api/mining/mining-routes'; import liquidRoutes from './api/liquid/liquid.routes'; import bitcoinRoutes from './api/bitcoin/bitcoin.routes'; +import servicesRoutes from './api/services/services-routes'; import fundingTxFetcher from './tasks/lightning/sync-tasks/funding-tx-fetcher'; import forensicsService from './tasks/lightning/forensics.service'; import priceUpdater from './tasks/price-updater'; @@ -46,6 +47,7 @@ import bitcoinSecondClient from './api/bitcoin/bitcoin-second-client'; import accelerationRoutes from './api/acceleration/acceleration.routes'; import aboutRoutes from './api/about.routes'; import mempoolBlocks from './api/mempool-blocks'; +import walletApi from './api/services/wallets'; class Server { private wss: WebSocket.Server | undefined; @@ -238,6 +240,10 @@ class Server { await memPool.$updateMempool(newMempool, newAccelerations, minFeeMempool, minFeeTip, pollRate); } indexer.$run(); + if (config.WALLETS.ENABLED) { + // might take a while, so run in the background + walletApi.$syncWallets(); + } if (config.FIAT_PRICE.ENABLED) { priceUpdater.$run(); } @@ -335,6 +341,9 @@ class Server { if (config.MEMPOOL_SERVICES.ACCELERATIONS) { accelerationRoutes.initRoutes(this.app); } + if (config.WALLETS.ENABLED) { + servicesRoutes.initRoutes(this.app); + } if (!config.MEMPOOL.OFFICIAL) { aboutRoutes.initRoutes(this.app); } From e095192968877184680eaa203b40a6c4f0111567 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Thu, 25 Jul 2024 22:34:52 +0000 Subject: [PATCH 122/147] custom dashboard wallet widgets --- .../address-graph/address-graph.component.ts | 15 +++--- ...address-transactions-widget.component.html | 2 +- .../address-transactions-widget.component.ts | 10 +++- .../balance-widget.component.html | 4 +- .../balance-widget.component.ts | 4 +- .../custom-dashboard.component.html | 30 +++++++++++ .../custom-dashboard.component.ts | 52 +++++++++++++++++++ .../master-page-preview.component.html | 2 +- .../master-page/master-page.component.html | 6 +-- .../components/tracker/tracker.component.html | 2 +- .../src/app/interfaces/electrs.interface.ts | 1 + .../src/app/interfaces/node-api.interface.ts | 7 ++- .../src/app/interfaces/websocket.interface.ts | 1 + frontend/src/app/services/api.service.ts | 9 +++- frontend/src/app/services/state.service.ts | 3 +- .../src/app/services/websocket.service.ts | 21 ++++++++ .../global-footer.component.html | 2 +- .../app/shared/pipes/fiat-currency.pipe.ts | 2 +- 18 files changed, 149 insertions(+), 24 deletions(-) diff --git a/frontend/src/app/components/address-graph/address-graph.component.ts b/frontend/src/app/components/address-graph/address-graph.component.ts index 6d40a8ebb..229199aa2 100644 --- a/frontend/src/app/components/address-graph/address-graph.component.ts +++ b/frontend/src/app/components/address-graph/address-graph.component.ts @@ -83,7 +83,7 @@ export class AddressGraphComponent implements OnChanges, OnDestroy { ngOnChanges(changes: SimpleChanges): void { this.isLoading = true; - if (!this.address || !this.stats) { + if (!this.addressSummary$ && (!this.address || !this.stats)) { return; } if (changes.address || changes.isPubkey || changes.addressSummary$ || changes.stats) { @@ -144,15 +144,16 @@ export class AddressGraphComponent implements OnChanges, OnDestroy { } prepareChartOptions(summary: AddressTxSummary[]) { - if (!summary || !this.stats) { + if (!summary) { return; } - let total = (this.stats.funded_txo_sum - this.stats.spent_txo_sum); + const total = this.stats ? (this.stats.funded_txo_sum - this.stats.spent_txo_sum) : summary.reduce((acc, tx) => acc + tx.value, 0); + let runningTotal = total; const processData = summary.map(d => { - const balance = total; - const fiatBalance = total * d.price / 100_000_000; - total -= d.value; + const balance = runningTotal; + const fiatBalance = runningTotal * d.price / 100_000_000; + runningTotal -= d.value; return { time: d.time * 1000, balance, @@ -172,7 +173,7 @@ export class AddressGraphComponent implements OnChanges, OnDestroy { this.fiatData = this.fiatData.filter(d => d[0] >= startFiat); } this.data.push( - {value: [now, this.stats.funded_txo_sum - this.stats.spent_txo_sum], symbol: 'none', tooltip: { show: false }} + {value: [now, total], symbol: 'none', tooltip: { show: false }} ); const maxValue = this.data.reduce((acc, d) => Math.max(acc, Math.abs(d[1] ?? d.value[1])), 0); diff --git a/frontend/src/app/components/address-transactions-widget/address-transactions-widget.component.html b/frontend/src/app/components/address-transactions-widget/address-transactions-widget.component.html index c1c999d6f..ea055a96f 100644 --- a/frontend/src/app/components/address-transactions-widget/address-transactions-widget.component.html +++ b/frontend/src/app/components/address-transactions-widget/address-transactions-widget.component.html @@ -12,7 +12,7 @@
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%0D2@EN9Rv8WCfRBV^4!!As5{QLN9NuZ z;ecHblJ^=6{p>f_%vyeX-chG5dppxrLcLw*f8LqAoG6LETbu;Dso-ydN?J0XBIlUr z=}CSUQTH(~0z<0qOVy4Zg?b2XS_27+#8gXQ5YT-{X^Es -6$mTHdMy}c7#J~Y(A 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

Pd5j?Tn6-+C77wk;eK~6Z1Eq`bvs!4Ou>qX$= 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%0Ap*S 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�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

v2fFS!2JVn{N$ zW+nM5*R`NZa2VU#%G}H0k&D7~i)D~5Jq{>$PIHnXGN%zsm;s4FrD!x1m0~BmxV1!p zg0?b43z2qa6DJ2k8{1eZpb5o%$p)qF_fTtzygvb>J<^d<@RTA4e%2IAD4lwfE|)^Y zbh;I_)`f-7Goh+2G;cb(@Ao^7TMR#Z3hw8f>mFb>l90Cs&tQIf;1NeO@rm{vGjslI zJx6vq%O>tWn>3|Hqc2d2SaAm`66kiWjB|#=xu0_hOiN8SjS<})c)Hdqj+V|ds_hpE zaMK|Kg7fU?(uqk18xOkj$%Sfv4a*raup^p7fk}3oOWYF8JK0Y65`*A52gbn4YkYco z!g<~?yz?i9Go+>62C!!VemTTARSy$6*b z$O+-mtL<2OQ7w)8jIB74JOd4qC=5YmO0=va99V0Q%=I1$Gui8`0;n|{#6{pmU=kV3 z>7+~nLlQy+j;7&$8{-+)@0j441%Wf7PgQWVxR-0;(2Tj3;xW*5;zC1M5Gz?`2=@LO zei{m60)~b2C+>-kX%hLstWkzZ;B{5eYJrm|G<-tcSvMS*Jq94H#CkPH5K&&w=g5xs zf}_?D`0@D|)8Ky6O;k}24ow-|Q0Pz}_d#J;!5niv=ly<%Pk~pi4G8?FnV_iS>?f)g zv{F#2;JkO3c8D4<2A;<&98Ga+H@HT;TgJdV)q{=c5%CaF$f2;&YO?E!K6^C&0vH_V zR^lc{pA>H~l1>Cit&wBRMz>cEzdGYHTEX$um{s3lbK)E)j&=a3A+)Rqh7X+Mc^Ly@ zNE6TN?KrmRhJ$lSL0gHafF#+t#F%T20hDkvhf6VN6I#M>;1)!vF$by?W~LW7$`S?& zV>LkZyojJ%^krHNeEHOgj60shkm9oU2hM(O@hIt5lZK$)dt}|y6i`Z`7@+_bj{b8P z`Z+LXxbM$CNk91~eXm@h2`4H3B^7`?|Z zkphg-J0=FC(tSA%_t$q=2`}Ao9C6Q?(aAa2*(--9yGJEFOKhV?ics@hqX^e%Qj&sh z0AN~-R^O;y9mf3D%19Ms)iYPrL1$b@EjPx-WDcp~>8axBsi7T;7f%PK35E&AVDyc| z;4npBZ=MaVMyFQW5(HP0VFu%r9FC(Mdtc%C^>!S1@f0ZE=jUe>I7%%`h;X54of4JqNM{@~Rsy!WFY;YUCE zAwGEh0p5A%1@3IUJB8oYq_MaZ+hvRmjG(jJL&ki?7 zm7s48Hz>EBB@DM27;>2?tOw@VF?!$Mg>A}OpC<}yLzIH)!1H;=Icr8-+fibWl8T1x z8`N59;3=#3+HTtA}9)H$G89GZ{ssx_$)sAna|-%U-}Zh z{N*p>JAd#8c=dz#Q0fa34&pk${KPwPzu!-s6xCTqoUB-`sN=II14(05kXcHrAs#9P zFJ8P@F7*`Z+E_MG(u277kxaD&(t=CmDG}Ke7>{!-;i7Zs3X5l|wz?vyGA?h8e$BWh zE6*7^z=G+c|iq06uvA8b{&2D}vjt;eNjd zxl8s8b{SK-e@~kj!#3uh&*$^~9-?#hX#ok69UMg~R7qFk8EUYGTVl2$sG*#bjOwV+vjWIve_fBgt}{R61l!KktFnBf7_L7raqz$e;h1+gl?%1j zr4CHQ!Wv{>v7L}rBu{3Keb{L!53cuoZ*ddv4JGpTu-x;q3XP4cD}{MW6;#(e=A35n zg}1|`KX&Y~h~O(<`3gSwxzFM2KlzjRwO{)+{CB_ls}If#RfW_7--hbdAkKm|^V3!7 z9H4p&>Cp5w*?7zbmOW73&!9XEDQU$_Udm(P@-Ylc^L?%X`33Qlhl8aS=X2V}T=(?b z+xkz5107d9GM2+`p{f%DwuUZriXvQN=95TkS@|??Uq7BT?@M3$5HIqD5v^h9R@mu_NUwe5piH-PeUkK>T zJTA<1Ub%7kySXSoM5W}`5Txepy5 zalK@QyU#&_ip_eJJ%ULE)|bJjTM2S0~Vy}K~sq9~q?NIVdclGvaR z1SpNB&qs(@^F0+Q7u5JByaVK7_m z(Y$UsSQlI!_p+S%rM7Uzu|b^;Yp1I|zoX3Jgh!*KGXH$^zEJKfM!~iiYtX%#Vv2Ne zC;h6@tvoqgN~ep8t}JR}Q!DG7$;0Eir$k{ELZ1Ab?vD-#C(=8`DS18fj8tn`!-f>o zcI$Mp1_BQVgl7s~NPNCDEh85*g)ghQkQw&Vh->A&LDvsRxSBR0Q!d$|y46gVZ=I3vsui8LJU8S(}qXXL+;e*;EEn7Z82g zEqJ};9J*!f7?y)(`gYnXF_9UKkOGN?HAghjEx%)~FAIIF8Ep}SIJpRaOAcYV_g!)8 z>lt6@!SE*J**LJ3y6&^s=PJhNTe#M+L`80PxgW3O7Fkgh_p>j0%fi`?K*g6@S4_ur zTW9R+`%U3+-VbJU_?5DRM019#>h|IV+Hu4XL>p=j+If~T(jDg6Vdn&fp|m4}A7e%X zYYdbY&FS0^!`*H%7_K4s5sBtgJ&q8AjX_r_@v^A{;6T0G#FQ8km0Ib-5=@KlD`+%@ zpIz2qXg@2zN#S1DMwvcd_0Se4;S*O!v7-MfJdWiD?8+0CSk1@iXTC@f+hXPIU5Twir zoXj^*he}b!6Z68|EzrYBTOlb&b+8U8(Am&?2zhL>hAeUI3iku+CwvG{1)d^@%oB$L z)&aE@=iv%?e+C3NSl5)vEPHW0p<)_fH3o6;Ku)G34;lM{0%rr#I1s8CK?G({iZDWe z^|L4Khmj>7LmsjC_YNs|Ds=;tY6v{L&uExZoF&eP9?&wVfwk}F1ZL1LAcEQ&iW++F zOFX#tyc7?CE=xMFQb4a-7fM+r&W2@)?|@QuIr5X?U`eQ?$Zl9*N+TPZ^qXmLMk8e` zj$bme)4`TPti1o+V~-S%wRVn)a}Kzx`Oij)9!G6Xkq2G;;cbJWqCfX&#wYXh zl7usT27;M5+kyhG%E3v9YiCk@RF*hdT~KD^oy&}V$~jLAnY=d+sJ3vjnPQ%#Q+Pl% zP-&H&Im`r1=VjQFJl=3<$0O{QJ{XuA9^Ydv3aNoLpKzEnx=1F^P7|gXZ56KcP7=mK z-DU=D6}a^nUK)r(kLTm%Cq98se(H`_@4bSE<9=6^9@p+ZICw4o|0%p*IO5B>be&%^ zqOk;?I?qeTaj;>p=!1?(#NaDX))i6|cH-jr#&*121jWZG!!>L(o~elt z5dn_jnE{@Wq#?w3{rVN&fAtO`RD37|%)((NzhL`WWi`&yn=&K(hxy!NF0^J;t z3ax>_9v;q0i+sJnQL9FTgGR49V{+UaUM7dS6CE8lIl|E`B!;j)nuF+Jr4Y%&1vo_l zQ9ccr6RiYcq7ZX__8vnI7Qi{gC{=Nwu8e4mNkYk7GmS~2*cRO?j&g(d9>Tfjf#c}~ zsuai!F;uGuO+U7rw~&3_OSh#+0mF?}zH#x?mKV4Rx`x=~(1Mrkh@tYcVFs=sL{k(G zkAC9y>(}c{ObsIU_z;*0Yveg66pqSFXi<%tc}^H2S6Yu6;-j15>;r%Fy+6e7|Nigd zlka{CpZV;c!I!@BW&FID|QIs;jT;i-SFY$Fr3#)7t z4R?&uqn2X*9CgNwTyzT>YFk84w!>B7!v782&N9}uKvEOBqRWEBveaR$OIpK+?<@RBjeaTYTQY4j5D zwEGV+)K9YnEC`a&Fw?wvdBd;?6NgGg(;C#0QlU-ZqDz=$E)c`|{tL6oF(wL1;JHVS zy^h;dm4X#^o1ZUfjeQ2mF-7vz;Nx89g)8+Ds(5;86ymebWr3iFC2dJDMd1`l&pvSS zo)0RIM%)N9ut(Oaq$9|xA7{{QYWBM1f^-K(oQ0_II5!oZt$iZs7-n!UD5arR!}Ieq z`-LGSEJY)>hZJrRa3CM|avF!WYrWEh(c}B6@pA@jxv8Pf`g(?Ao4rK$2^(|Ky4^a) z5+TNS@qB+qZH5;`<2%ckZr*Rx0UJH)Pza9Nf<_q-7T&uBq8=IaQrJ6)I@E2~v3ffg zLn(`hHb_5-HISM2i~&+5F28rigM}DhrAAMJuKhICG>y2SIS1?{IZzcvcMk^+kBv$h)DHW!}s5{dqi?{$kuKEA`ZWj5f!UzbmO3nlV!@<)J3Rk!zglbf>Q}#tU;3qA!cYJ7 zPval_gMWZ;ee1X4yIe#WI(gzjesoJyA!ZjLjlY36-ozQkTp+Wk%7uLMxV~L;&aWb! z-6YvUz8t^*999 z?^-}EH3J|Q$EGj$wY-6m7Y-CB=E}~#V$ApZPJ&8i9m@KB%3)nnPr?yZm(b-SR5Dx0 zbvdvh_aTyf3Us61F4ru?06QOT4I=WO#({Yb08^Ng>6R(R$l*%dN*NJxi4e%91Dg_| z9=Am`$N{@w(820g;Q$2>>_%r+DOS$CLu_OA1DUxM%znvX*Y#{ny6bJ_O07I-e!nTg z6V;F09VHvFlFtJcML^_&HGjxi-{^uXu_iHONoq>T?3=Eg$nAT4_Oe-{6co%cVi1-D zCm;^lc|SR^=DcoE<8Ja&4&kq>KtBK1+IZbGbaCQBP>4Zl#5}CXhIGxdIf{#OKhV4U zz4=R1IFr|k2Rba!H)4;ITU(Q?}LTb8ql)N+mHv?GlNh5~xDmYqb(53g*u3-*c7J zGsC(B8b9(P>7r+@`N-T>4$_nEkaQC*%51^F;#T6c=LpBUmKd6O#<#JSG{=hnG2S~X z%kf$-@PO8ih8Hj2!P7hM;OWH+JhdBcrQtw9!FHPVe#d#gWA;fLt3tg%P&lNEft3x4 z*-D6SEm8ZC31E}VDkiqp)z`8xJ53yhD#hdJ5G8J1f~jOMsJ%NIXU`>_y7-DK&=1l zKY2lGk=<-Pa!NIGHN`OJJ@$4{HsA)T2PLLBC^lk`i4h`hjxhnJ+eVSuoE(HP1|x9Y zkrkTJHkJLTh}4LTQzyO>bUY^IC&hWn*cQ|nLgn5cYvqI>9HF_NCMwxEh&p?ZsEQn9 zi~;XJsf`f}LJC5RfTRTWKM}6*j7Nx}utP~>%BYOEZ(P89W1v&;x*Wf(uc~bF0%qhG zFAwshC`yDvxv1sm1W6TG1dNF47!(LpHq!?t0If!0RtUG7`z5O~27?*nvO4tnOfJF& z;~a^G){HHfTb!`!U|@-GqzLM9pq2x*G=8VCCzh;VNTF1hh2Zw-`)8^Uk59B}37o4* zV4~+3=reH6GUL9qd1BfLFQB`a!ZMA4;xvbKnv~p7S3SzLU3`fE729bZ>xM0nrZZkJ z$zpDsRuuvey3{NM5{$GF#-&KqCMk@byl3GNk6=b|fa)5u=3cF;xZN7w{p3sBKl5qS zR`A0g{0OhifG!X5hS&I~kLsDtIiW+B1HG%ld@e%hA}BCEYmj)BuIEm1X%G)={aMw> z3m@ZLBF^JDcpmUYNV*bq@(e1={kA)T!vlRgxW_shfl+IQD^M~+Sz<8q>eVa!==~q! z)d%lm+Q9ABLVQe7;O%ycoN>*1Kd2O<6~n-@WW3KlCd39>EgUq`$#)Tz`#QfFqkLjW zXg+YB&p4!Vc(I=$@rdy%q9l1F!N6C4-AJg7d}79EuIN@L!As$q(SL?2n^2}2!bfH7 zYoQZ&x~<=Z5;0slqZSdPs3hr36b+;UUD>n9vr$Aqg_x<<7WJrwpg^1iG@qb5NsI4&;ihDcz zLMiN471)^Q*)w5%6~+$suF8tHhl-=y#28yNRETpAA?3iFCtwlLmwh}Hqsx{8486pu z7KIN_oE2{{1Ds|67pPRm8O0f`wu;c$#QmzOzzC{IoKGrr3BP5D-JSPW_5_nmJNQiF z(udF#>AO6TAW^`2j?rWnf~2gy%GaFIfJ;Vr-Y1{~IpeArNrZ?1*zVzragZNqVsPzY zpCAdV9NMWkrG5Vk?`TH$@P`$J=d^FMn%Nl?k$b1Vu3ML|bfYjf6MJxNC- zW==-?^d7E!8#6>%$o^o|OvR(FiyAc|GKw}vJ_ZgyC=Njh8fH*B&P9VP;mnqg=LYbi zP@6lBiqC1)5^;G&iENjZQJ&{0pH87ci0{F9>zISR41s&OkZ{AG;M3y%=K1nGJKEEM zrUlTr_ToVybBb=X#Iq10!-!!}X(33a`M{^aq(i)-Hs%(-iBf;_zb~bpMFL6=wO6wd zcmr4d=%QT>!<7a2rYpxEhJ%?2n1xR`dG|0rFI25{IX&W^&*ejS%87sNaeO_llYrECm-V!kUgszXH^sQ1KTWaB=aID05zmp?PSouL1iXMrO4 z#3w$1zwtNz2EP9FpTz(4KmI1Z`OR+vPcJU+Ls?DFt9WBK%I0c5Pv$0Gotrt#*(htd zpexH#9Gc0cDVHeS%aF=`y!Xb{ZES4Bi|V>X*APdyTXBxDRNz-v%oSt*_Vp)TeG>P? zoEQ)stuhnJ*6L;Og}LgZhZ2n#nn8te!N%vlef@aXycaKC;OBq-=kZfN^&j9jfAfF9 zfAin|>T<>ec1RwEG$QGEm30uxf)$ti>O6piLXdlx$0T3?03ZNKL_t)l#UZxPaX0#S zqwd&y{KiXf_{LRM8ZeHLr5RT$3hh-3f z+8)4N>zC^Ss?0e~7e+Qu92@(!hDnbyD?VnS$h6F?^&Fr_^LHaI!JNB1bSb24vD26X z1%Z@Y&SNcsFj^S?joEi9&$p8!M?6Z`ge~%fuLeDjD{F6*bsgjS%m?R`mO!kkZORHI zkW~9#9F0`LuIqb2*oUaVA2Qq4HMpRrh54IXkmjoy@Me@xx<2w0o35yE@=xL~Iap4Y z9>3e+n|6>wf-yLRtiTi=9GBa#Jklakki-VXgZN@niLJt!jclS3BWP*~hgA+Hz{7s- z(|N7ewPdZE&i;JHmfIJM+R)7P^4(CgaAl$jgiY3!3246Zf~RFh_RixrI**euP&^Om zMg$q4W)Xj&x*~P5PEzJ~8y#w?(ogK4QJh+stCkHGS6@N`Ff&|zl`7=E|Lzvr59M|FA-x5N1!uh zQD|lig?Ok1^8Sxz`k0;P!GhKltrT=3454%Y$aa2Ylv0WzvZ-do1R`Bi%Z<7nX{|Mw z-&Z5j`CiN>tlN6721yxCmt`%{DBAngdbF2df)C_&Pqx?}MjtqP43S13Xv}r=%YY0v z7h+gSJQuOg&@4Q{A)Z8@LSaTWdJl zftT;RgLhuOgBLH~L8~qHI}NOH?;U49an3vLXQzIXE(5Ah(n$Z(sw9v?IbjO^;*_Vn|5138dZb!s__%rV384c?Jm~{@EHyy^@ zF%e_~g`ggF(R1KHKL?6T)B`9em^}o4N2@rVZa8PhnKjHDAvTXGDXcq6tEjbM3h>;Y zL;9dGR2ZW}YQu3np|u0kfO9y`bK?2D<7h9p*gdg}THrqUvj#*8MxPPy(Qat9L03K^ z*EI`4g1Ny*HWVw4QUXbj9T7C?P!5tpA=)?AY8AzpzM6hRLi{xPh+KAl?=~mUBaTFB zIKZck$V&IQ#1G-P54`N06SWi^wIC?ZhJL?e&Vi>F2Z}1Xg`*Yb9PX9yPL9|+w9rA; zbDCibE2{uxglMMSvaiLe)jWs`s?hr#wG^(KdZAB5wr)}7b2HG1hF-3J*%31~Bfq}Z zwkS!?JuieElY?B=cd8J(h+0!lC7YV($l$%~o5-cF8MQ@`5C~;+zm$T5|G6-u#19V- zDuTfvrJ%NhLYSaRiaTs{t~mw$?9f(FYlC5;TMsvr*Kknwxdak68LL5B)f^M!JTcrE z6~IQWfbKQL?KooCJ$Rl-Hys5q$;-;P4`<)8P^zWI$SoBTdM2}K6_C2>#xSYHdvrC3 zMhwFo6LaRqsY}44Lic~cWlyoyGbmb?@rucqP`QYgO`+QG^5rM+na@VgcZ`91KOy%^ zoQi5h8@R4Bm|r&X98AfgQBb%_!D&VY2`*GHbKLKD#+O8&qA`kOvMzCRw5BNKKq-RP z&(9BaVMdI(`NByDg{VFv=3{eQdz-;gYC|C+eS{@E&LJFVOX7>&@xccl;QK%L0lxpk z@8i|$&*8;8pI%wQMHEd7Zl$3y19|W}D8#t;v!lIhHRjUiHTM+S9I=L+h&T(MhFUl{ zquV+S^rf{dT4@x5?B=1@!ovb$S| zM7#h~4EG**@acwH8)>(5o$%YyaJwD2pC_L0cbG?%hq|LUP?uq#0*sPaF=P~=RINDY z2^$0F>}W?rEfwwM6VCg@_x{Zv;*b955AgZVe;!}>v!BOT{=%QbAN=0$;Rk>C9ULVb z_2vet6|LSNT2@r=>V5mf*`2WqeTnaKo|10=(fcKqbZ)vB1!-s+dzi0>bS2X`5F`TO zT10w{&HX(j)n^zH(Z0`Gr3h==9(8^#7m;EJG|uj8iW!y+6}ke&4!rY)hq z5jmBE)j)#JCDI9VX*}!QJNk^F;WkYKYCieuWNY);9;2^kL#PBX3&DG59jLYNe86mRq?jwv=h^qqn82W71=8MBF)-nyqoM*c z2KdsqGrsbB>b>u17YdQr`G{*??>*#t8KEIT+X<1wpujp~2$j*zGd{E7GFvPpQN;T_ z&pSniWswp=0!o#LgHQ;J*Q(Zr!gI=a=(b#?MyU>J25uz%Q{YTcjkU6Y#q( z6x9V{ES^utz3j_3BX@j@DLAd>9RakRnFMyNzh39*!FA~%qXMpUz^puXv1T^L?VM=TMHC9wlk@~K>MG(#z2lTGeYqZwiT5v~@0 zK*L1_gg-PGmwPHzDuM?`+V$r|#9Mj9^ayk2c%kwka^K3NbPhT5qMT?aEHvQNWw#ZK zvNAdK!EL^sbn);-ritJ@PpXJ?ArP-ObhzrTYNEH}qkmUkKlM{Ti7$Tf7x9HJei6U? z%fF28e(!sM4I2}c?vblt#O%=(?&g@7s{x;g#D&6K$i;nsPLs=!AiH?m6_<-dE%jr; zUB^9o$u@OaD)B*tQbcXd<)AF8(P&v{+wu{Dowu()nX~hYT96F}k-|gRTmzom^i%{- zx7+&n=46J{5>>nv4Sk%izxWrwhF|=}U&I%_@CE#r|J8qu@BW+bF2`x2h_{H1qO{?3 zNa+%l)mnEZ^>V>xfw9GP%M~~;7;d=^nB?3BH!&oEf<0+aaEc=**m5jVQX;_8^GJevNBbONj;# zoj0k_t{2D8IxuAu4gQed6#}xT9oK=}wi0zWJ+}*6WV`con3vz#xQ#0k^fg0Cof>2Bwq4c-NNaY^e?EcJl<;QZZ7Iv~8gvC&^>nSfd17>Qs|4+BjQF0NHk^uSXoy#Ev(F|;d%uHUssQ-Cm{xehNd7ig`J83XIuG#nQ-v7Q>4 z)DjqLsGwK~6QU_NP^!YK;`t0bV--P_!u^b>M26DN&d3f2nnu2|BL#oaAXHRtUL*2^ zCu1={cdOGyM&xKZp+v?Cza1WHh!cJ2Zh^XAIm40p+h0EeJrJs645;{OXwD1y1U&C1 z2EB+xlaj+?(a1|Q?rU=z#5$zEg3mKt(&F$E4eT-Rs4A%Wccrji3&Gpjdo-zQg?J;f zH5!0wj@S1YxN?i3WhoU>BDdK*a@dPB6mOX4B;LD2JaWRz5e;ykhWm4mJwk!AAVfi- z6M(5hxPC5&n#Q_yPT;^1ZW-dSiwM*VtrSR&W?+>Vu80F-jzbmo>BSmKiUL~sY^Xqv z3$i?&^HNYtvqk3-Vu@>o2yvyvZieuq0La>{u{NE{iN?Ex1QN%jXfaGSu}}2gmwhK4_vd+{ zj~*_o@<^ymqF-P-oo0qj*BZTZ4^J^BmaBEbaE`vCd(796dYxxY!bw$QA3yICwHzq* z1~=gT{5txMwP4u5`T7}0Yq%Xj1sDztcbs$Jc^FD*DCNMRAz*#|-ZKZmx2Q>K3|P?` z>~#1X5#gbV3dNL3*MAHT;@MTyR$`q$2L@u0R&QldJEwUJ7f0j*-%rMhcnOE1lBS3W z)rzAPI3fyWT43;j5EH=#XFr!Pc#;-n9we@+igPMzxuM){z$|c+_4nK+?)Q`WGGROw zwrDaP;5_3T++((=AN!1QIRoaNdK^d8|NJgR#3otSVLSgF*qt##RBeFw zhy@@z0i_+Rb;17q4AGT2Y)niK@t9NSRkWfAF#3R2L|*%dyyZRy?)N(?<3Q$|5RcEi zBCJ}AVKss*5&}XFGK=8OHP1A1iHj&u1l>cZSX)7nH28%$B3#cFS;r!9nULa8kMo6# z12&3`QpR(@DA)3WG=b5V)i)r8bw+m9P|}S=V`P+pw!3NS3gCQtYiDk zHxT`@Lk~>WCP9ZINo0mNbJ{?yg4?a27D4ZhF(^Qz(lX9$m5%XvmSXR6Mp#8;h?W+0 z75iD!XVd{6wSLpOOcCm&7Y=0c+MLNy*uv6mbs{ zrLQe&)*kWUXrhpA@IKIHm?uO4Lk!A`2zxh-`jxUMEJuyKC)S#|>gYJ)491x}(z#P` zl=GGtkVpUJJWm>T%Zf$I`XkR_yZ2QVMa4aY@ukWV85%C;j_mERSAQJ0c;9ZZAN1&b z9mf%$m;JG78n<8x+DEv%5u#aDuIaI+^f7QqtOMO+cs=0gl^QM-FAkCd)Of<%3MHB(eLP;`h z1@+A#Rt_@W7?Z5#Yi4@u8s2R+XT7K-HnQB;7n%Rv-QZJJpW{J^$EHIR8FO9442OTj zs&4m54*$3F+#VX`kAwWJQ+2nzfvqI+rg>fWGj+c(mN~G&9}hd zf)+O01GVb`X%GA;F<>5?!|9~<)#%NA-!2hJi9WMw57?_Q!jYD)wnT`=!EI+VXY|0T zXCzQy**r>dhnrz=2$pzfK{hBO$8Tkk7b^A3cBzE|UYAon#W>k;(0o3bRhO#u6gy0d z?;{%I+ZkV5#m?vSm3ihIu(|n)n96}T=3I`LYrK^8zTD~AL|s_@%>0@o)-l<24|KbL zRkqL|T`%df0v+b*#9xDiL<6pTdb-^a>gULJ_SGClqN9Pxm0SKg*{C|^gwKU%({M@i zdmDYA&k>CWjp1!}l#N-BV~!;b$Q;3Gai109y7S~`wm)m``^x%NwS@DLSi(aqEQd^` zpwDQeuk}XT$|ujkX<)$P`3*(6u3>OS3;>yLrzECuph(Aus9^TF58)IGB!wV8V_BGV zsKDuD-|H{&iv06j-zKqcDfEt}v!YON9>R>d(Dp(c@+O#(Rv>%d%;!(F#UWk<&OB$) zbSGPg47d}7+bA+AH665)nSIQ>ULv+fDpm*}Y!OGahA_Z+?pF>#a~P4%@f20a%L{IvSGQ0U#-MINkrlvdQ|eRp@Y!HyuPPt3$K5)1GP4QSoj>y zr`tQ7aA+l(h*K~y*FIhA0TYjbj|JY=n_x1!1*G5AS|h`rZWVV%+L`0&H~=lNewd>k z4N?pGAhF|&b5c7B#6TC1k>1tu^zsRS;LL$WsqjLQhg%RGn5DfkYA;b2&S66gbn1F8 zG?o*XOJLV6(1d0KW1R7P*Fa2y^okTLl+xhpkeUN+em0fJ$3_7LSEdp;=V*9G!%mz+ z2;c6VS|g)gbV4jLN$1%yj2YicloOfD>CTLDENKUdR-T~n!07rQ0(s}TAFaYGP>upv z+=qqlF@VINsN;Z7U;Dl&iCT$}^=y(x{$#k8iKMrQDY^zI(+m@aDF!d$R;*g$&m`X~ z2NjGUXmri3%x(<_R0;>Fw^;aI8+i>Ho7d5F7tqnHk$c&>S5*p8Z@fw7Ie{Uo*Wks8 z;_SqGPVNm8y$_7pQBb#VDqZeed-K`K_?bETS|_SXi{ z9Q^Y+IIdt0`p!e06Xt@jB}v077i>3T4^yf;=1M@WCn3ZVLczi10jZ%Js?I) z8RS9*t57kx%&1v3)^(K%m9~U@@W9RAJ=ULS?JC@&zHhDJop;{B7#+{gukrr-@5dhM zwh3Nza$nDfxqoH-cS>`Eb>EbcK$l3N_%Vu-H=D2i?aM#t-zhVzX4?DKxoxWJeL6etQ_ z-k$KucRqplpI+cqZMbX2IYtar64lMxTZp%fwJ-L$F$bd_6xnibt)biwzy2L3lj~TBe%6^e5%;ymh%3nqB{G&X>?Zetqy$Ah!m&ur zp&8gqCB=z#dJ#T{q*NG*KjF^QC2Wfth8f+t#+k$?j0iGo(`%3#bz^5$bz~L8;~uo=EftdW;&BbCQXfGV$&llWLU6{f zO}f(SQKR0M1|(_54aIfsjY_gwrQ3hdcwwqg#uzm^z|$OajgHPa=A3~SkDgJ8N*%Tg zG2@)*K2~qA)kd0|l1LPW4Ru+@fz~o&##U5SYq18*8VGc==ri@+QIERXN>Jkz(8kASRt!NN}ria+6R@B?E`eUj_+6pd&Gh1ZPG<$}gGWrosD6+8-;?Fxi zJV4(LYrNt1Hs&epzjH-cr^P;-p<|4t8sBa&S%>T#yhqqT*hrNr9@)#V<&G_c>k{sfQD zM~dinAte(vXf4(^U`e)B)a@BP6a5Lb@N z5PH`PnG+pFZn+@X6M@W}OxPs{+n0;2X1s&tVE}9WP?VL==Xj*iTuCv@h3h*`Wg&&$ zh={rVJK6BN#&C%2Az~>0Idrs3bj@`*d{OcFMGzvFeB-qqUg{lRnNkI{(os$$uVtpB zT&{CoyG!=E=(T>L69dF!QVCvaiCV_OEtwhJsg}-~BZsS+!#Mhe(#4j;;H@mT)c~J1 zS52BjHMux0GIB(VF6FQ-?7oHN2}$Rj7a=3BC&EdZgMYv7ABl`cI7#gyxb(~ah-2Z^ zj3NbHoJYIlN|kjVWIi3JUal8J7KOw-4BK+cB_RRKVy~ogY#Om&{?oDHqnAAQ%g{Z4 zUZTL4P&Cna=^(raSG0t}8`(^>bivqiT3^L}c_sulR;Acuk-YGT z&$UaePp-F`YJb}UX*kv(2l;(LF~&17sSc@i-A7~gB`Wc0K@hm0dzWa3>yOd}A5K9Y z+>?Gnhu~UIGkz;EcKn0FW)>_(H@fd33N@DSZ;8LL9XcE$$8h^GpKoL40U=~KMHe|J z%eaHM*1@!DEpp?kXNGF-PmVtOiX6Bi663r=x36O1(BqNJ{Xo{fa&^^ID;%DJ>$MuwORIzD6S`er|^EyM&qD6SQfsoE{y81iObCYAwCL@m8*PfilbKC z>anN+UIkMfMe_VI7g98xDoSF6+l08H%D!&Ss0}Sgyw^K$j`KokiG88g8V+$bOADh( zAbEe~5R_sbiH2BsL%HuxW_ObiF#7<8hXaa^Z>O^kW{?qhde==#38LAc$v{?Im~+sD z8O`Ms>t%y{MUQcPDS))Q*w&qGKz%6#sG?W)Pwou(*s4Vazo{yJrLsD%ZYr9p%!s##oJg4;3p#`t(6ph{hVy=h zd64Ud8%d;vNZ6BtE2khPaL8IKGZ#S-XAHs3;<_LQZK5l3CF&|?b5f~K%mzRE6dYJ5 z7CDB58pI#J&`~4=f}-J+cbkwgF**^Q!U4bS*gKzG5E0hNg&jzcTP456Na!aD`?nJcO~YyziGsB?&3 z%ZdaD(vd?X1ZJ(>LI5?xO*_0}2AmXbh?QkJ8~m~cY&oHIX0!J*9D_%FLah>m%8ZFH zyF_e|PQkMfnVc}0%(pi>gW3NT!1&xJQaHsvxCr2Yz$^zU*6{T7k^&4tQG=u6_Vk1o zFJ9v1%Xfm}V9y&LPiMBi84oJ5&L4g`6OLhP_`j$DNpaF$yJf#_GC#|`>?lTaj2`!e zmT?!%;jbEOrlK#ryBSk5{kW$Mf@R z%=r$Er>D3e2Hb8peCm^*#QX1k5GqKd|Bx(~SebvT)5p`UpmdP-3m-c}^qBXyqr%wG!vK zBY{k+FetwN!yn>z|MkDd7r*c&eD*Vc24DX2m+?>kuYZd3`NZsl!}$#;K3V2(WjE`vg9}7%Za*ALbCRz6d#8$G{lnwm!8gpX>|*) zZ5m3|6)h6a(V##sgqv}uRqlsi?%45BY`P7>?PWElg@DE8p}c6K`T z3)VSpUl$Fxcre=FBx0MB7KsqrRjHVzV91I4{m%D9GG-wyPOzdI*S%dN>g>yB&8WA@ zIBVn?hOu|qb10?oc_(3kd!|y9;-E-yPH4t^@m%Lz^D`sQE|gqR#jpt*cM^?&~d*NXWl}%+w7saxd#S2dwn;-!OtfTIQe{d zOQG8P(ww}a@kK%rkqhZYFX-cN>h0@eecf(1{QS@VM|khOAK`ERo&S_hfK3QUasoI6 z&wrNpOD)txiyKUzO52p)%$R_U&2uf5ua@-}<>1%k( zp@poxbqWMfmWy`fb#iziYcR#kv=l3-uHokBbma>VK)y5Vk-~;l)5>mEE<#iu!q{D( zW8yr|K$5Wm5Nr5YLzVR$xyP_|Iog?VPPbhQ<@fXH56>Z=^%`}-v}pQX5#D(XRO8Qc zV4i>8iP_KlUM^yTcoqX2mTSOK8%Bn^A)7WJCK0$l-(h1ynl5oi4$!ap=i;)5v;0gs z08C=WoD-w>aDOvzJXPh5>)9FtwY?@}w2#qAv(}c2%RH~8&=KKWn=%tHnnmG`%;znM zSwcKzs|9n=Eq*BJTX9X?9k=6%{rWr~p3QvxN{#!k^X!sj1fjrWx%}7!3?=)fF-7Af zgaJt#2x1p=7XKgi-fiiYExXEVy^oPO|FySD5)!Hsfske2@CKMC(7_fMad;nJI08Gu z_N{pXa|rthh~Ux}Km-_Z2pFXW2R zT4OKYb2VMC$OhH?EXoo^V7F&eHSiKp+z4srhK_AzniA(oQOToiYSx!xo&yJXF2`c6 ze@&V3F$2dqFk>)_R}D&Ar)FD%`-&ha!iQNGAtB|Mni?1+aGn@yU^nlW1eIQ@Ni{AL ziEebBhdzI~v%B0bB}StYOzuWC9!kJKg32YlYMsC57#vKdT&k<`thL;#;XN11^RaK( zw+`ZEI@_9`?AK5Zi@flcKhEdPO)bhx>Liq`{o0 zs20rYb`0bkn8(4$zO4h`J$RlcFcM7-@naIl`L+?s>_skc3D}tIOcz}1m=ap{-q1Ro zI_JrpbDM!PCw%WqT-BW}wK>%o1d;4L=rXoVO~aNLLWA}a(|bd>V`eh1Sk1`ZHpJ9$ z4-*y~Zic>tLQ_(h<=8sc!1Fi}F|lnsapg;x!6A(W2L~{^^QRnPZaen=0gwHSuCaQa zTSMP>#9)2D@7pqxjBzeXO%@M8jamd~5^nn)?#GWhS<*F|T?wj3s7Bj2s9I#aj^T zYbBgBVNi>vWsY+O;>l;^@wNl4;hC)YM@(1{u5WrDp$zO?HH!ER>!{Ul3a6qac$vKv zZ!~mX03wC|4PS23$G*dxqP%7z^2D}nc>C}re&WlY#2m>?SDg=wX5jAdZ4+_l#5o2= zz7Eh|`_Sz&h2<6dRp+E4>r|d^W}>%^!pBJgQy8+j=dj-SNa{#NNk@ZRvnPy7VF z^^-q^FTVQ+`1;c)_?(m#ii(j&)c80DbGI$wXxJqFg6JG)fNtw~!bGg#UPraf-n;UQ zCvr~4zerSBxzgT9lO=YAGnef51jp96D<2G{L!X?lqh2M3LPUokkQ zb7KTn&6k<@@b(ai=UmTSYh7fyNjieLs09?mrJIoXR}?6-trZ`f6NvLBFl_)jyz$;? zU7|GY%SeC~3D;espjr2I{kqWEZDvJFC>gz}&mx3(R&QbBfPSqVI*ZRq7m%-bk*2y- z!k$)9Bit7)=8Cl2HttO$1`u^ly7H`Jf@H_=B~on-*tf)~NUI#Y9z?%0T7>sc)Bb5*{Q4Mh1qmxGAFH&@(5$i%w-8vNt@B1IL&seO2DY@QQ8X zde+e%9rHNooL?evk|lUeih@Joz^s~Ki59Td``$Yc#OAwo&DAcFbSbO?ucXsOnNCI{ zdEYUOVisgz4(5$>w#V!HcG>9~b^p1&<6yBfbl%RFO8)uvuCCcVG z$D{F#D%ze0-&+ZDFSGGQMdRn903#=3D}2qI*ef09MDMxGnI=J_xnu7QmX7gMpRaLf z9CNJmrGxcIcLTE6Bt=2Vze2#{Cwe1kLoF?xOY@Bx4Aul+TA_0?DSZ~p7Q zjxWFUlP?&=h58A*<;Y^?7uJx$JY{f7oX2rxIm(?rXTZ9K>QZd|ka^{g#DHEymuiwN zG0Dody__J`sHZz7mrHTsy}x<=|NfP?d%`tbvD+bk$c4LHKKl8-(9gD%btV_pH)Mhz zpV$7_@f*MKm+<}Xe-HoVfA!b#<=g(5aOYa1@;3as_HtXox-rfdVbOh5Wl`VJ?62?TB4Ug&Zw_{5=UwmT8iI!!{C6v_-3EjL z=1DfpAeZ2=A@K03EJ4^l2Itng+b?SF@?aRyBYIVAw<-X1Uz$FN zwT_lxv)rz(q4uILl~5vMWof%R_MP>1DldB$f=()V=F{IEOI@eB_H=~s9zMrdF$FFp zZ8;fgt%wNh+eUPK@Gy3F?J}$O!oMYms`cA&zChzkS=NYS(wP)bWU+5qg~pBfnPURR1D+JyL&6Zq#aF{?m#FD(>#xRLVaPA)Mu|gtj)73Vb50I% zysbf4GkZB7)q&lk)?y84pgg?yAes|etEBGsa*9C+Ok-|+t%IA8ZDWr0{9OCat$wci zY>c%}HC#~!=NPM@P+}Joh84^0z*vksuKp!HM4}*IsJ5l3BeV&4bG*NQ;<~6odX2MF z_n|jt0FQF;DEqBUFL%-Iyort$Hdu%ImirPkF#DR>bb*U}a1N^W5!!6w3E=(xBaY`mTyNjjkk~;i?3jTe z_iN0P!w6z|FrH8Jt)p$7DB{*&5<@UIn8?hx4?DJf!%SR}JR!$ra#-BFVm8=4-uIn@ z?CpV=hU0vv|06G&2}K^Z_En&vrL&2clLO{RW}Iq@b?eXLp}}Em&bqGlz#vC^9L%L}MM!CFxzg)>M5gj`<$|}JL$m;M zQ_b-4(;;`d_L=&K{gG8WmnYF%zjZ27FCG|i0CB={G825#-R(_An*h#9YDC2VkizLW3u$W&HtD|HdZTMi z>vrvZ5#_q1i`zSeBwO1kK#@ol#`W?X6GxsXAU2V&bmh)Ca4L7TqDy2t$9bOk^gOkn z8N7%X$_?jwUd~uqDI{cN6joy2IcQ9|?aU~Aa1G=?e)_(8w1&OY`S-;K;Q49b>&Hht z-wwRLzhj(So~%O`@|#TI%t9(ly*Kn$|cE z42Fqhghj@3)mqcJ(Rq$| z&L?IBheu7dZpdz~-oiN5Q|qo6q$V;5ox*?c2fu^we)rpW`|!Y@`K4dNZ~gZFg=6r0 z>00{(qJ0#lNWz1C+jYj%FlmcRe4;aN+?=FRE@8}pbDXPwvjoB%ecM(X7KfywQCQI_ zioB)Rw@kpdg@+yhus~10!Skj^u1K+Qo{9|gB_IfJy+g7l-x`OsVMFHg&OGlo^MQAlgD6_qA+?h>vO2Zh6 z$np-`IOH8CqrTjLIRbrac)Y#gc%Dd!rkZcM&N}miVu-uLjzA0`V=OUm%%SUAB6b=x zx`ZH}hOO<2ZZ^C>-_>Um-FXg}u{**(44;RsHSEs*(Z1~@Ocm)c6^YOpkJdy#C}P!^ z>TM|#8wLsYnA?7y1IP2gI6v{v76zT?rW=tuO#2bzgb<1Mfn26mrmgjwd2c?E6ju zjk4E^Itx)bT8m|*^QIc*$yl7Xw)0FnhHAeQjmarGoQzzVW8l+yP_P`iVk!F8HCv#w zysm$f5bB&mwTPZ~(bT$(8c5(Ar)F2adXAy`ngYrlsn``O^PeYxjlyP^Q7R4n^I^pw z{pV|t%ms0xsD{;tG6T-zgl~N{=oY$F*vD$ZRN+uK$~lcnDxE4T!{Y8-uguhP`LuQ$ zG%m#Z<;b1NZnM0(A~RnO+m=^zv(R^ytw>R(us&W+@cTgjHaf~HXSLo-NR3o(pmqzQ zUj~^hq!cqlsD?h4%lI32?vLl|r+@mV@mK%qU&U|#)^FkO{7?Tg-rgRlOu2<5R+F?2 zXiIshgNsM5?2M-3J8!PKIj(y-ffonha?wdG{iAXlyD(g~vP38jVD8za<}D{n%)r3V z;c_mK%Qvq-78CU4-f}sKnhOVNY;t7bfFdbUy5%I-!Lcoz^Ecv(AE(#1zV$8q#lQGp z;J1JKU*UiJTYpR6_cah*E=?U+t0|rD%0*h#no?y~6XcFyvgIOu zjnG(3oEsfyMrv4rA0Fc(ag*ILugg_vFD}FDX20-CdBYo*gGFNfo4ds_VLDXD(D0x# z(AU^6)*y4J2Dz?L9mp?%03CmAMdff9cM1BcuqKLey0KKDC9bL5@myUj4WGPA<$hgPQ)9k<&W+i3H8`0X=r#?g z%gJ4eWNR0R$gQnBy~@-z<=UN7jW*SLp15Tod6xjqSBB$7b6R_SBlF5IT=^8C>I5* z2wnG_?)vVEOmWZCt{nRssMWx}Z=0?SE+;q@GcQ^2am#|PJ0pZ<-{kbEy!V&fau%e@ z&8$rN5-YcLICr}u8WxE}_Oi7`YcHsEAca*6UF+jGHPF!-;z=BGHUHIkf@!@< z9=jS|xZGE+{6Cl@=2+_&MLvEty0h|jZGAsPwiRMER}<}?@y`CWBP^Hu$8L!IiX|9Y zM_Tu_Heg=&Te&vMwX<-8L3dr{h1am6wWef=`hHBA)v*R_;lks_MdYA^BUT1s%mLS+ z#SK6=M92-i5e+>ea8B+awlQ1xv=X2<-sf^^m_#OK*F9w3`Fm@<>OwpQ0_R{>cS#27 zEM4b$%evQu^z`fgZQc+bD_4Bc=$h7Pxl$?CYa1NN z=GZ*hqIm=y>S4ImUtKaj=;#A`9>FhW*izV*ovYZfI%1$pMJT;nk|2MEf?KjGpiz zk%&7ULaC2A(HgI#3;*8TaGV_6jMlMh-%AAD@t_MnMj(4%F$HOti_O+dmBRK+hXoLa z+$^nQ+c%1-CSA5m+$-py!?3&JP%Hpzix`jz>>At$^14=0xeyHr=BYaZc+NF`i(n1b z(D{2(wL@A%QHu;1pCov4Xy_>yvtkoNHAe5uouBifa=20GH6noHfW^e4H;T#nhLlb0 z#JD0YO2j#H;e(rZSl>vK*eIx}W_h7l-=EJ#Q(AST+skf#In4CzX5dI>vql6Sif%yO zD0_DC=WFY3)hCP+AgN|;qKqsAe5`t~>Z3VNoG0B-C5nXmYM67_K;f*lesif!y0OQ^ zW80Z2JO{?}zqyP-V{Ik2$QO6e1ln)}xK@kAu>_V~c-t_hP{ ztVa7v<0$NXa0oDBh{W)~IJu7PeFs`#D>{N)^K*$xNkOol*uUK94hx6n#;B0@fng`3 zlbY5)G@vtsdl*Rx)}Zx4F3oHU(K~~#PI{O59gg7I=-rX6OT6k7LW}|PiTRwE#{}je zr6@HlgQK?{AKt#ew|?@cFeC8({t3_LlR3wc%cWd;s*@4twdLbC^6RSd*ylqO_5sbUf+6v@Qlcf|=TJF4_^`iW}9? zg{n9{vxBMg-~ak+{O%wA0e=6x-^DLHCw8AecUW(0tx@QdNE2h3T$W%vNIHPf>N5lH z=liv$$Skw>jf2jS=*jO6Conw}KPJbq6CKO}7&KrHkn_U<6A8VEktfb!$djVX5s5PPe4aHsc&f7&?g5?++n-XW%#z&p44WBtG1hWwxQ=(RW3B zF@j}++00YIF(|Lyx}mvtros3Pc=f{++q39Kv<@3MgVT+oagSgIG7#g$h=Fb2&?1>VA4yknbC?HW9@x7h_l7av@w>nOukrEIFXB)9%y;k~ z{m1_i{?R}FP5jQk`+ej&0CdK3*<5tqecROYVc&-$Z$;MJ#G@5Sb)FKo*4bauM{5;3 zgqP>DC?hcfLk`&0Vh5s;001BWNklvoV}Yb3t`V#7?W!p%8Tb2S!5u{ zXaovF(rCaWd0>#1&>x(GeMWKH_YIB>(*d`xb0+t-O{q{JaY>0RtfdCZ%>Jf(nD2kw zjI1N(>M@K-RiMvAwnTWx2+jVAq^N!mB5{rq347c~ z+hK0}6ls$8-%Me8{1}mzH{cGPl zTHhpkoGW^yyTc!EJX05Hz9kYA+)ZWRR3r|JJ%xGBD+0x@=tUY7NaV3}C_M?7u_EbM z&e}R-v`+GZD<{1OkL-)+`PKT{o5*Aps|aA^VE?UXN^OI8?g6FFw*Wj0ur8895jaKm zasEtit~0cvE@z$lB&gP2=DmdWq~Tdo@InG2pR^&dL6ZPsN@zKCUZilVS2!b|;Yd8T zH}>L8f3`B|d*3k66M2fhMxy0F%zFic`6 z5HGmR%0#H)`qT}-kgj;mP+vJqy7}%|s#g~0t7EuPp>Cu;k7^lJU9lrtN|nCzPY`j6q7_Y1%9r|}p5!ms0>{5WpArNOy1D#*I%P*8c0aEV|ddcezE) z@WX_H*PnIIKDQUD$PfE9cd^{syMcAsUg$Nu+*N5*IL2g7U}3E-uZ(eGA>-OJtPTgU z28=6qMk-%Aq9PG>s{A%${}dD5A81+k!#NjT-kTbKEDKKme>8mgMo4jb&XO;%uD!4C){$xm-}2O zMq;hyT<|M@yE0KPVZ|-m9HF1*Iu~{+IPzY*8PAUEQez&p-JU`Np(#T#*7loBIh|S5d`e6Sh1I=gp5ld z^Ad&h;#9w~;jJ1U`tRieFXy3|)1@ro&E3`fd0mo))7F5EjrtTaP#K=L#!WSbIAp$> z24zp0GuCr@r%aUy@LtALu4*+;xHgP6BrNxS<&?QqgWOjBG>TGG|6R@cK*AonnJe2^ zB#uJb*4|r@5mPzvh43sl`Es#mIm-OP=9frCgLq`UuTYX3gt5+rNWaHmT||#-?M181 z%uo&BYn^v9c;8U^9L?0q8YVn0o1LMdMq9#6HngnrOYQouFL!-kHAqI%<>6Dl9M=5Wiz*7#AjGh8zM;W@Ino;)O(H}< z!j~Kqo-Vho1ZC?__jT`uYOIJ_bLK^5$SWACzT>=!z{*t^gYHgm#GOMTsZ>vY7V=TU z;xJ!%=#kvVn%0w9Im&YCx|ewF5)h4J=<{A^d&ZUI!d)-2kU(OjA56pPqQWDZ3l=*|lY z2UL3c)*ey)LsU!= zg+1sUP*l(o5cxG&r+aB$aX!{AQ4?15C5Nf{7vtbCc+3+yC(OELdi;E~$2B*EYMn4& zb#CqPb55XRWdj%41h+c4gs>CL?lzws3C7 zic>#+ddK&E@DZQhPkh)ZLh88o&ej?u0=mHm>kJADDSGT+O*T&~_x(Aq!6=2c6iFbY zCo&^$IEpwRQDf8IpQHqx6Ux11o!)f5zeK}<<2>MU%ld82HiZ_O+>=ql+h!zooF`^Z z_-5#B=Z>m8YQVAej>luewsYX}F$M-s3Yn7YDFv!V@fql@4GRqk2i>Hti-3`GltPk} zD+CmF_+qn@JWki?UkNd@V22jhggY6#L01JR7J zIk*`p)|snB$M@*Nn}b-_Xe0$BwRZ80;)`xl(Iw}caO3c^cMa?1)*feIT7CZ_MD#{y zyK&tYh!7CPj}CpOCqmb$^I)y|j{?C4Lyln75e!q$r0WBFQ8c{s?MSw?usP9+tdJ9_^{S$zs#laqOy#C459&s8jx~ofxsn}$@W9slx+Wv&tnZq^ zjdM`wV!Yqbt~fwNrte{3~}oiIo264Wr$%vE-;V5{jQh5n~(Mk#$NbL zMLJ2yHIzv&;Z;l#IjWwDS5f;i$;`3L7g-8;aDPtqQO6i`Zu6TZ$$=Xv_v$tGEz(6z z)FnWyh`|{mZ0D-}kMo3|=eh@%X!-)MtTRZ}EjgxYbJt+I>wHMTI7ErU44C>wJX>A$ zU-h%XB&aaIT=`xR1ft5RK7sQ@$$Dx6b4rN7UI^opCkY9<2fMpt+xm-hshU_XM#Fr~ zb*?7L-Nk{=aB6ovS-ttIab1npwubW6yeSp_{b#3~1y`=LBf=N{G7E898GN_*m65zi zpEbp&T(DhkoBC_ps7yG=pdwOD=am8f*^p;7WQDS-yoJ}H`{%YzTgvb%)G9NIf6Xh; z@|)L>)vL9JKmX_dJbwMxe;xnB-}oE&^yz)IdrBc~xD^@r4+$aapnKtp>9oqV_^u2_ zTuMC;`;p!o@G8wy~$4*K|pvhc@d!0Oi~RvrAr4I^r+uw9~{ zymCM-S*#=GH|yPx>C4^m=l;Pqa{dFt@YpPg#9Y#UXch3($= zjg4HnBk#4#9k@{Doa=&EeA*Vc=3)rwU7n!p6M0*&Uv->c)$>a?1p^ zn^ROBr3-6luUT4&RjiNmRDNeJ=VlY8u9UrN_$(Cig=RGD+m7=*mbyOXM2=W!Zg4se=my@S1 z3-vL!-0&CLo>=tf^C{OL-FA#C7^^P7KW9_9ZLOM2a?=;aK2e#2!kC_?oFeUtjmSIA z!EX3=f1za5v$O`Ca-w^<&KPXwwbm$#nRKbxEsJMHa6PR*1E7<1j*F0`;l_}%ecLy= zov-12sYceidb`I>>U&oMW>GfmviwF3GQuuV1cdrl;~fZOd{y2xW$xuqNu zn%*lLgT&nzp&@bznYl^*j$*izim`++mjGf>n6zGHCf?6uspnS)Zv@6Ege?qh_Zu;w zVla3=J_qx^x4ucB#b}7l8(fW-wKq1$IEMy#`I56*G=nY- zYaD9MF)+^y8&5NwmwE(qH4s}g6ycT6!TqK=HowRqcalt@$4xlNb#vAdiNb;oLU!5@gor7qYK+S7s}erkj>G8qNr@bCA;vUT}^TTo3T&B zwq+xhcHjAYw}x%UYDC?s8c{^B1Ui&CIxF|L5gC3HC+_>3>Hy(q#{shw*7lW?nd0o) z2sLn_Y+b0a&hPVl9>`#$&U?F_eMQ;1IS0JTx#!?&!`2!Hj>6HKky_BL!S)T!*r-d@ zKi)eXpBiM0DOZu4fJHxCBE>WL`!vI}VBRz8S?4`J&J#WP+(ksSeRVcZ^j<<@%-NXKeEnWe&Q4wtkCCVfHJkPbdLL4i3(> z!=Zbl8%u(X6#1ae9VZo|h%qq7M9z!uG-Dzx@aT@AeX204&v&}fGm=@H&9OxTxj7t? z&0&bt`UKW~tk18=%Q*-3y+MxL@1(%;$%L2P2z*`d`HG1*WSd*D}!kq zCN%?k6K*~zA86@#bh&P^m`kX|_Ix^qz>C*#WeE9)m3_Q03`SnMy1gF<*q!tvAd;(g0r0ff9T+y8K8xO3ZPJM$r*@Vj-Y!F=83l zS+nX@o=4jf`X#hxRF-=QfN{&LhvA$9$2qX|ZDo&RV~rDv4|={I`1pR{TVDc?oxiR- z2U@*tc>=Vk!oDCa&QnHA|j-@oQ@6K){!>wem*fO z(jbe<1`T6b9JKDhOpG&Oib>d)yPSCJItO34Y@TVm^SjKLKnMemSo`$IK-(Q}j~&en z$2ckYYjm;41oMHxLDU?B;t&bSFapOxYT}na`KFqdf=>kFDJ-z|6Wpj7MXMT<)Q4_Y zjF=(8QF`3y8k`W-z-Wdo>Rj)J);h*Xqt;{Jff%F|c+;?Lu9~LzPSMabpf{0{=8ER{ z`s*Ly-~Hb2;M+g{i}>QhPvPgk{ipCVKmA)cK7Pcub(jZ6+CsC}{XA!g@YS%O2rEZQ z>tv4W*@^s&D#kV4+$cnHUzDlZI~dPZ2=t(PSHBBubP)wKIBrcn^SC1D9Hdv}O>kf5 zqcI1L=Ls{%7yE|i`#|O-zPoP-5!)gI{m~JH43CMuJ#b>E4qz-+iP17H!^gD`0^8OQ zanb@ zv_%G_NlFyIIqm6I$FlXQxClYfBfgO!Qb>xaKObH9J=`5MP#DiY3 zUqbB%fNkr1zw^XAW1T?@zdlB-YayX-li*c7lmN!$b3H>*M&yZO#v~B}hOQc-ViF&Z z$1?a#xz2Yvs)sRB;T$K4Z`&rcf0GGcJq^(nXNf!;DOhywvz8lUV&5EYU8doQPveuY z?j7!Z#aM+h;afAzL8m$*@aTJW4UoOd1l_e3cMOTK80Ay~0$T>t$Vr#E8+>c4Uo|7} zJPthiPFl*GIAdVjnhe?$E48-idz=!bV)c`Xq)_*%b6>STdLaJyG|+2^ZNlTlEi1j6 zS8;2q-rZn@Hs^r399;csUf&uJGo~)MFW37ukgfyQ)#yEslPa>_(KmjuY7$kZ(&w4W zcH5+?XuiAOUM!Y)RT`GEwi<=?>pyS6U)S?L?5ebCF#8|PX#K{i`{Vig^2;yr%fI}~ z_9Jc{VHS}ZUAl(Nv=Xt8J*spt~Tv>KCGUJw$v{Z^eLg(>) z7!Xnq6s~9;L=P^`soXl;l$zhX{`k1i*MJjp2ixVqN#h0_I*d`tB~@!{%v!3PUc)yT z=s%{f4?pMPomjMQ+ZrOS0s1Xc0Jrz%sDW*) zLH32A59L0qVUmh5m~ll8xxwOgt>TI{DmqhYz}{M;Ls2f{h1nLOk}g%%n?~I2`uDhM zi#p_Aq9=b5OBD8f>wURs*8NZ}(Hel_$_EQM@w*0t<(4L~Di=1h25o)o=zZgTKZb?_ zf#>sh5j1wG$)Wvc&as-K#EjGHS%c_nzp|_0a;w*|nw+)Ku=(0_icE9EAZT%Yfy1v)V9p?NDr_||dIPA7^$(DPn?zR#x z;2L(K@+#|-+v~Gk^bRYLjGVw6O44yv>t3nl@mXei-wYPqA9xT|1c5U6?sY`!nRn2k z9~v|h;mBuYDakvd1}G}1=&kD+UHIN|Q8s@Sc8m)_2{|3xMh7-YW{%@LHMCQ$Qp))k z!B*KE?_>-tffENuya#$~c)UGCS)=nPB^)uuS)>{-Fg9;YC`XbkE&{{=Ih;q(WjW?*s;qbskqAha*1lKS<~qy2ABSA6 zZ2t6C>%FgYPc@!$CBG&c)EZzDJt@~`Ys4I?=`qGY-*;Hs*05>YcI^8bw*3Qg8ZndZ zNZW)?AAq8y=G5Q^blbVbaxtH}uM)WgV70H*uzwnGf?`5{W0StJ>${#YS1bUMh|F;) z^U{pYYvD41OO#mk^Lajj7-&VgFu+@~;olknx;T$>BF+ih9FMJIHvaxG66XFnqB;@WdfOjbZ=t1I}Q4Sd##4KIJwK zN6QVzM>fmRHZ*IPbHJcIwKoou-9cz@!x;ygd3Q=eVN7RWtcXG2(b>S>cVc0`K0ZIpNFawzt>)|iUKD8VT;PLni9n@i}nZG8y}n(}qe zjyeZ@tG~7C3tWV$m0^C->3Z+*WY%{|xY$JGsc4<%wjzMKckc1V zJWf~r|Qup*Ec2=Keeb6|`UW1KiOY(@t1q)5pWh0qMx ztRpAuZD{|Vc?fk2csKN&`$0bv+wS;@Z~X+$G4bg*(6){y!9^O^W~(*3H+a~J5%2&r zz>N_y93oMjV)N>Sb13Q<2nqre1+?{!Zr3yCU2fV4)vBU4Y@28yJ491f#pyQy~_-Zx1{k zZ+JZ3u$>zKR)R`C4C^118*8jgVc>NaU2H+{cTcg)jK2m+_1m(B`VKMj4>BZ zJ0h^{C19TT`2Nm4t`)L#h^)Pe#8 zeh0Ndl2I4Uw;$Z?9bTF=&G89gmg>iBP+39Ino$jO)3?qFATz z5Phs6RbwT9ZtRdeKYkQxsAJnYdfVkdpJ?Ejp5jT?5*(TX0~EFGeP8`F_LHaTqoxdS zo`G{toCmYzix{@`9lJzHk&G$II)ey(zJb{EF$PWy_6O?xsd~;j>xAPNYYiRaAZg-w zB6Pl+k!TymTu2Hq+#C94YcENOf+A|Z%XamxmWg|=z9|*5|sr-CT=KWkr4S`tf^ZCjRW7{j>O$U;Y*Rvw!|C)BrFo zF!|Yhc!gH}k#W#cPNJ`vglcf$hJ!M56+%@1ex4)z|NYRkt<9mzw*V*B_5(VYz7YHe|@_9`{^)VP(DKD?Zp9Zt+8L+uyu?e7@&j`lVmOU;2%| zg#YF5|9#jDOpJxmc~RZ348nxve7QfyWFvPuO*4p9lB&N@iED5gg-T7Bvxxhn8@b)Y zXtqcP_x-hspVwiztwv|vcb_{>KaaV&57b}dRxX4wZc6^UXv%Kc=vfYF9YR8G=E@kN zV*K`gW;Gp24a&mWx!lJ>z?So{DUY=Te?{7<_fauBcF(2EOOQ~azI!gZOUN~ohse4f zY${!u)C+OFu7k4u)ZnYktNS%)Q{!^9mhwJSlNSDb{Tee^Z^{|XD_gj*acWR-u-=yd zt**Zbi3~7f`W5@{9I~St1i74*iwq zz43mtt8u+Vnt4;Z%h4jI6kQKpDBoCXb2YbDO)ddP3E!9#b}l+WA-z`K93a|E)!7$K zrXpVSb<{PK!e<(S>R^Cl~dAK z#zV8!HC;GHHeOr<@}ry@%R$e9aJeo_4bLJ$EZo1IV^fy8t8P0pR=%qI5W0#CQ=BQd#qC_}LnI`$D^S^e)x8 z4*NA=Zsph?Lr!RBTF;y4bI}9T>@t(EW9xLNjDh2M=$>pV_uYjCnsnlY83$n`nI#PI6)%W8G_)!@nHnsiyrcI-|rGav)b` zr8{wst<@LD_dH8L17MW0Uzu}pQW%l0bBtXB;Y%q=w{&YAXC&PCy>xesy!HZ6H;}iE|7#R3#Q}auJ8bRUbcoT&`8K#CbePi*aU{V+3ZNm>3iYWfHmE8p4!O z8bP-gE?jw)Sr%0*o2ci)*J@qa9%>FYwYJZJg!6iAjn2>%t~ZIiAIQtZvKpwTVmLTh zKh^8I=yXNr@Fk{;j3q`a6l&EQ$PzXYHyl-`z?B&d;WoKX6bN`Z0gDT&^`o(1Q>;mH z;MuNvsfawTsFxZn*s9r~=b2;%{#7o=6USj!4WM=I?Xk;c%e>bpmzvzqFvpzSD?AM- z@&&jidS~2amvfHqhr_kr8vNlnMq*^5MR4#j2VJ)@5tGes?su#kjxjl%Hr@{}eTVB)CF?L>TuKV|HDu3u-;axQVRmpJ}qO#LaY;x4*w4N@7g)(KfEN z?)rBU)`7!<_xE?azrSDixWsqXXfoR$4{ZAby-`d9oy=<8M$*xX48-7Yx^FuN9*XjC z?|=_jn>>@(CW$(`>C6VY4`&30*`3b5Q*ZAR_d1G%Qp1J zh*(#Yft;fXh9Bu2U4%Ml55 zjFbCPMBoe!dv%UyHuwgU*^VET7;zJVx%Nw>UxFQzSiJI|vvIBF!BS@^4fEzi>pa`P z?Qa<4RA&8&?Ty!G#6+C(ekvZo^`5@^-uLmnuYLgh8N+wJ{qy+t&;3dKtAE+?Jm2-6 zud{8FgR}@!zH68pJgdD5wMG2{1qOH0Rb;#h;dPF$D8Qk;rOv#qZA;)^^Ob#nkoqB0 z=L`s$4Y;t}Yj*D?Nc7d0a`hlNAWyl3a}5To_fUhgc~W%LeB&B7B^}Xy;eDepYelhM z`^a$&QdT68&J|V3@3ev9CPR>XWsS8q6=I8$+*Xo5kS0|UAKC}M=C$fAEW+lDW$M01T2_zv`F!H>*eD9M#=54E8+pU) zUipVt+RBxok zT&T$#FN2-P;1{dns1E&}LMYubA79X{w<@bbh`KmFw@z@z{lU zoMR|U_=oJbLN7;LjjsD}yY^V%hvVDhGYZasDAWAjurDfxeU^)NuOZgwxz`nOIofNW z;LTrzf>nUt-%r&sn*eO2nAUXJ5!+qWL7qGK2O0Qj^_l zwX06KKzkF`^Y9hU%0xrcL5aou{qA%dYI zIxqa48nSH-t>v0qICW#gPT0juz#vSxuyLVm-);S#c9CAxkgY+RshPU&dHs3Ip&E`f ztfqB|5GXF7OO;}x&+6G~*cPHth5y3X-=C+vgdf-c7LLEJ#SJqZY+|-M1xb5$>LAIX zrLyjNyG0go;9Z%8c9;I?UafsU^z1|i<7Jd51r4*Sd9pIHMcyfV){1!Y%9g}J!q+)u zAxc|YxY#;aulqP|`SL=d*88g=@ijzU7HvMW5v$(k5Ite7!5k~Yxt@beHc)Eq`eAEK zN>osd<0@Q|)AM8X&lmj=#V64#J=Ys`~#HNOIh7(Ami z-EV1hAy>mIwT72Fsszy~=dVR9_lC*wP-2A|jFb>#IedHrtkK~GI@c?hwg$g>6!xwy zXX+YWWdLA*<8EQI-?h-XbPT}t|;9VdOjs%ND<;ob~!a)|qW9P9yw^4JZGH^_-OnWMaQBD~Gn5ca;oV&Vv` zJ)SEMvZ=8-A}I*6F7XfDh9y*LTVI2HDR1psH<`@z&P;3{@&w9p* zn1Q`N;QIz|z?lFfx--yS)%@y-)w!H|DL1+Xu8T7!=BDS!C>G)1##jC|)Z}ihqoDzz zVKzI_bS|lu^j7ziVq5h5EFxoG`kG34nK5D0G?;C-xFzL`tELJyZnwS>yNtHI&-S0Q598 zuhhJxr(*@;~34SnD6;foJA z&jA+>wvfGXi?FKuxUyiY-)uTR6v}=@Pr{TV62JalgbhH&Y>5a%e+xgZ59{lX)rp%)^NB3HZ`o)KvRO! zFCGs}_7PxX4oHScCM`{+ANUTN+wAp6ZR6J9_mj z01VZ;GbZK$wp%n>O0ZmH-TJHbhHZP`I8K~e|Jv4&qiSc?C7Up$V@dbYN+dqe&`jdYG|M$QBw>qylm!gUwyPcoroS2x)ZQgrd=YY=*HAM$|rPe8) z&kS4NB047)|5VF|z7+a<=1*8yl~Uk8GeDxG6u41~^^ww|)v`Bs$B&}Tq13OXm_ zXMhe^Anc+adSk5_wRf5$v+fr~Nf}s=7}x4~a{q7yNfV7ks1ki=(jekK(XzqR6DYy| zwsp=KCeNZ{4beHAeeC;9)W_%NIi5HcIn6Zi=lN!g6TR>Jt|$$=%m}x6XWj3;lZcRm z`}AuRp$r?iXxn@1tLMP)XG(}~7Yz`^`!{zOxM!pypy+S#MLoEi7dDYFXRtngHSn@u z=Z(UmREFD_iKcZp6rll2?EZH30cDo#6}t!1F)(k@f+8K>&O9(f+jvf+Fn_MdU+BH? z+H#g#WW=Ux$3Bg(eKAl*7(Fj*Zz)ld!!UuIXsx2CNGROjb~HDM55_|O-%ZWeyjCUCgaH}oX z;qjZ-ACK2LCpI-zXKiS1L~2<%5sBY14I@I-hP4M}ezWHNn7@ANr+y0m`G59n_y_;! zALH@Z*Mas)9iXR67%-usJ#067!T(R!ygN8e)j3zu?;ouLq&dc~Cl@$BF>pzI!6#y6y z#TbEW9f0GH&>PmEKc?1+SK+ON-O7x%#H1Xio&21tKkELu6HD$9NTnjbpHJ=s_9egt zT_pKJ2oP04bcYe+MF_kGp}=jB8rSpL@H$+_6~|D6#^u;97phd#h0TK;@u3KYF$bNH zMwd=&ok+|C58ZOyuLh9@$exZgTLXk#kq$)V)>&hQbn}~I>x{uT-=CT%vabEmh>Px0 zYEL0N>#i7iT_9T_Q482KtIX_r7u(D*|kx*ymitgw}}stMy_?7`C^r zm@=$U}51RE=f8&~DF034Ms&*Pf@`^h{-X&V~>c z`LW-SwG#4<=X0HtO>WW3@}6=abN#467VqL6pvbS8>mvHAbbK)=G&nNGn zlXzlp!tn~v=mEGW2Nh-F;81EH@&54>|G70e!^g^lwn(%QINsmUHphqlhUN{=_jkmc z*j;&#gKnt(@dh`?`8;uqgSohG8;)_{7!#3CWSq*T>|C?cR_0)Lmq1!*UUS7}oOHy? zjWf@|xQdMgm|8368H+4q$dw`QMlnpxz&SZoMFvitp^3YkaIrEVVM^~ij(o@QJTWt{ zZyVRS!3N_v2T}3nTDv$9$poIqKu?FoM2-m?Yyf*B%5m=<@5hOuAw_G3nOA(q_TdBF zWg8uOyVj~Y=RgB>n_Ta9WgkN|a6`cIBpJXG=&Y&db25ry--)?4#vZ^s_mL@QsdcSM z)&IJLk@Fnb+Kx!a90%TU0A2#c2i?kTW5ZDhV(&bsIVk2^Ys}Uct>x|Q4Ufl;kMGZG z&ruvh)hgvwWc-N81lsqyJGRzwPOfb$PrjVrA{A`TX8uIrIZrzEHNejp=y1978qS0N zJ!W8@2YM@HG>2~IIgsl0RZV)1LDI_J<=?U7(3{E>>bB=C)T+) z*k%+ePUfU%QI3>t9x*9u*>}3nTOc)@b_tj$6ce`88cf6Tt$(0yKyFa}tT5FQCbq@_ z`yBCN4l$6T^L)PJ{rv=@q1ix#;ca8?Y#{NR6o!lyAFIE64#0fFCZXSX z3}iHT-zoCg5`8=Hcsww^2)sWJoMU26Qm0Zm@j1sLqNN!cx-z1)e?q0R6>7-j||^0G2>$zv~!4KhdX| zcV2t#HN1GZ$HVoC>p7etF>vq&wN~rIO%t&hEvA^El!@@ruWpL>{SU;=WWbmTbfD=4 zrB+x&6&o>z;d@pylC;9OJ60{(wF_RncwwXy0?yHMuRPpbPusc3a=T7H@MreJ*=-#Y z!9kwxmn8zTnn*7$pi^s@F7_1{&g}3gV21CTeBI@Whv&~A;{@(3Ejy>JBdUbEyVu+l zJiUk5e!rAr=cCpjW7s~m68iP@GkRJ2fLGZFfI&ftFcBZ6U~0F0l&7t^kc)AG+76U< z0sG9LFo9Y#v!R-iu(CZp&sNc&4?KPP0lx9g_we>x@8GR>zZGx4`)&9azyB{Wt^>!> zK&a@_a}E*br{RPRBEoSTxLhu{Uay8MZw<`sXBN(Xrs9+*KR=l$K5!fd?(XhQl!)^%K^SYF3^fMK^x5E_Z=J}|uJNtr^mpZw=YSV49+DS9_;{1g{WOer51aJ_JKLn4gI#a?lQsf z_1Y885ojQ?gm$SF=lQ}D`)$n-sDMT{3KkP;vx>pq``UXjNAl6*kXKJfvEyNbFhZ{?(QzuhprQ(ip!;;RLTk-AtN)XU9f(JvEFktF^EyFe3o<^_sj4( zhRq(sArr|6+nm;Ih^l$BGq2=SI4)k5>Y8)jbe%u$M@PC;!=VrYI%R)Kq)jBb^meEX zEW@jYXCJQl(M^x2iYI-EZyE4DV2g_{#2ncM-!UXxIL4B=v^9(lagcJeAE~8%xF2l& zz5hIZ#*DqpcHm| z?aQR1c-_&{w2ThoXs@#H%$s@}go`Nxxn9j^FovgKstXY7-WHWjn6yNQZgzUZI8W?V z0Qot3@|8k-j6s|uMlYAksxWd>2=CVrE!^l%D#-n17%W*=S_^?hUq-dPGAS`|5`CA* zly|As-1LdY#^y{9BZ`>~42?Il!!-uVSs&!DKT;r>&i8B8-gkn|6F(RxgIem%^_r$S zCRDB|I7Z4KQ;Ux}-l3WuUC}!qf}-^Wx|r>KpS+n~Zs}Jx1hwnAZGB!Y($Y=N-o9^| zf9M)*gQ5*554|z0SPC~@yA3L;BiqA3t8mx85&*kzN-Z|9sh;$mGsRYsX+wVTl!aOs z=1M`3A1JRW=2cI6#egbsc_iUp=Y_)0^Ba;f5s0N39iM)0PZ6jm{xD8xw}Y~%3I8Tq zRlm<1UGD}0_SA5!@gmbxkOfwSYDtedCPc3LgEOm+L^KUH@%_gcRRTSq*QC45UF;_x zIKg|u;Ua-dOMSpQ%>$WV{W$`V4|vT4E=7GX9u-E&`%-zCsH|6Wtx<80+M0k&+g2w} zO;45#ADTvAJ3FFSD2z?3#vsm)g-w{@R?)|qb!K7G=5jdN+A+7@0jp{QDjAj%wvJ!T zdH@^T*>gqI(@>7s=Ma_s_pSfbyCN?K4qp>gCVC&}qhkywRQbPeoxN~@1~}S*TB>*D zT30f8cO9ITA#Q$vDvoBRJWIPr8rQDj%jG~n8J!KYDC2~G5_V_hv!OkA%o?0M#i9ro@>5y>8C z_@JCC0Y`JO)v)DE#mx$q7%qnoiy-KI;OtlLqAlnHHmIE)bC`J0?#NAkMz9!T*g!S* zKrkYoko9OzNE!=S%@D$l)we(G&t(cD0AWbC{Y2rHs`c0t=EH}g6});qvx>v+Tk>vK z8=e;vrP$K_++wz59iK9RbM{Oem+JKe#%|rvul6~r+6*bE8RF)%=EC2Y1Lrui>o*Vr zVY(c%n?a%;Xr-CKm*80Wxwc3kH~aXfvP;3Y83GLsrm zVjcBo?(jWX)(o-Uq~#-`&P+Ib&!`U5P$BdoP&v)~;N7J5^9wMYC<)r|rK?6{uaLB= zqmsCLW=0Vsw-~v|e&70oqu%B~pB=s1z@JzX)h$!O%}i1=@XU_+e0X?)hx3YZf9GAu zma?Ku%X{j!JN2@mV#!3iyQH~DF@b611=|NsfC*kv-Uw&SRR0InIt3=Y!D{wkpe78_Y}R_upNGiWvvB z0Ib$~UM~ll2-@=t=-~>P9dlZbwvvKN^91jr8ih#Au)2_-Db!Zem<2avKoynP%zks= zeEtI34okCRrQ~C7tAW0Srn&W|)=35Dd7@Nru~ot0*xk5yV$V3|NZfhM6T_fBR4}ei z*BBkw7gs!c`T;)p<_GxTn@@3fcZd5Y7hK$cQ%b?*a>4V5;-7(6FZg$V_7n5~OkW$x zm5?A07_myg#p~3H{a%4p>Xbq#L(m_FrN=`QY8NmoCWhnY$?qjf@&jN*q}Hk#1H9HN zjO3*-NPx4)+0&kB>}QlQ1$~}=evqurk}-j4)CzXxhe%U%(C9XH)HZy-CVMpojON5n zKN&i4Jsk@@-Sp>_qd6th=RtB(z%b0dUI*dpxLnK-6Tv$YP%S77JV?jz;1nhSC(!l5 zgjZU61W;WwvGv%t!DQwu=G@;_W)$&GbeSl%fScgi^QU<4{cqsicfTF)eC8dz_2ygI zbB=RbwL>kw|CXD%U*&pJsn=Sw#JL-LjkvQyWK&Eu586=OWYfAz0_Cnb?=~Fs znPZ z!IiC+CiNW6bu@@$tyQ#knAvt1ww%0vg_$7)^kIo>cvv7%__lu@hOqYi)7|j|m7AHn z=1TlytD9r51w4+1F?&FjP+D>7kAN$oal_#?K{BU_kVKduGi!6f>=PKn1E= z6-}`P^h)kM!j!~*ZZV|%NP11sS&pOO?(PBt;~c}tCbcBWyw4E~GK}6)+p)|Cs=gL+ z>KenJ8x|U~a}v`EkW?oKSf~0z+^dW4GtZk9mnY4h``G4DwK@^V_QX-I5VM^mDfqPr zwwZ^*W+^c%HKNY;?~0%uEsayPR@~p;V@@+6p4TfFZW8yTJ-nygY8*U4PMUfsmtxn} zaFYhH?LS0s^rFkf3|vE}?TfgewgWl^eOz-c5JpL%RbiwNgz@XGam7T(d0IHN9mT3m z{Mxggcw1zn*Dn}QUZv<>GrCZ|421|8w#U*z0Lj?3a zfxZvQLyQg=eV`$tqswqz>W-TI=U|J?uM`r|A6#G!vzOjX)SeWb$UHlPWA7MU;`+E9tEjoPR9ksgkj)3;A)-3_Vgs*@7 z>-b0i=pWD8qT1-^X&H;8R|^mo--@z&dK;q}*E`%|;# z5fR>c>n(iY3;!1WhhO@;IY8Mvq$x0Uo3lT_Q=uIyrq|!lHr$M^>HV-A@6#XxdLu~N;oZAw z9hpwsko=Y37~jo*`lV{ z5T*EjH2!|tFtV#-SY-)dJMMq)mEV)v`}>UR8h+plqRftiCjU}%9hF5>3c)>T51KAg zw4-?fdF>nGeehudEj%T^&~=nZ>b38Xo9i;JrCQf_e5{PUWTR;JsuQGBNH)-8ds*3Rhjnp(WRV5Z?Wdf9h$+zj)spNHn0c-X`Y zBEsdkWUpe-A?zctVQlr@^F%NXxyTqz!}u-(h1YJy=O2Pm7`9;|5fLSlGY6r8D~ET%`#>LV zQVGL#4BMwzk6m0Zxu(HzoCrfmrbpcL6hE;r3axv9mbWk|RjSs72S4wEw=IMsuba4* zVl5oAWAx~9Gjl|wTg?o!@bl)fcU#+DVW4JYjMlS*NE0`1_f7FKaLPtV+GKOF{(&m+Ay<1An60;1d%}6;u z&?X4R^)w?)VGMDBh#9q!q10!riwvHg2p#IZre^913XWYPKB#xYJ{9kKZ}wgH(IG=k z2%9@5$qhJDQ%LP&`p;kK@LH-Hycj%@`=zsYudJaotVXbeiEd0~VUjIiH(5~5{+NBJ z?=P)vsXP&}^q7jTSxz*n1c=>JE!H4n6FF2ZIW{ewRdR@JRE_9s9y-BFo^ou~e=Oe5 zt<#cAI&Bc`hAZoihU0@PE|-g~+s(`@L;}ont3PRI^}smKtg{l>zM8AG(hizv#f^Z| zv9_m)DI_KWjH!TD)YAMgU_!*CZkTBSq<1scuoIY6*S^z5#HgPnkQpw#!hwWb1e+)q zM&o9Cnm#R!O$r<)4i`6d^+_OV{#}Vvs)p&zV&>oqOQ})RIlvI(R--~_r9tQL^SBS$ zr`5mQ-#vjAH|wYxDdf`7GpqPoJIpL)ftZp8lD)cXr*XtHkcn{)OXNn7EsWxTWK|LS%pBg) zJ%B@4T9v3IB7}`1Z5;~Cr2?>Kq9UVOl6Ah;)`OH&Pp-ea~7poTXy%mQDoks+* zG^_84qc%iD3|$UEApuFpxN16xS-o2q3SkCVF=4&E(&05Dz`%5rx7VI89^(nz_Zz~892oEK(18~K@4bYO-ihIIG^La_rHPBPki$APvBeLeh07Jzm8`g zJTt`nQP9}Vmr>aihNwIn`_Ct~y%zv8ei5TK&Mx$v^Jwg)E3~XY!Swwc5hu+w&a})< zic-Zmhnt*SI1l5Y|NoT>D)>e~H%Z2-VkpqeP&YM3wb;NIocF9wH-{%C+mP}aG_m5y zc_+*eZtJ{)oCa8sNMoN!UQwab%*LwreYiP>+=RzdybjHJq{jrtDNvp+1PGMG&m;^P z>KcLG&!Mb2Y*X6Ht!|keL-l$;>@eFlUGKjz)`$HzlgN+??i}-}&DC zT2VEzIY?{dls|3_AbSQeF&I`gWYb{Iib7^~O#C#n6;T>rm{y%r)Y8>j{p@B`4tpIF z3USjbk_5;x`=KD#RWsBIP?Yj)#)WeI96F66R9otq>UDIl-`}IPiY|)lv>GrYtQ1Hw zGw@IWx|s;t;U=M|$qq!h3W_iBB8oz4)hMocmQo>;T!5YcRa>me2zOEIJ(moE z2Az9&mC+(<&MnA1rV)0kpJ|0O>y{Kwx~=xSCo;2jCP4&29jf1C)wk5U-<`+xs`!QcMdzkuh@pFI-M9!ZTEhT6LwHhD=`nri<{Uj2R9 z=kcjey@5C1d=sy~{<=9mE*HG^=6d*(^6Skv-^7pp=#S#> z{++*r<7kdQbHj))Ty}_%*s;2U()vxr#}MJnkK|Jf&m{$DcV*E++kVu-84&?eC9Lw;UE5C{PM5-J#({e zpH;Yjkpj7Ge4+-%dS|h^#^!Q@#zE=!dfY_8SQ~FdF+8f1p-1A@ zM9Gob=d~yHiEc%0QOUtvh`Nu3$9;%#)3xb0FbmQ=IBzzblxa2Ig=Qa4N542@ne1XP zprU!eVXU61SQ9f9=AQvPg=h)mCALLZS{g;89!CHac^UT~31&pn-G}G81hysi2hJR8 zpyT~!VB9>DiYEo)IioklhPWXe1(J>&Q>e1&9oC7scW|3|!oIhgomd_+$xalD=rA7( z=DPZx^U&ZVgu;MMOa5&8)kJr0o$llZ;#XZW@mf_J>mLWDctrcleq6y2LV=+aDN}NL zCv-mVBnuC2)8tV>u{{sH^eWx9#UXwRtX9qE4U%;-DiH2y?7iu}w$q!90ujcc0JP`lzuJ{#D2 z!Ys%lE(VGxELc|$wE7xSJ(d3O@Q_{FX^8M4R(wCYwvB#G08(O?sGd5EeqCNh6bb~s zX4<*32}zQItKp_W-fu~3uc~1-0i{b{Y3oJxfohnh*b@Rf5n|QU*+5Zfzjif6VdAoC z0{mPVLULZ)Nqz7$Ax#u`!kiTBeaDoQ6N_9D0*bG&P9Bk@p=7BxF({~Rk@z(ifr~_H zSYP(*x`g1MHbnIEi0bs1btH=Y9&)6%_Jfwc3A(pVS-C*DS(m>P)-@pd4j}5fFK|M#gUiSZh{+KTvW5Q#fRkfm)ekgbU+2w z6Llu4`!lf=+m+2}X!SWk>?vd%ESEuBdmowm1TluVSfC6?3; z8Zr%^4zZaFO-ud2D+P-BbEMe1Q>aUN&n8*hl6eqx#$z$d|HOMWoOEzUqLW3^ON9DN z6J_jkXfs&DjZLrN{wj@0%_ESXL;Av1>zUr$)< z8B?ivYSc~0Wa5nU;m>;~3{b%oH-<$3OTCZ0tiJZ)dr~2zGYn5_k7;HhE)5tHW1RW= zFb9rHg@SE;W;1ZqR?%jIh~T(f3^B|PhAVeE49H0ilkz-Oiq#R6tyfxt&g3TMbh7z# zN#CbHwAV)XDOPz4Lgo50(C0=!+VCzlxeqi=vGL&5MH5W`w?5S<|!^ZT30$Zg4ogwR-l3G+2_dQyIP@@FklA#!qp6SsyE>` zGhjMxf$V%s(~aWnq?0)zbLO*K-E2I0t)T+-nmNe|vJ#((D5efGlR3?+(0XW)mKXXs?X?^FcOPla-4}f*Tqd1jArW=@@WZ|UdeFm-m&q-EaGyA@II?b=J^@P(- zJXEhmC@y4+m}zbpiN-366s3{xXKVv*wG^I)cS2C4@6@B{=a!gGdrp8Q|(WeB$P!uUDDWY=c+M`B*C?ToU{lL--D6S)VSJnF-&cKzXWNn zwgcoC_%z4^_I;6^z2VO(GZfg|F;dl*%I?eHRM^%tL7v0KQ{z)54Xjb^2RBEu7(P7A zJAqBF2oeILlxF)0_sb9pWQad&*{Yn1+Pddwx*+l#)z9L-G1KnXf*a9|K4(?F8b&*q zaU$-SIo!}mW?YUCa+D%a@N=tS+wFQE z(v1L9>>NOT{~N8=XE<1ULK37|-_DWK_gHSqa!Ul~wJreLIjAt*=oqCiv>o=WOj=j7 z+8FqrM=8(B@H&SO@`ET@N=-tvPD8uPoT#^=FlX8YdMh48cTtGjYY_CZP(^Tz=C&~I z9k;QW&EXsA4YG1iuZLi2h=G|4t6iMlx1zV{$z2dnlf7>kqNC}i3-P67dki}be`aou z?)ddclrM*cK1$5k>liC>Kr_)2tsObUjXu3ygilv);hRCrH9ik21Vtuhfdmap2u|-^I88 znLmT?{WrcBKl-EpKHhof9lZA1Yd7f6kL%an-5oyjnRn3c@AL2sPYb}&q8g|QzPVXe z&#B(xaz%Z3v!|$3F}1Iu%*T;F^(!Gs3T5>G$2AfMgyPA*aH2(mj}*|Nc=7N8U;6Tw zZ8+xLOtJiAnk(_m3sslvK|H|Ba%o+^t>$KHeYTRq(pu+MXKlRp=~Wds)Cyn3|H5DR z*YW)M^N&nGzdk(Rm;T3J!QI_)Bkat%`Y@xPGdfY?y<11f5?dap&PhET90I|-byy|l z*uR$;T!--pk;L^uvLRaSfL&`{PPIPJ=fE8wx!&KTx3Mmoa5~%Y@}sS;_}$7k~oNllnAp;%qcwc7Jr0myl7XfZ>|k}8zfvrAN< z-BI0Pxby@U6Wc+|ap^NV$+zC|+#4!RM@?Bx#EEts=~4|WZVrp}c7GY@tc63}`o3v( zk7vr+o!Hnq6SJ2JYX}Fx1hDANjIOKEQ#6cvBBV)*Z)rwR+p<$JupP?%V9G2h>gAxp z_uhG52vF4yKG^64(aCID{@Ra(8DOUn0D!RM9?u33W!wKEUFlqkIpVQs1FP3t^Lr@% z>`-?AFQXjYkg!VOmA23K1{YvfXQVPbt)Y2l+07i*>ASsu$>Un4BqA}Sz|GKqzyH&m zqe~3P^s|5e3zgPyQhC>Fx9h%^T+8CMWI_q#*!7mf7KM2Im8Ev=*&SWDLH?+ih_i(e z0$yCNwi1~#xWsD#CJf_dcr;6?^f~g6Mx}r#rC5<>jpztXDuW%yiOKI16EgZ3sEkBI zhKNs~lL)k`i!#Mc?8(|ZphA6+!2U>35$pWh3=4BQmR!_^ypenn z8@2=uZD8=3weHw>JGuNGki45fV4KW1lX%R~u zlpy!`@G#C?fo0)~@h9xano!~NO8VX`)WB>JgZ!^}EQWNJNf4=vDE*%FQsI6hhM30(|TG4#q zn8?Cv^)ScfV(3y@XV&;kX78BibM$`NxnqbYDD8f4)exkHl`JT7;KlQ27(>9NnTdee zuG`puPr(ouJ2Zx}1g;fFGhtYCW_69gQ`Myy#lcN2Tnp~_&hD8x(a(Wa4O>4)BuU^R z;($uW#W9lvPw|Ukb&DhLmDo~C)9|3&3dZbcPQa5cndCGhfj?sle5lt!g>f7W5W)HI z!mi=k{9dzxa8U&n!$o6E$9qq(m>98yZGbC*J;7tt`zV}m^IGp^}rx_oDx^epofjXVhJj; zH0Fp}jRG#!Oo(2`VyW>vOSu!_Iwqbze*tFTXcd#IktdW;YD23957&`0wR=qHXe=cjD5lMI(lFq#MyPIHY5D;YAnY~u)xgB%cYmoQ*7OR+;eH(CF zd6FPokB(bJeyyk5al zp990YU;(jiTo@`^rC{`dZ@%|F9$vgiWO&z!qZCxFY3SrqakLBOWKYIUXtz3}-iKG3 z#M(V>X8z0!VTH)Rix<{E9s77uMPo+uy`*%-I8RU^w1aUe6>=2od>)o&EL=etc2@GF zw0$pDkz!#Zg2=$-a-=M3J=)#YxoSdUJuc9*r{F$EcjFdt_HKK61_l|{drqIzh~hj? zJUQ-Bi(!!^>x}Gq&!vKDfiR$8l%t}OUBhuk1{AGXDqSQf2PJ2iqYqGJwBv$O8bH(1 zvP7FGWX8G6aR;qx2EN(Bg>h-s{=NyE58adAmYSq$_rgKd&59$>6H&+8E)Att%(ENz zSSOx-@D%^@tG|mou6XVK3BLW^ckw&_&+lM7AE{N8LO7aL*r=?4jLoi!QyHw@qW5bW zH^NLABwm@TyF7??>S_GL_p}cW58ju~Xzj??z)nC>GNt~?z5oCq07*naRHQO|{f2<`rYSsB`gqx`Q{QQ>Dj4ijdab>gfR9qVN! zpN*JdW(LubwI&w2lf3@HcJArpG(wG^y~4OOgS6=9FZ(_@!+b-A6D57m=SXhRX;nLY zpvltrQ~@mw&U=LNI%~o`bFp73g)O)e=SZK8^lsHO!mGf9cnkf@s@YrrLC6PnbMJ{yEC4`(KdE&*yEV%kAk{etw4 z9RF~lL&f^rR)_ejhRz{M#K1Siy4xPkxebBC#WZoA;>gK0$jT&-4++958%`>PS~`JC z4)xjbLgb%G{wyllA9ss-^wiNNGA?li3p*8^P+MQdOC9mPknZS!kLp+P3pi3(*l?b6 z+D3+bIH`^`60z>1a9T&QI;sFDP#F1LJ37J_^1x?ha^D>wB8uvZ%s=_f-@=!_@*DW2 z|Na;8H~yQyfq(Dc`FHUXKk=9G{h$9l-g@h;j~#dXiBEhIpZ~t^!AgeUh*7wtvvUc@jzlf)HgcEH5-`X*J3oeBvLBSA`@)k?(~%-`E{CmTs)T(g z5(z1VYB5*;<`@q|Tw!;^jgdmoK2*2+L({z;Nxm^AY7OC?96jhgbVE`w0lO&gpL-zl zMm(5G0q0OgJ{G)qczvO(QwKieBNrhJ^=q3TbL_5bC2*eNNhxupiEVZRy@SMUFZ_=9 z{kX8n`CsonQvehQMHfy)Eg7*RoecXmZYc%XjY5gj(JgWKN+if1^O|P{iUB5Ij@55$ z11QZDC;N3}L$ZbR4zp0iup)sS_;UDgCc1LXFrX=LO%V(~XfqLd@A&QC{=e`~e)Bi+ z%fI|9_}TyVZ{gqm!WZ!4f9Wsb2Y%q+#G7xv`LV8ds*1PYej9)Gvws#}{>oQu^C!0g zHtCl2Q#(MZ+D0ENH@#OY8RVkvW-Oz^E`n(aS|K(jLfjKK%LGCa1E z`E51JN?>z3J9j+SZaUnB<>|Q1cn#-yy7`XN9jbbp^hwh|IL%?{8pAsAc1^{G%?^aE zRG>IkSM1;06TJ*tXjMmJGSee-fNuTNoc}y2BR8n)CHk&pJOEEnoWr^{i}&}%(7?ix zp12q9TIL;Ntm#7C4GR0~v|%V^LOlZfz%BEJ`jyzp7Mp`rq+Vq2Wk~W1$COr#)Qyx6t6D)-e&sE1fPqB z@k8T#P^f)Qg>f8*BMN=!F(!tJ8PxKv*r7}21j78`X*4@*dv$;h83aIcvy?bKHO?o) zamefZQw*0EYm*w@(Tp*im{C$oeTD&N%n6{!jMIn3$I*-xse-A)x}W`hl-P^WI*)OQArfKs>3y>{ z2&cFo-Eih}mSqCk@bhpSEvco7B9YnCtY-t&>3zz!me_EEyr=r0mdWuh14RoenSfld zjB}7hU!p`osv!y4XaUh_UPztRz`l;?4az+zKQ*c#BKZh$)SmzEYR?24INNn%$Urj% z5CfOH!$q!{w6*BDyT7|%&n;iOtjFAXlZy|PZ9hLyqDnz~?j@&Auy9TZ!k-aIq&V|2 zF{%qbt+sXE^;Y#TfJ`Ts6vtQ=RdoOCkJ`3$Ye72>?{~hUR7(Z)eu7Uk*tDZr>X_`B zZn&V<14m&zAE(beJn5olB!NyaoreDQ}_VJ}s?2{Ab9do99O%LOUuB?>_In=KzR2&0}=UY848Cq<$HKQgB`$ zKmuIYM5|sHXay5yLKv#3!#bsFIlz2C#OOcd6nLGpNGFg~RuchTT51E}{6Eq_{K_m!SjQI}KMzL%r_7 z_7+TG04tuJROoncY%W1(N6#d!=chbTX6I_M4n|cJU6{w*E3zkPVc)~0S?W`VA+iOU zC|(oZD2;q7z<~znL`6X<4KmC`Pzpmy(2m1rWQGklA;_Mmvv*9jJ@MuKz!=^7Kih%J zoqZoKo?lbYsQ?K&f8WFsCQooD|i2_DP;H&0s-*R>p8-G{_7Zv!5nt zxCv}{-)7V~=(OuG>)k}5(-!TlRY*#PCwE&-Olxt$eCiT3BR$=!S4ujnK2nFpuL*M8 zF{o~|AM5QrYO~?*7#JRO5l|Es4hjB}+p0e&YJ@fa~>YgV=sz zZiXlm)@=R0+=T5kG!>ThC6B%J98<_*g{bA=|@tDsUe#l&jBXTJD9)a00;fiid8- zB`OT6jCwh6|Kthop1#0)^C?&b=XrHZ@Zx3!^4bVq)AkZIY6Enu?ObH9b6x`{kw(xp z7hw=QEatO-!wqJXsq%>-ib@rwv^0-$61u#W#D)2&*^1ok!}Wz>vkND_+Oy!09%87? z%=+`^xITS~7au&u^~nXTRTOS0AhgSY*I)l6K6v&4o;|w)+Wow3d*|cQ(!e=ofQMLj z_LvYNl%pB$xe&&<;`-t_qIX6;_@iR)m8qaLtAZ&?Nl>zNgwVKvh5%Dhs~J1aF>+nz z+Q1sfZ2_~LE6HiJeVo7)h}hoZa(`zbHD#D5NWd}hkNp-GkQR{7D@*09p<^7V${=N^ zuyy{P0zm^G7Zh$7syL@$GJ)KT%QUSfz-uC+%FO2F3OE*iNC#R0Id#Vn)qVg{!F2Ot zWkUCL$wE8>mDK_rd42&(W3aX~#EJ)AI8v$`4jsDcd&mO@Cr$M8#QRUbj<5dS@8Yxn z+IQeP{@iEr&>!%B|MTC$Z~xPOYDS!5W|*lax*7Vsno-r$>3y7N?GDAwjwW!$9 zehQR4)k=w|MQsGkiQcD+d=0+bW1bU3&J3A|uJXH?nFM1u(3#Xw2c}6vb4=1Vg!kT0tq(%`@UexgcxW{{|SfQV46HSnmVP ztt(JRN;pb$!ct!Xe}r%V^mBlUqSS`V(LmJ=8`A=0b9hCM+Flmy)Glr~+5w^gk<+ME zQtWf;hD@(YI1Z~EIbGXh@wu!{OuT>|1yd)6bm*y`qBp`2Q!zsvvvst`d|ClH6{VWV zd8l};O|^ZV4#Qv5Is+=$Di}oUoLCLRuR1Z$iDHp|pBwoZH|79SP+T_=QuJx-f*C3f zFjt7L8KqXkbB{A?>PoGSi04eDn+VTI8;n`g=p9qVs)WuH*Ym{P-5rXb55mD6;(Dux z&rC`p&&|NM$gF*wzIQdlrwn^est{^DOgAO9gtv5br*^W}nG~`bl`i7O5)TM9Gicfz ziG2x_q=gjHD+i;5(ftlFdm7b#F=oEZ4hI+Y@=#?m4+Im$V(S>hN&ZY1s_|d}9EcUp& z%#j^L_RO}6mo~jH{v>|<$A28({oUXFQfxz%F%|k-fAHBbYCQJ{0Zp?Q*5Z3g~_Qg zAQa6`+89vAbrufSAXiAF+OfKbrz2@fsrhqbz#ECpL_h_y)vF!gn@`@7pYdIO)V~5l zl<6KfE13{GAujOR;9eY`x#wQt!wy@sIg;IUyPlE{uR+m+8okQ)`|1cN_`_XgV#H_e zJ%zD`O_`pG+XN06GLjP0B8j>U$69QN_G|1TyRH+Nv`il%_@;R0ShGvGJ$(Z#j?N16 z&=gI91vmXmw(d)&=a5}=fqu;A>DC|K*fv|wpMHQ}_{CquumAe5<0t;|PvFOX?8opu z-}5~m>zenu&wUPm@h^TizVaKtv59M%;#8Q&qDOZLnMmR7Rao)VVs5G%)~0HS*qTPZ zoz_8H?E`Hcj4_n0RToNH?eM*e;~}bsupNfE#~A)4p7XX}Sx>!NlzgPqaD$!?!o}W~ z9RhW}hZw$MiByu$m?i8J76Li?w5NAH6-PMHqe_f4DbUL_n#Z_#I9?9kHMG^QIWEjA z8;DV;x=G0m&V&?>&7g>dbo0Zf{XBQmMxxmfrBx}1Q}O8ylq8Nsuo4+2E5yb44m{B(zCSXzHRWEHnZaViX1m5pI{s^`uOKJD(=9cL6ym~m z5(Ki>Zg+OucUw0Ev~K3r=--ZIw7M{^TPl8rXsz3`AnqU9uVBr4WKKVGr_C7;+>p~TvezCrl~i%|GD3zOy3gp1 zrF9NtH($O)y--RdYi)O67m6b}6egTVXeIEToZi)aAjNEHuFXIVHwAduBG<3SMhTgg z%4^4w`#u{~+nQZVwfk<)8_IyKrNxN|hORWzv?gMaym8MwI19gPf*Iv~uiJMcSt;b# zUg6ECY>QMYK~&N+lmiL25F zuICj~tXH_S>N_t<{Cwq#yC?S$IgOS!9&VFO86>d%9)k@htd^>1M>E4ttmDzr?9W(L z?_?$uKE`S3Jb3497?jleTAA4>daz+WiK35=0uu}1X0xaxVYb9r7_mUIQj%OTr$XoO zp_(P-l|5ZK1e0ud6^7PQnx)`SAJwkS#3K$D4v)$>?(Z;%qW6iZJ?TD`s}0FX4883s z-=YK-&7t80Qk+J@(d}8+=Wrybrl@gtML$m)1aEsO@f3;~v;B-5)d$n=2QJ>ts1qn= zq>(gOxx-U$D;r#e_kp~xN!}3}>&oaOX$jTOt-=E`6$J%a3koR)ErT}VOr?tEhJq6P zt$t3Os@}cHY5XHrOgats>$4O^kVeErd-lY(Bg~n}8JKoXB(;>ZOy7^xlJ|Z5S*ADx zn%ra|>FCT=pcK^0f!Zo+w~$1w1yaizO3vxs+c8(GzQ43T-)e=-Kz=hgXFO)8hZ~uK z7Gn7BH4`abjkjukY=5aUyWVo&D?UpCg&-ofHwx@A6jN;wwdh3F9~{IANs#DtO5X64 zv<>089hQ`xCr(-z(6jdx(xy%b7*s9wTr&)sD|7GOGbQ}qpumo zuugJOCtwtS#6whLX2KB}o?=T*iwQZTii54sUB%6xO3>mJ9Hd^=Vcn@ZO-wjdfnt5w zjTBFw+yeu6@$`k04%7)0%dnPZ0g5!YsgwD#W{zny?#`re9hYY3cz+hQYCn63i5QU#CC1a09^i^SzVG?>dc*8!pOX8s4SctZcG2Y zgktZ73;JZt^{)MjKCZZXa^RhBeFty6@rG3&^lkfNQ9PrZc>!3nnS&3dRY3KU^Nv4+cOF}Cd3S% zaV!q;+h2QOwm?zTm8pWN8Ql6D=+gorHJ{J2Dm(p5tA(MMi83!v{uo{dbXQuMWw@BZ z8*Y9TQOFo}6T0!jux8{&b4tUk5-_Cu^A|UoiglbTh>@f>-sb^Wvj*||7k-`8!)j9I zu%v$Tx%e2{Y$&}^I9;`9jUKb zjb?OLyC)*#l2mTLHH<`O+G5O2&e?HZ&kUFpG9s@o46++5?OrXl+BG9)?h;jun|Y+o z8B&Arkyt5gv=Kjdhb~pz9916=#v@T4!>QHlu~MfuxY{knvG*Lt1|WI-Q*KazB6@>M z-l3+e_hRo7)$DT$IIZE}{xc(i z_D4acuLO^-!RNMd`nbfANL-?LmxNGuQNbTlJBB2N9)YTffohlqA|axV-=ZC#8RC-* zZ*fDe4o^eTP!3=XoBsP>`#OI1Z~h#<^rbK1r+@mV@dH2b10S29^yyE38gIY-wqNV| zs2?`))oTDA1Lo{QA~$h3mgB}ukzL}*hn0P9{4u;!%Cu74YdHW-sswHTgFt-0`cR{L zjs%gX_XLzB9wauRE?y3=OEA|nZ5U>{b&~pKB)a0`a}yEJ6x6ahGpDS6o=7`1N2Ai# zDQ=r4+bqUGg+8VmQMQiQc(^3y+tYlcbc4;uE*!>ybNlRwUa_nwwj^GN;_moBq#^~( zhKt2kAE1$y7f*zF&sqpfh6|=l&+gBQ#1wP5E@`6;eAHJp-6XPXh~=0tQFjx<2QxLm zpuRzM!J`!Kkkjn51jPoQi{*jW;YAhXE3I?8jy`?$dl;--=GJGRJ8c+xE{%d^0DG z9L#6MGO(?`cj2%Xy4i>Oo~&hVkG=zaBzW8k=&=^;)iNLUd=Ip7wos>OuDoP;if2ST z^CL04_7=F=TYZ?BX*W3D8WHr-eu-`p_A6n&@1<`49^AYKUS=ZSygyz@#1kAK%Ii6v z?=kd=!4U1wK;C$}KG>rDJBoEH#F{wVO58(R=lr%O5kJJ57@~>k6rrW;1o4IH?K|4K z)(hEzEd<@w0BcXQCBQRitIeQN^1Uqq-DpQi?wGO-5DcRovSteIbh{r&TsSR5$sE&= zhh*y#9IZ#yF_T;RJGRnM%OTtMvS=^J6tvM`oT9MpTjTSMlZ)+rR>u}LJIQWD%e9~4 zKqqAFU)-^ihoK$9fIfn1Af zo$Y?MWUl1;_hGe5bIyEDEQ2m?s+u&bH8%sxc0KV%i@Ck`A02|#5^YDTmSO}0RkvyE z_5@c=lM}op&ht|&QBn$R!&^V|ix2!sF$F$sSmpH$%?>_nrWB^#jN%j#r)Mpi z85zpl2UXMij`QEAFi&arB=;T|?`gFZSjHEz+n&7-v)_msLRr)V=NMWNIc-W%s;9gv zgVkR3<Z^yD6OENz;$k;gvhYLzv|ZaOz|O_KmnkX z1IMMgne=Mt`suW;qoUMe-m_TemH%DDR+wGJ&1+a?yaExV4Y3ooU7`J$dI}u z&|>c)QiCQ|lXY8zQhX0_Ke}v7tDq7oB_jb?9f2BO*v<0dQmTnG;&eT}fQ>~!-91>sC6MgbW}U=9OJ5IYD%C~FYlLK>H# z47q`XC&oO}=oa*}Nt!*F-Fr@>a-$rE>DGC{csRD%sQ7-z&&}~r9R4gACiGDW!ACHr zVrs#JrCULSO14jsX+otX^ZZ#>@_3#GVRGuqJUd#m>v{5;F9!Vy>f}wbJ$zvPEzsh1 zF(6BHv)zkPSxFN8tM*^6UghMol489q-ffJe{FJS(%wDNsmd|TX#C*{T46`Sqm?=b< zt>ZarU&4g1YKg&O6>BhW87>z%Db3#B9;hB#<_=Ml6rqY62lBVUWI`w6)}bxieKG_~lECN;wk zt9^S@2gY<7!nF0T9t}kmV>X}3xugxG1JstFul#UMCZ;c?>52z)T?IDfKQG=vftG z|HqS`6WO_JkGWzq95@c&-D9G|97F=cM~CrGO?aBIyY$y7?9Woao;+`ErZZ~b>a~f& zE~dMAJ^}~6j>q#x)z-M?249LKHx%QXAf6sZfYHrvjJ(r|!wN&S0@~B46IB3Q3c5_l zSV0-X7(d_}?|&Vi{M08=Tfv)ezlBeJ>Jvtv@w3OA$XQ75!`Br%7nbVS`#?gcSgMX> z_DT$@nS#&oh#O&xhY^juAQ@mVLXr6Q4(pDNa6p{R+}v-~yHQI4j3AZzeJ1X{Dzqv( zt+GIp92s+GQs3Kq_p)*flVXzzCoa&sXTt=Zh-uB|6x_&LVs`H5szSx~1LDt!5b?0i zy>P)ab&swXP(+Ewa79%*iQQ!Q09&!@B5uqQAg)C4ooPLtDhlvSG zHK{H`Df*@w(P8?&pox{~uQL0scSRI(B%4-3}>GYfl__g1_ejdH0Mw|8_ zt9k>#)Q+yJval9LjrZa7h{!!s5bB~fLj|m>^WF?Qejb#G(yCEErcZu!?V;E@$?TpX zby`h{tIDfHmdUMfv3W#jjBZROng9k=39XF1>FxjkAOJ~3K~%IPlMmmcN32`7d0^@} zvVh|2t-KmQ|_lQMmEJD|+Li4QuX3o}v^>l&(?d10lE;BGVPe_tIy zA&Lx754Tn`oi&F2eo3K3azIK%_}{<$75qnk^{?VT{p)`n-~ai~e=LHM^>4RFsCC}b zifa&T8v=KdMP~%Bdx*=9e6@|1l59V#WxD$#y(%6N73|RU2<7WS|BY!yw_zu(#38x4 zqL!6L&`b;AM)(aH#LSLRWT$NL?nzt3M{a-uhojj&Qx%&hQ}5L<)O}cPnkTr|AQe9s8-+ zxas!!?Ix>I0;B%2IQA-|W9%0qVaY5TzH&X6V!*looeNJN-vi$y<6}Q^Be-YER&U(v zi5vr^3)>EJlmg+7vQLsm;p`pMxzhDR^v0pBu+8?O#ryhH*pb054iggL9_vW0j47Py zZn`lONG7r4`cbt`G<7j8o@FKWJ!5#KN-zf0O*S+8>DT9NlXIKVJ^s(y`&q(M6D1o$ z;H|;K->1LeTAK}~6BW1ycO$#1ILS5DYXd}P;^hPL8sd8xN@@E}^AG{+YTJ#SHt;vh zS*iA#t!}A!qIAElU3^S)MlEL`^hl!YpV3ZD;1Yxr1Dcj%2TvKA z3HHEEikqgQ*FKXl8RPHnwxX_}h4&5m@m`IuR5OBPus^RQvg?Ocos2UP^MyDyGs)mg5EoNKhavVVfE$}vpouM92IjC&fcxZT-=>sDioIR?W0?_yAL94z;8)_ zb^fS{Y>%-Cd4D#-?BfaAIKNPuU)DbL#!TWu&YXsrZCl@7Qm1^F)?K8s#JFLorz7Lx z7|i^BtBFoJItV75T#k$PLJwTLj>&Er8xB1@JmBHsYWrsxhBG=Br<-8+#NOW@ps5%S-NeLs#iVXRgCl8)8wy{11U1cg zkTgD{G~8c+>$PL_tI-pt7}~kmn#wM;r~+MGa+vJGypPS9F-Xv*qm+tS8i)>PF%e|U zj-hte;iCanAzA<}&@e$U;oyP-!gW|8zLuJab|rvXak?D=6lqbzS2EdIrnp!c{n<9~ zB(RGZ*ZzRBca&0ae|HBSR+({~6H*jU?(R(hyb4D5L|lb+xEAkaR5PEbFv?-+$8!vv z;{}d-2S&j-Cm3ej7-HB|&|GG#GVJqk=?Bc7^o5Hz18qw%k$4K(*YDvKEIyS0gK&Rb z*1mx_6W5A@;sbASp#ZyCbGv^-n8#F`gZN$`dvHBG5hSGH81I~sczsnqPu)mpUBZ@v z>|?lKX4f{7V1*l+3*0CHk~|v#YeJqjC z&5O0Rg;tK|D&k;$5juC=dYCenw3a%kW2y;Ek4S% zpF!jTKkRv9vzVDCsN<+OE(eBJWdzOX>=SqGFjM-lj$y3|zN@}BESS9;sUbQ{)v&%0 zptS>BTN)2*CDi6dp=!jD`{QEI;L%MaBcmCVLRqx~-^&)>DghZ=fI!h&+e9q;l!F}5U2mdsEKBGlwL6`>YtLsH^a;GGo%R4ryGj${Xoz^mcheOpfCY?41a5-tJ-2H zcnG6^T10WN9mavGcn8LvBt{=0eeUSiaD~h9)B`P|CrV(C`7;8SHF&q#FRFp0FXoWK z;p!L??p&F)rlobK*vnjC*M&YVqJx8C&_;{MEJrDVr}LNuOpBwK z$+L?BpBRw3qssAM1XSUG>g(%kC=~zsCx4C4KKl%xy!{lv@tePiU;n>p$b z-QwJQqaclVP90_)Re(~TNQlY$#2g)ho_AgP^C-(G75B{Jc9MJYJw56TrQY!T{KCB~ z_MOo>tN^$3fa1X2?r3=DHl+{udi)<^N_7weXS0S-pb^FTdsxL%l*!w zZ{a^zurE>Sfzdl&o}U?IRw<%0XHDk8)|rCZK}tnYlG?Nupj2jPcjCZHkje` zxDTN4O!5%TcZ2J|Ss5uton_pu!gbuyr_habJ0ihF`aIv(>;v(2NAzMU+#K)Ty^9&v z!0mS8JWr?ydZSyK>xgwi?>5blS_*1L3Yp<*4S?h6=|)jB3cML-Cqbp_O(>RiL)8$j z#@)@laqRY{wS3ZnK1ws$}U0T@XFL>?1O~;gqqO>q3X17zqm3hPU5|_xFnWn@b}IJ zA)JFezIO#8Hivha?UWaM8-c*7Ww{PxSTXmsVLPk%!~GQl9kYS4J==7k5nIKktUNe6 z*FaoCNxoyjQ^A)ah1cSUR7K|B)mj5@$KuJy?(XHlZbZ`sV=Ps4UfRP|HC@GK%+gY3 z*|AvZulC3fx!+-4^fgH%Ti#MSgB^V~h!ZR0F?3^nbvA_mBTE{@!o@y^pfzz5V2q>BvfoOYe&oqCqmS z7^d&}<*)aa#0{lWJ)ND09CLsq=}LX&8s7)j>-8ZG;SB=xiGvkHV zI7E++YN^a8hS(P_Je;mRGgEcG*E_91RdKsLJv^IjQciG2G0rSES%L&WUC;GmMT`ln*u!y~KmTTASHi<{FB4kKQ92%_6_9#*n|q*?O(L z#8w1AUIgdhJu}3OSpM@o=a4VUhbyxV zH(G`4jr{HN%L{78fdGyX-+z&HqWK@og+n}ko}`g*ebjKD1(`1#1G)rBvd2qcHh$QU zuJGZrQ9H$r;k-$tT}C^&m*jF!+_{PpQ)`CfIHOT)@6#J1m)#>TQB}xGkm>}_7Y#4k{ zEM52zQDWfd@jcG-Hr?py$jO=)y^}N%=s3s{Zpm~4Y`9}=ImvN9I*wy=juuGdmp`!4 zu^P0!HP#s=vYz4SZNSlq&yM(_S}OD4GB(RHUp|~JJ)23}X%p`WBL(=q@{UucBYO$S zb}=<;B8pLVK^8pgOg_&Vxq8;vz$=lZTeM)bKF^Dq*`iu8gvfI5K8K%&)+to9$afam z$tQ?=;quiA{HzF`pP%FX4xD&T!6lK26#AD~4;^rY)&rsy9T)cxFn5z; zuUJkBoNrD@DHyJdh-!v*-8oo__q2D5C@e#*6}OYFDKm%N+050*l{Y1_xMu|1r0awz zTzR+ZApTjb1d24==eFn|aNz0#V_fjj!)c~?I!-(tXE=0ZHME0>1zD}`bT118N2N$T zQO?{~nZHfk4bq)L8D$*Fdz679Xk(xSHR!DTo?Q$GK@o<>y(|#kLag-c(YWD$ zJ=0YdB$|Hj5EKef%7I!1*PUV{hoc+^j{1fO`_>@txZO_FBWpR}V0Ri?3ZBl`t1s58 zw_9McWpI!nV`iT-dMKzMN&37l93m)3#c?}v+yo*OPoKQS`Sb+zf$QaEqG~h3WG( zHcoo<52vF)a=TmS&r%`b`Zc_J{+c39Ez_O%a=)XB;kp`n2pBY?F|X?d_xlSi@5iyC?g%hz!e$h5|JGl zm)6<^h~jpfFbD1z?<^Vj!M%clsCx3h-DRFtNrSK+YuvyAqG;rJcU*3`dk4gEtBe}D zt`_2Cjk-PK(Hv3)^$g*k3A_ywk)lsa8YIU^wUP>A=IGuaF6d@>=?(RELx~}xhUmNZ z4j&Zel)P{F!cV&#B%XNTusSFyDY9kcpgvHsN_>vj80Z%Vr>zZ&UI$4OXDv92hB2w* z%ddWc`}K?;{K~K3H-7Wi@%{h(`}p_&{ztgq@92HtJZ=*apTa15*-|K;1Y^hjr9p#a zAURMrpr)HPNSa7=wy^GK@1Aj<2g-SDvmUOG(F@FF5^skO++Xf^I-VjTfqh+xb)BTn zF~wE`-UpwckBy0ZCh9}lF%ohJEUq!6C_C8Fp`Qg?!S zAscZr=_&}ZO`eC@Hz{%d?Y+gYZ~zz-R~>cUKacZ74|Mf;gdiV+K012m{cQ{jqbh~( z$8kc;f=V!=mI||h$rNs@JKD<&R141IHV4=M$zC_PVT=Yh<$Er~x_cM{-oAayJCz9b zNY^>wje9fsBm#+gMZ!Rqd!MAiBh7F@@}rSJ;<@wt)^b1(p}1%?T$hJnn`g)s{RA^- zd`M6ZIHNfqq8kC($ih13hwK^MaKGQtT8ns_n%eNS7ulLe@~+Esu*RHJVwiqJzk)MN znk%l+;GJY%9|!BYS};Z${cO@;kK;f$$G94Nkp5AUu4goSiIQ+pPM)ponQ-pv!y*zz z=b2ecofNQ)x*DUyhvD8X(mY(yTE}@l0U`eM_<4#K^ls4~T68+jYvNWViPqtLRGepV zwJC84&k4+~a_E55XVLaNdz038ZPDrjffuk7+=x zqpk+x*cz;OxahhMZ1I~91<2lDeL%5BhOA@dLg0N!4B_2FBRj1{N7^-Z938(%Vsyvf-V5VLM*uYNtD_!~kjZ z4%AB2NFrLL#HGk)!?yK~|Mh?S*Z7k^`4jx`hd*R~%ZJ9efA_oi^pj8V{QS&Zv{)~? z4MldhBj68ieoUuTqRj%o7w=^%wdb&1KJ=h*5ebNkbO)?yG;}-tr;; z%1pB!d8TviBRRZF`z#98Kv9k^^k0HvLTu*3#IEb+ou~YF}>XC=xdAbpRR~hcB&gkK0+-og&nHgh?s8b#U z6R(973uCQQz?aW+zf3=VAKwTeD~@9yAb*pnaS9k7ve7pecb?m&EL>#bT16h3or$lW z@hzEqyyt(vzEnlCn`k_b25lk>F^Ago^Ns;D2j>XI_eQ>`t`NrOQXo%@XlzG zcz0{zuqgA%BY#Wf5eGg4;*)tGk3xo73v5`&(Fg9=MP>Gu6_?GNe0O+}uvrhS%iX$^ zk_hBeWxuern1Akl!RCgpipweHT3zqk*hQv$#yRjX$j!4n*K-MBRS6_~4)Al3Ya%dL zNDA*ZQi5*_fBlSX_*>NCwc_ETTFOEuPQ`IHE@MzX2GA3`I)w(3s&6F_U_k+qv@lgTcF%Ur&H7|_M@zsT^3gNQ8zQ|qY>`kDcAt(>m0OG-9c@smgKE|pI<9JF^Q#S26#Aesfb3fLCa+E28?cu=lz|;E-uaMOj*m(={ zjL5ZyIq;Os6b*;@e6MovP{k2$P(X&rDN|2ngZ&${}D03Q`}2>*_eqHxR8H3tBb;}e75AwEkqWmO^{qtA_7c%)VCWr!K4Z8Q9z6}ZSruvqTx~jk zHAdV5gGM7=4@JL#?m#i)&|Es;gRYq4r0^r|Bk3O1P!@@BSRx`&XY;pY*0|B#ltLT0 z;A+fy_vjbp9Y(7{5Xf7Jb6zMKP!Bx0fP)EX5Iu3L%=@)IrVBR*zO|ll9@pTb8pI3w z)nMLH4(=WnF&-+fXjZ~Hr&eM&-2^@o<&TGbPlKXXm5%j{v4QHUca=gg>oH_dge#Zt zT9FWHgfoyrsBFeY4sp=Bh%_BsgMpAY_j&JQC}Z~$=Ag)S9$R4v48JL7z+vcZfoaDcP>yjEmzqD3J2I;fkUE^+NZet73G(lzSe;CTWBQP{DCj95Fz>LMSy|d2Y}Mna%Yz zMU)zmZJW56LfZ(X6(Z8l67dcSw9J84haUnQf@@q97F4?Yd%I#l4-yHK{l8MnqzPo- zpp=TIw-uj!`YE1nPx$Kj3$%Xmysa{O5e`fN$RuiQHF=8PONh-%VU0==wLOTDXY7ED z7;M+&@{JnUopntP$pvdY&)OL>qZ8KMcFc1>za}=~S^#qvB{tskchB$W*c~GV1BScZ zF_ivNa}HBm>oMG~Xq`W=g5szu#}-o+#4mMtI0i8jz#NVaQx2(Gf8kKZ6s=2mJ2|jX z0lYK2e8zh!-$x3+VlT*dK5B_0>e7sYN~|*v1JXK%H56BzXGN8Y9s;o5#sl$^S>!;2 zV7TC>2PzKUNyQ-^wO8Q4OO2SGS|C$E-g#CPY*D5b5s*3DCJkr+P!|m0pjbTm8elEa zu14&$1A>m@xZx}n7=qq1H=IE^wcOCgog^s{*l1hbg*h|XskpVC=;&zI1=WFCBZ5py z+(CFgzq~x-%dfw{yO*y}D)8-Ze~!;S{~YJ-4PIXEXstt~Ll2!Zo)nIok>+r_9Z)@S z-5YwdDQqWhUQi4;!`0ndk8fpEw?#p{)kWtyeOa`eU79)o%GRe0}_;6iYKC8izuqr?h_sFHgLO@`8$l^ zGwzmAI6TAMfFT|Z@g$s)f~9IWj{-dp^Z`7-+%c>J9(#fdq_b~?62gIDB({m7tCP6q zj(cwqYb2>aXG{T-R;~i|3NJSA-NMp$iVkad%G#s^5!uE%C@>KN8$#EO`q zgb<>&7IfYcQNDbz9uyg|CD!Ek6y?>GH34mqZyP|Jg}Y&CuT!NIlTd(Hek zeC8^aFwqT(lYPt{O|^p0=V9<|0B;Xn@TGK+N2l7}y!){5_W3&{3USZ9O!bAC;dVPi z9kc<)G zCT&)N4qoygwd||M$Y%fmAOJ~3K~xC(8m^mvoLGgt=!s(uQy^3QzgWvFYjQ?r z<%Mv|QFW{=o|yso+7&c?8op(#>q6p3Lk00ONvP!z_+6FAv-EJsIkurXrt?bj3=u@! zLm=wpBP7my=FHO#qFDIpm4jU(8;=F12(Lhfb?Fw*=2bXtRG`KjH^stvNjT~Hu!$^3 zHg59rFi9=~^=(aW!$}pz+fP5m|M<~G?@-inF{eN!goQHZq2&<{=53|_0N!Be?5a3L`4pGA~JJulr_(u z%l*2B%ACJ_2)c_ZchSM?+H39~h&-%{IRv-FCS@a56w!NI$lFATD`vi3A`$nT=-j6h z+X~67;w8Sy?5Y&-%?m^B-@7q*zTXRpJ_U+YPhT-@**(tIsZyD)uek!3V8@X%L~QW<70yMk!P~`UTf<% z?Dj3sC`4<~AjP)7JqT1cGR`hw$*l54JlKUT8=foQ^DQ<(Y>`u@kWSWf+THS*-8=`0 z8}TLuxrv_N6ep2+8N)B()6?h$j<|fv6f1_GB!qmjkuxmUPz-G}&q!gj%w-8ek?(&D z9P{gxblgDDy~o#B19S@%Yd+o?DHEgx#K77kvW1BOD~oSL6S!S1aQSPfIM4Wv{7?#i z9v}Stlk&4@=v-eFvF0N)Ofw5za?r?k(*tk21TOnNh?#3H;t%wkdn4(kh7(-^v2QSl z)K^OGX~bTn183WLgbOD>n_LIFHN8uSk9>?dsPV|nR0#B_vnlP-Sfbm^h?9)>9JZX8 zbjElL5IxJu`D1Iy0CFv6H^HMZUZd8?&kZUoPdNm3uX6&^W#vLHW{E))n;%Kvpm3pp zu1bmD-_BECK?%D9Q! zRpS~Q#iy`FMZ@iSpa$LJI1bc$5{(+pY#9TP0u#X~%5xBbR_)hZld@rdnfFV?X`YE% zNIV(VNqSPnao+e&jj<7*d}cGcM?(<;u@aHy14TH{aR-JAWDw8k!*Gp(HUceL0tur+ zM7%}TY&88yN+?)e5E2H55Y?Il5O;?hf|3pHz=u-cp>XSPZ%_#Yr!v=2szbX#%}}et zw8pb3^IqJIO`v! z>m33enO9(<6Ahar4>J!J8TV7IHH1DywoBA#eMeBAKhBBH!&;w|L=aWP|HzM*xTuJR9mnV!bK5N#Z zM+kUg_z(k`?0fcMh@?UcALt{5MMs%~f~-}orx8du!%XCuPa0B#7ljvrmx88)`0jL5 zgG4C=Zd&85E~Vnk-UEPUd{(!5;OWg9eCykvAaEUWASGSfz zft(;Hs16y_Dlpc{(XK1b_53{t^eA&!L?>-F^hvO?sCAhYuG7RKqB!21Trtjj5(P{G z(GaJ3XOFH>+){#+0g$w%MP|RyMu%w9S(dpXX-DUA+v-!FV$dYmQd}W0;otXJhwv;! z2`b>={>*bgU|?<5&6yG;6^aAuBwL(?1Fjxo(O%f+PQ0`#V7<%f{PYBu*Crp^#k4TnkG zsY_*iSoSGL#1KS0g$hEz%QIt|D(@}MW!+-!7z0uZ?_zye(5~+De$VzzxbO4+5chV{ zY=ZVD%P7bpc-Eq05h>vlyFDWa;mi?73QlVD7+8;1Epwea2D+1!SfoZDC}@~M0f*qz6Yn@SeycY*PKi+4Fb;~Jz z^pS^=gcUb(w-I%X!8&kgfhGleIP2>|Q^lImVZM7Ll<^Fd$ny65eNrr~I)6y@{8 z!!Ufs5U+bpnt)csnoZ|<_R=h7o2p7WPzcfc7-2wj6p)0VL2a<;myhh5D;RI6KtVxO zTD3e$I3AhgLXqeo?h&;V+-^7YPL%(~m1Ja@2r6@{7`YVpV4nAa3P8gA)<>IbNrpkI z&fmdez|ZAP!I?`KJ&uaeJqWpR?*#WUmF3P~qCL;%eEgz28g(C# zO?NT$8ymAT0xcU~@y=lC>kQVJ)xw2VBRk8d>ixCb>ovOdn+EB-J3WW!`8zDEdpbaL z8_4qI%?zyFLG$=M=bwN6LEV_2e)=hHH#RhSICqZYh%5)mSjTTfNP9X>BD03*t;h%k zl~`hd`F)QR@Ij}I061{r?^kD@eLC0JR9?<+VyVW&S8EQI@$^=byDetim0o)^Npfzoa{_N5<-WTI(QA+;rlNZ4HgHsHh%Ic4s5B zcYf9xe^HeAHbn$dD;yz+_z23OB6N1O*4W5K6!BwBW%@z{DoR`=EgU38FcEwcPi`sf zAX1OT+X(j_fA5K3-m%7_55wmnwoRX>*q;uzKJb72$G^fK|FeIF-}<|M7vK8Uw?61| z`}XJGCapzu6Q-?qY;TA$BNW>ZH0ps#F&PsnUxmovU%TZlB;aq~On!C#^2_uq5RJ740z zN9SK+wo@6KLtK3|q~F!EOURcvVh_XQqZ2zDKq)?Y%z0jrRCX|ZB7=c38&U%O&)w`C!y_I&0Z`1e{W^RbFThHRpZHE5&*RA!dw#7W&R zXmHIeVsDlhL;|_>_?f4$&tXe(EwSg@fI5dYW*jm}(r|LkWRrON+UdBIB9kJpXS3sR zlsKKG58}E>_s|F9wZwkAF1lPd`S-nd-0# zTjT#xA&-rklN2kDZ0waFV1NWJHgLI`dFj#o5nq>ehr@?YY@lP22{JGKYF8lG5qX?^ z&qf<7mPv?{&KzgogdqS0cbe!~C9boS8i>+N0ktVkwn?h-5VS0Tbh?-^I))jJ^B@Ae zQ;~ku6KAP2TebvV-Qq6lPDfzkLbZzH=?s^2!Dxn;d*hk1i9d+W_Z=-(h~u8i&N4fnhvrjzfW3pvQqe4E^~9&(F{N zeaeA)lsTYT1{Y?3U)L4l4N@)YQD!eJSh%>z3FZ3}cTGj^le%taY_xg7?31r*c2x<^EshZbB(vWU}0i{LE4Q4XLS zbXCQfIm}3caGP{D2_Z(-qrG?5g+gIPjamy+3`0SSkBfqH8APQ6I8+!xXWYk3zzB;fDc#z}mgzgrL?N-afs-r=NU+FWk6{QcfwiXfcuzEy6=L}rh{D1=%=^sa)@9K(U*cEhclv&S^zo$=y%ncI27dSlE_P*cWe z=<2AI@gM34{C%Cm1d||}c!l)_m5w*%31S0q#)u4%s-ar(bUdL{W^;EKiVAMWffwuO z?l?=q`E=t@(J=R&^Ee?#3Tt^EyI&WIR}3FPqar?jc!v~^NRx*1DBGQ3ptsJrj}$$4 z4U>un32F_I&U!@ex_zOyyDyz_8t*;r<~0B>>~tS$q{#V;;=`j@FL&+b`92v$H|%*8(GSuSEY(JjAy1YKbvG@ zjeS%$p?ZkM#@;t)U*$Z{=n;+RrC%HwyE1<|bL`@;mazn-L}ab4!Ec^7?SgsKOv1aG zkLZ1gZ*des(drHF?sqVvlfu*rqRyY6pW(v1aPa~g{9LL~Ae40G?xb)z1if9jzdS=F z-d}gz?|0Pm1{nq$7e&5FZ>k0LI7q%3D+W4Oi46)gk$t#~Dlm$Yx`k**Nvcs1oFRrF zAw@R|97O`oEq!u`uZ9C~w|`c-`^R?{MolJcRBV!~k*J zuZGq+fG`>=>RiNk{XqUzPk%mgf+X%!o zsMP~Q6*Y*T8Z}jk`R8!n5mT@&;WQ`2t)PO!^5Zxrl3yJ-ZWM|(U%g1uHW>?Ws=P;G zWc12~-aF3ooV_ZRr5Xae0vCR*nvJU+Bc8?W-ss)uN4~pUUgJK^XHI%5Q1@ooLsLE7 zOMxJZ5Ffrc(>A~3L;t^F$a8`JGFRTr#Bd_v@+HltbPk1g1nO%M!7eP=8~b~H>OKhG zpY!`@`aRdQgyZDHPLs01_c$<2Ow!6DDLJ@Pr78&H0d>0^y@5&50u4OgbXQHsp>LVE z3u_`+B8NTmUN$7?THyRzx7!VW@fUxAfAo+3+Ydg3`|PvNB0n`0YpubrYdY9@P|31*_~^TFZXi7?fB~R zU~xNJ>W)`YH0iF&HLDMJooue9P$6?cd?#x7{v)x$h>w632dH#KWGgG2LB^dcI(iS$fL$Bw0yZ^HQ^bHbMLsc7M)&wP;;iq0nM-0L(mE&E*0 zd%o8&!?^Ca0(V|gKK(JM3Nidn_g5CFwhb{6;uhWUrIrGNilX(wft|xx2QxL3J(P~U zsgMizn#;xOmi?W2ntR_!v}t>sWPg zt!xmF$RSU4Z02BjbWrCrOfg5eR&(HBn?O!OO`mSu<2X3y3`}+0vhj~ycS-?*CvT2 z1dc{r;}Rzy;Q;gLAfo7d-{Zn*ESaSkPNcZ3WsYD90I&_#MRi8H(9s?ydEwxbKroM*l^&rBxb)M zpdI{X7}n9^eG@Pj`xb)peqC@IbadGsn-E97Lv(Yhn3$*!&fyQ9A zGctB<%(GAsd-<&4a*ds{`O&Tm_m}&`(&oCc*!#_S|92+>@^%~?XqQD~>M?+=Ne>8t zoQG>GcbNR&)UpV2T0C-I9j*p%Hr?7Katjravluu?r*eaJ%LpeEgzg~-hvrpTHvy!uw7K=evyvA5&6m%g4NLnUaqfkzdu9V(Nxg~1-{}2 z1&27T4N%*|&$@`Bs?ed-@64PP;%kR=v}hOrdO(H0n-~79Ai2O*;93CF5DeXM2s5UK zIqFd`#)aq6rWke%n>9(LdSW5(U7`kaAdsUPf{SS~(88weHQ+r4V`D({#62+D9xiu1 z3e>`3E(KTYU#_IxcsSW01ulxq4d_JDcQ{ZBg>}VQyXz8{WY*>xVu^`QPRD9JW`?^B zkId==dQj7KSL`;+XFRnL>(28Tc0BNq_j9u=txv+kbXww`$`#X zNIDyXnfqNz)RAs@zFy|uUF0OqBkmz*t<1F+3KLx`nr0*h#Y-iKEoq`-*62oyf^SYD zI@`4@l(j`2pDv!gHqAW?PN7yk%A(rHBMB&R`%Cy$VMYY9dGsqoP)qHgU<`qEXC5>b zA+wZ<=(u4=)d8-=HLG`k=sz&QfH9g%t#*!CdZOfh3*otIK6=5RWY+lW5u0IC!S zmBbwG41+5h&#FoIQxtQQ5q~>K=nw^Jx~QWzVogaz`%w!}Dz1y`^bAq}#Mz^B;84)v zZU%Hf&l5Ngpz_|)?v2!e%$W{{pP+;(VIaFA5`x|#hOj!Idch$A)DuH1Tol~_*8^T^ z#Ilg2u(InTrlTO7l6*ed14Jnp);SQi0X+_!=ZV{Spm_)S9gdEo1y66^;8vdS-S2%D zXFc$h(XltmGH>Owy4`NGR=W2)EYP~86m*p7)MjMoc&{Iu=BHiETuX(V6c?Vy$pKw& zI7+P7c0sh@lecf9Pv%oJGVeEArg|FV})i1un z7eD_6zW(|P)braoRM5u2c=rx3_d6hTDe`x$Xi-z!7{C#3f3fw>-btkC_dD84k2oI2 zz0@0{E2K4eA7~+V=G`XlKQR=1^Ynx^3|9}wdKj%nhQo;Bx?hv}(?g7$_ZD%(@EBNv z=aY>N8IJ18dL!=7rhG>|NFlXQ1fXNU3Q%tcS~E0f{jPA-LjW9rvClPzVRSGD&DHE7jFXb4+5F=s>eR&zmAC3O-z+}0f`JNPR5C_=RTB(r#ALu>RLWc_ZM2BaV&gm7>gFD+2(KG;h{ z3_)x35`6@H#y3G;P`Op$m4di7I>kdFh`X=|El!lcJUgqBbkcg~`&w5V%$v7w>6T7Y zT!@3`TJ+2&r=iN7lmdfs$PXb&0Q^j=-hx8KxST2qQAbxtw@z1gp-9-wP;104JEqu8 z#2^|mvLdXZ3Wvas9%AKA0$fBCv%lA4ZAE;83Z9>@c>W!w@OwQyJxy}knk#xl$dy+y z*R1=}{FiH^wT7W#yvdcBv0)kp;NCE-qln`?o??wel$8L6M#6{#wJ5IpJpvDdVqp#x z);+F*=7W8dCr3=Xcg|#P7hn2Z!7a;D{PRf~4S1DqEU0 zu6~DIe5;3t*njk8&Jj|yvJWEQ`;lUKfMR?X3dd%@v(phiW*<>fX}5_aFhvVV-(kOU zGdS5Y8&M?0)-JCAjA4=pY}G2L`N8kbq%3;Ji0pH>Zye;lpF_&SZVew+18JhHw$7fL zPq!CQKfZ?Qz?PA#?={T---dh-Za6Iu4ZGcKmN+>d_L#>C*|HRmaA56UQ)ck|{^RV8 z=2XIF(_B>|LkC-vayb^~pfB@ZO8Gb$%#Mkkz?KP}&n27qnf*zepO3$hJ)?8M|M9MDwy??}P?wtyd#DrbUFtIW5j-_`w8`xzVko2*l z9LHo9I3(so|xjG9NbJ%P$446LZMAZ9Fgy4gIfQI2IM>3 zhlQ()87zW8g^HlmXz-Q-(^zfUe8)y<_{NbjCiY2$1=G*|=D*-C|MD;K`@jGDAMDI< zcRanh(PcSoDpS`W+vdBti`pzMD<#f2-J%rCM$|pyG5X;feka?rutSk6F)$tB?49us zHfC#mQD1f>lRONf_oX3$B-%5qmkV5%$~v20c+3)C!}ty|Q6J-5_Tk8KwJ(?5KD?hd zpsi5f9jX%(ukzktJ%9GS2Fm8u6fJEcKHJ>ED~sCa{)zZ)u;VqydT(TNtY%8#a+(>h!#Uok8z>^E9W#CuNu_rZ1$?Jvtk4`y95!1=)n|s1WIfo#o7GbMUNiW znK7smc3Ezz@gT0yjd&D|KV|mn>wNNT0?c7miaE^Lj7f(~Mm0nOL80^i_h?9)Ejq|T zm&JaR2=^2nmQPXu03ZNKL_t*A%)GiS7y5ysg!e=i`}!nxbKMPi5zTz|ow6h|x4DE8 zJ(2UjeEZcU=t_lgU}RgfDX6JO%mkbUyD(@jf-6N7Gr4Bb+7z z&Vx4bUC<1AYd~3oOP-4rGMM3wXr3gIMI+WHMSkuU&c2A+^5xdxS|wG&u^b3%A6c{< z2c6EMB^sgI0Cx&WVz8Ro_DL0SM;imuT4dMK<$Ihm-#?Fi$fFs6iEjry)^P4;7I<9@ zLmSLt>v8ukN5L6F_TKvzpT_lGDg`Lr`fOOGhy*zd5|9ev7TE2;fnr51U_>6gWP4z2 zQ3aUyyb%tN-1D_mloENBA*$|MHai8EHPCFC$;qY^n<{jnABCC3qjg-P@#_ZGuSVYK z=t1_1e^(;McMR5A%u}aBEpy)KSY$0c!wYondp2>1x`|`Lxilizw$^ZPN|1;6S&Y$9 z>U!qx9AIlzqFehwIb`O^_txNTpcKKOCu*sK($!J-<(EEC~? z0>XNFbmo=EkXey^m9?+ba__aWjZMDu zKsglU2(krY@Kh}0CAr2ylE4)ild2SV!5yR7JY!UqqOXzoYFT0%1bTc%9TfD|&@J*d zQy^gjwN#u31wR!z9Osa!$aa>w<93`-t%1|sqQq>>b3WI>7>z>eS{FqpQK<3rlM13! zkd#pfiSvCV)p*1tY&Am097H_>;jp3xog@bu>Es_q!v=Aq!nu67{FH^^?9*`AAN&6p zG4wN(s3CF~kpGby^$YF(vreG!#ikHaq)c%hqt%I_#R!bEQdpxZ%rpg{zT#oJga~~$ zh}rmW?ShD72-i(LD@wh=JZb{v+H3uq-&@q-)+s)b3h}tdB3!qy*jKm~#-M}oc2H>P zfikbeGDLJihef98sbvl@yF0uYd<1?PHJtxJYy8(e~9bD#a}%xf-n#ZuUyBUF3fkc~pX5mbiO2gbd_3-=gC zVPzjfr*Nj5fr;qhw%lkuNvIgnFX7glF+-Tb<1`wuc8G|Q!GTSQbAB`q*ateGKpPTS z+yz<%Nsw4+C1$rZSr78#08u1)wyKKbMmeDTGXla#~Zc?fg7!R(5fF6eX4 z$N&!1!wfkP&p}C83K5q8xJHkdH{h}shVw8I)*}Q~1B1mZGqr`3APJh$2x6FLyd`+2 zKd`=!2Ng^M{ci{-X$;1Aw?cfLNyD{>Ow0G9K%Amn3-MtZ#M~FUA1aTC==uKM=Y3_^ zjtLKkzi5biqt6>;OzS==U+xrWPbyg{#KzY|z;hiG(bXF%8t*OlO9e6Qp15!kKo6X6 zSqoDfJy3ka`+#+xgQh{XY4O~V;;4!PscW|afNPw^C`G@XWy`0ZN3+iCOt;% zyWE?2zLZJk%U)2e6hju#FcY*n{4KlKF76Qgvo#EevF`>oEQK0~2%0M>Ze~e}t^D_j zpw@Nd@@JlViZFePBUwUgjTwk%)XNC+@9dpmQaj2~AqrfLg4z7f*zR>_J#oM8jB|(? z5eavNu^GnuZJHLw=n=siB)YOk)5z?fxq&fCSP{alkpzRO4pNK#;uh?9L25ydGLHJwD+ptc;;iA-gjzsmZ|W*c!%p>)mSGMb0G z5`7O~__)~=#>22uWRG0)xj|;I{81}9#@4Ks zhkVHWVJ?^T$}ZoV&Js<(*G}~{T-;{?8=`z-Ujt#WJ(G_yx|@!YY%IEQF{;n($K;bt zZ2P9|nho1TFR0I^(#)GxpN+9}ZP;{;B{tC^Vhin-dBI!e6#_k(YvC7v^Hcn*fAzoM zcYf!0KIj1b-Saci|FP(H7tm~4%ljF!059ixP%I324)j(mfUH1Rd?X7xq#O%JYZi{d zC>S&UYRfs^hco(+fhx;jxZ&LAzl#ETA8Kg`H#~;IvJDe8UChxmP4uH`I`3>E@ZTFr z?ihX12dnQ=&VSe`dS;1YicDmR3-%1tbgnViE^^~kW*(}!(Rt(>cHCALmxSEVx88-# zwZ-q7&kxDqHF_OLzQS0s?Q+dw&ocU09!rgCQ5bHkf5c@LB*kDcX4#k|x<*ntSFcl^sg z|8xA_@BQ8f%Rv_reEG$fxUOp+u(H`+MarbhpUwP?Z=kj zYQqA`o};`Gd-B)Y={EZ?HWjY>zekE~Jn+-oNIM5-k`#n=*@vL7NaQqaLdGd(o2dIG zoMPmLEX3+2V$8-gNenTlN4nOjf>j6|Ew+@}BiuSDC34iGKExW5J|INKBIHOE-9+23 z&o?t*;duDW=TK=Is4V^3s%xhRU<$X^-l^d-9X95^EBSrO`_TY1@6Tik1a!|kD*1e= zSbo?h=VxyZaS4eL8>#Fkd-p+Pwmy@U>$T2XeH4abk5F0zcG<*?>&(??AlV!sCedNl z!GX`WHH@C`PB=>KVgJnc%pZsemgsa6b{y0BNLInyQgC9>$w`WEe z&uZQ3uqCv}rfb&Q)4?9XAUEEBq+m9>#n+gvw}##aYIV3(MC>-39kke>XGU9~1Yb!6 zDQ?L-rUp4E{=JqG0~nu!N`V6E%YhfAuv?$!&5B82rIeJ46eoxXF}5OsfM0PBRhch( z-7kL6lTGO(bJ`--=V}c@`xG>+rboQH8h5zd>%s-y2i5O0(>`ciHs7Byg_CuQswldz zQQ}WaIMPy_l+>I)I?(X&KAVw5KwqY}fUNJopOW2wb6!i|@Ah z971GGo##^T1liwi=Y~DDQ2onn?wUDtB58fz860dXyOLO-wnR`o>ooG&3*9PEbQ6@W zP%s{#C@{Rh2JlheGYZzffPCFnvN6Rf2vfBi^Fr5B-e9aR0YHo9_K=e zl2eS7{hkz#6rmt9i5aB^?L`H3lqr%Wpw^%ju%s(Q^hJu-0Ku?DYjY3uunJr_Jo6MM z6t3aXll%kJGrs>035;g#Q7TDTB`}kdTEoxZL)L2R^S|ctYT+ke*$`q*Bp!1qNM1z_ESBJNb8nnWr z#;^%FppTMJ+3W4$63j>xl7Z@GjMAWC#`zyn03-WyaSth4ag+iJ!baoSQr3`GKW^A zLQ9Y_J0k!H-xv_}a14^L!oEIHzf}}xJy6RTYgzejL(%R%-fe|+O0iPp#ovpcVGA-C zbCnU|Fw#>fb|E&|OJ)8q1f|k7E>WkN8?=&yWW&(!7u+0G9mV)N83w#C3Ni)1CZwaZ z&S5#Xl?y5dswmp%6topYHZb>xDNq-|Xm^?=VrZ?Xj6fNV<{c%-LZX76G(jmrUNBN` z+~+eGy~Qw_10QG*Ck?y<7uICNnTOC4*~HKUl#lO*Zh=_~cI#dKlP#N}Gc}2GlI@NuGIAh*K*RKuMQ!W&9(9O=8)Us<; z1X7l{CVLNpqb&FGKsWFzs~E#@Zx>W5DRzZIORWd@wzzvtp=pRN zc>k6eBj7M_7SGS*JP*=yYyjOTf(YWB4TDyq`x#Lk{U+ODW3yjbD6(&Zv;;H9CB(B2 zBe_GgM1&VbWJQ;$N%i2pXbgCWUrAY56u?DHY;g`BGwL`gfDXfOQsfW>KMy*LI;Ke8 z9wG#nJk++Hnv0-P@rP0(YOgA!R8$w84YpDbNHm-t8sXX8n?qt2&aDx3ah3yZ5EWNS z!ErLT3!9>pd3a&LAFC*Fqv}2pQ2F9(G!Q+SMtg=Q0>ZVsszgdOm6^FoC$I&2$2VmA z<8YgJ4i-Z>G$#TQ6aTp5;8SU_H$eIP_>#VExU-SHvYGgdUga0Qa`p8g)d{46Pk zoJEN_d_ClRa3^hprOaDM^a)@7u`Wt2^1Nl??T=8AplP|MQ1iuy2jwEVEGs>^r=1{Jr1i!72p&jg_~p! zWFpsRc!%deFk%ppl#NuK#=$U$j+82*Brzbqo)#AM9b>v5C6vGxxopfmw78_nY@j7p z-ZID7mtbMohKvrk{D(z&_`e$b`Ro&+YnwV(TybW>Y0K4`qA-aD zFPFG&f-XePSD{+jjmq6zi^|Izj6Z|_+IeiAO9F%ef1TNqsFCa#jWIE z)%@|y)lz_P;mu6=XvF6ETx(8rRw>QWz`Cd}6fLkeG^J!RQu)t#EUV zRlg)9LuX#1&C9bR>m3Q4_?XSf#Qu_qYxCCsJfSo$PwS~>G;xpS7agjC48e1Ql5W7lOONtU6$qk7kdmZEBShXYT zG>!bY8j&uWgD#&#?^Bec6Xia50V{N+w$?CwprD3eBM@Vrxp_V}^-}nm=3c^F`>~n` z>0}HHG#$!|j=_d>>`%4?1XdT}LF4i)F_fKd9w~E8V#}~ir*%5OEHQFNJ&;W6F&BL03#YcTh#a2rhOJE>&_=}t>W@xqG(i>5IwUGkU>kW%(o4S`mT0piL& z-34yLIB>D3_nvMy)LTXGJ#y{Xr{g|Rw`lAZv@uZQ{obh~*?>4}%~lp0 z6jk~Cqee=%f6;=p&vRhU`s2;hQ(*2%yt%iF_o{G_lqrVtd5?t+)(p-;y~Nt8kqbX- z!_hHD156;b%;8nWWVjnJFr&B9(coB-HLW*jQJlxYeLM!!{km^8e?dtsdk7{=#O4T? z4|zU4@jjt+jY<&|XVWwVA2tSt81+;oBPL`UDi@e3%nEwvS@BdVsseZ1(Ys(YHp$%t z)?=V{mJrv_xq4JKZ`up#RJGFm#Ct}?)i37ZN_GPsZQNnrQIzj~yT72f!Q5*t6tmcv z4oEE(sFB|tLluC;4^d-IeJONJMnjs;p96p!C)v~LwNvVv>=zYwAJbR}a z*mM#UNa`o*JjK~ZeAbMAXA`p9fQ~lLw5oxq47`0kDxRP-3d%g3#;#Dkg1lBnUTmy;!wuR#6{m7 zQh;j=yxd=KoE05Gu@L9}SV`F!tufZZ7~L_hD`HGI9C~RDx8uNB4oFeFc*DI9NC&DJ zu9rLXtT-URDKUsWqIbjE_9%=?=xv~w;GmTqy>R{9l>3WBHuLBME#9$OV*d&<4u=~w znw&>O9*SU$i_}u1J5aRJxjhC(4UBK$--|j%zvIGShOZRd*a1`wsVac5l1I^&xyPI)nn-H zL$G_^ZUR!n`{RK|z`9+Oaz)=)iJ;u#E^javBt^C{2N{5IjmQ3+-6J`Yn#ydkCq{%- zICd?D8+wc37hrihy#qBeIGD zVXFA@W}{vfBMTm#lQJ?|2O{jZ~rrX_q*Q$5GOZ9jDQnQ9zG8efwxBt z_nq|&ANO2_anx){mGY)z^kU=g8Ncs+PtaVr-X0Ot7Gh=u6%z;|hR3a>(Pu@}hGZnL z!N0dO8?1$f5WbL;Z(Lys7*pJHJlZ8iNs>c2CVa>O!O;5!CByT6LWMDY7+mw$YGMAkIWIz!B#T`J|gKHCN~&#UH5Ez}erEf)rNhAi(zygj^E zk-{5AqTl_#sjw2KtmX5vk+s&0+N8U)7iruO7p2G&$dnkMFFfz*HB(2JGxpsIMcrz3 z=k{@sRZqf)qz%{GJBZoexun7}@G)=5nxN?Qa~lxxsEaQjU&4`3F`~8&MCD3t+ik>9j{Mre&L?c z1Rif#A&nNo312x_Db_H8DuZZvj9)s}p}4NAzDod@&kv{a#F|su#4sYl_5K!AGK~n# z3A3btY8c0T?)bc)=$+A(Vbkw{*OdlfuMxT(NI2Eg5&aU>83PoJY=CG0Hy<`KstIH-u8q&mrW|y`9|G_)@J3wL&z#n+4wCxp zsjfJG{?4{+@%N<~?Pne+bNhpC=NuyDBi(3_AIXsa>?;1wE@O*qBp+}OEZcdnb}V!l zKDnJZ8e@48ZPEPiXsm_R$|hbq^V}6ChhV`A4hd03A04Jv0}0i{8(L+WZnrv0HS+QG z>$lJHfAe3z`ORRQmg0i>I^;Iqo?~n_ny`~Mj+^v zjv0yOvlVvoQ;zaWrts0y~oivTzL?))nA14vV7KczLQ9CKR;6SeB^K#@-46cX{ zB{^Hz@O%%n+bfd)RahGaNUr{CXqe&m&=<;u!E zla2?9TtUa~XcfSPe@#Ib5gK;(v!!shB01=A`AP{z?#L?b;bv*frGDKm$DQTPy_M^* zw_bRm@A=oi{L8=K%h%ZRUIuPdZqsy7=AM^|$IR``#_Lw&q6WtL^8N`#^4!qFJ#GiN z0x!e$^GvRFFY@BdI|tABLg6F-z``q{I*~W0K^|nbAc%`%?{*#F}edhT7>F`KaWKX!tT)-kP-(%(4 zhgiX!CwL(36V>hF7z9=mwWi1s!fMeNjVvXyv%>Z4!p4P&6p@YWjfRPc73#c?QI7H) zMkl2r&#)aI@JdUn;ai9dY;!GWQPL0WU|(2}2Bxe{2SM9|p#wwD74?t~=p#!PIaEVA%}oRKzXaUICZU+@VH@_D zo$E^jWuN(W8$7h58vu(TYP@UV4)Z$9*R;Et{P${CFSog|H&#syY$+_*VyH6z#eHZk zsXFgo6Z7_cy|*4U)pD0;d@l%rd*;}2e9qi&)eIzxr3iID+)Y~XDlV2| zw-EM(;6nux4&@dNmV8GN-YGyl z03ZNKL_t(>-nYAy0^vyH7)+=S(#aSmgn4`BY9g^gaAbZVB%Pe%heq7p#ufXzpQSyh z1z<)qLbFkh`^*cba7D4H4|~M32`TEuF*qD&=0C4-5E$aDsR*hq5Hs?3c&;Z*#9hJW z?zUTfU62XZba4>3hU@V_XF`kkjXAvm{C2(L(ZY$eypi5=edtP08i*K=Ho`G1j&3*g zJVraFnMXuZq@C_JxDgr+T#dKEqPq~~>(?(O#{R_*?|42Z#2mNYdXf!Mf`N@K^ln58 zipZRTL4?LV(A9=}-JbV62Kr-QMME`=p#HuRg;TkO+c$OqRd2xM`5#oD6zMbj@1iMY z!Y1%!oJsFKbcFS2*iR4`kLw-x6!3Te#F+Pu-+uXupZ)9yN2S~HeZeBP6N(>xc41D! zeLs(Aq)(Ynz!51FGz!2oTw@U_?OHgUUDvqWbqzxs4WkjB&l^hWPP%3I`t>VJ4Ug*r z#ehz3k4hQWz&b>(B90bsW>_iUvlJSKP=>gSB}tkq5q(g)^4!%hr&I>||I$2=!dQh) z!PGm>s)swEf@DJMVuL%+^z3S+JFpQRZ*Pz_-N13g-xRJp&lvGW#FB-N`^GcG4+z0h zomuw`hp%EqOd25?`R92jF1EZL9Txo(G#A$}5&CrnvBA(s$JGY}LHZKG^XmsJ+~Ldw z3!JH%;p5{8f#QaM8o;B$CZk^u@Q7j55_B}6bNmjz??JTAqSgYHOFIIC$Y}762=9+KOj&q5XvYMqLYM!HYjnI_7arrn zbv=B&hPlW0_)l?x(PyG^8uB5=)_BLg-tzaUVMR{3XW6!jS(Ff1cn`|Y<1IE0V@Mjp z;0R)FP8E>s39H0e?L>&hvf~e^Vd^@B_%1S6NjJY?&Zpyetz)e_1i4!G4#9T(rYKK? z;5pZLMrz;BPBSvrAC;92GxIomQPCb^*K zhqqr~Ts>%3w${&i5LX5ns0&;=d6S%)BuW~!^V*5aSNaztr&s1p%o5u*esmJpVCtxx9n$2FyD6K*}IBC;dbppYrJvCz8TJ6p>ksuqbW z-JWww^s<3J`lCO>FMs(<{QT#?z^{JwD-bmLSw7SwY7xhaB3pS+>heB7yx;DA4uj^W zri!ZIn1S)b?<#P8gcEWgM{Y2h2C1+>tl!(&%;dwjAe@F z#}h<7>aU1fO%#7Phw}!TH9~7ioI!}=w;{rj_5Mywnc>`}5-dO7-XM|tJg3ttGX7A- zKaYs`XMh&P();7&@5!w}Ty=qxgvf)*qjBe2nCnLR0!Gy4JHpCq_O({@gfyrfI_6<$ZLR7@l9h zgn+oA2SLL^K(=Ig^r*p|-lE5BFAF>u@sLmQu|%BEGJ3h0(@c~1(~aQQV|K7!)?&>X zM39_XDzgBWoBnZK?#R#HT~O_^7F6@N2QCWVJCXx}w6@JTZDDFMP zucYA7Fxn%ch1}rSqm~#E(Z@`fvWkQ^T8Ekwugsi)Vquoap5t2b(pTRR;Dr0>5miS1 z8AXCFNZlhL#EGD)yMFYDhgLMt6c}a1i97xMV$yM<2l0v(#OXUZ8d#O<(mYRLMlpS6 zAZ~|?)&l!x3|A_5J@SVJ6X{^Pl?|NEz-8&S$kU?J$Yzy3ja+D*ixJzb46 zRmIUtk33~~<{Z*(FE0b*%!WY^lw=?s5~;RxJ})^b-ws zbxnx4peP+^XJbLlonzjtOhx`CKR8Oqi_1ie`!l3-PF|Fd9j);?Xxjrks*KZ9_`^h= zO=S9tL2rBDRd~L{v_^w?#9E=3cjJ2t6)e#6*lQrx16MPXij;BE3sUItd03N=k~lQA zM`JWqg)RveDQNoe%2G!^h<2}r@A8RB#H}dI)={Yfl}FKtO_az=`{n$ z3J3g>e^XhOS{K?AOJ8}x;lMw;yVYJVj++%G-ksp6>|Li+NMsi+!v{6Zes&m}MUX9oAK54qIxCF-nU(kbM?3;r17NNCk;oOlB%@pX>% zmYoF}EQ!j7JGy9n=i)0$WfP<9Ti?ZIAT#qM|-s*5Hc|6RsYXgE@P2$}u8w-_8~Xb>Y$kP$Qy zJp{~-&dm1nv6Q)rwRc)&%lCPy*}jl#4pw za_=`6E)x+hZqN`CE)n!-m^AYBIYq#+&-S9ZY_bsTi?_d*xqqww*@SG2wvBR*{iE|n zHmZd9De5BTtk)QvZX*%&3wZPf?tYOV@(faiH(^Z_+zH$aG2U_)Rr4%U2tuqK?v`U% z+2S45aEHSJsfYoXK<^2io~7Ix!Dms+GayYd`T*Dm=)|!G;tX<}zB@|psgbekdt?uR zo)an*t@-eFF2ThY`WTM!j`{&$fO<5(hv#bQa`dk$TEC(Zj&LaxMhl8sIME%QuOZTX zts6=_{Y|65*Y4x-z?UyyO8l8r79OJn9&3pU4&q!9m=8kCDGSsZTK9KX!U>(CKMT~R zvj4p))AKTkKv|o#jwRy5h8_f{5NnN=^_DqmKmTqD9T9hw$Wxb0n+o)?EG;**gj3m@ ziX71&5_bYB3LizYS7rGSvitrz8bP2nhZ1- z2twc9u$E|vGD{E~`x?;DBKl#32ru^s0O;57HD0LRc%OBLdCaDhx>ei`3`r1-wHNo|$Y4c?H+$#6s_yJ}ZaqXt z1`eUzQ+#mZ)PWXRroNYo1ZF)xs|!XL5(6$r%)79wF-7EymIn?PWReo-IlyO6b^S;R3R1jk^{Yc=!p;Tm{6 z2Cm+5r5JhmUO9Ds)||xqPelby(^iU)iM*kn<_%dcWMn3wd!4ybXdOMd#4YErDutIb z20KbVII)Zd2=R}XSV^Tb%;$7mcu=$EymwzVUC^dj%Z1Px6(#eA1PZ?OhN};cFfj(5 z{|Y3wFkwaQa-iQpC;ZR}ftz6WK-4E+n%hU@|~k+=DkM&d-YG?$_xe zkdLol@$29G8o&C@uka^-{IBrC5AS$;fAjMp?j~b|anXGJaP;c^`V&zV5mi$8*Fl;6 zX6&GWvnR&e^#B7wTl2H$j`N@qxo9XH^qQh}a}f)}DFp2>_caRqeF#7i>paCRD>C6t z#iK3b&ZQItq?lV~)a+a<1gadu1|RgfP)MQkW5>KPy%-)cibpdZ#t`rC8t8@r*v zBOf#tLJrZjqMmqM;D}-p^_UOeQbo^Irs~%M1I3GEC6l6if;4++0^hyZf;!he2 z^~hak%;m()oatsvnd)*n6#4xc65?Rwz0RpDDNb#C&WNo9X`c;5{}ZaQUlcPZu%Jc7L7wLc9n5`lg+k@qnC?BVW# zd*b?-?R8LpDEVLUrs;0)KjIAkoU4i#WHvK>$|^)*KhtrYj*=6b_+!Hcj*VtFJ?Vcr zoS>g%ZkO)hXe{GZ?VAnQ{Ct$o^thyEgD#u?iG(?SnU@BAIuya!G=$7O_=KocZyIGb zZYnEZpReN~MD@ErxsQ(zJfHWG^Qk2)sRQ71erh^qzU4DSBPjCk^mP!gKT?EzANM&G zn#9zg?8P&cqc0qyHGJYDzf%L_h@Ih*nbI*t-QPP3`2tIa%tl#fF_Y^svlNZ9dA^6V z6osNU09&9&(>)Mf5Zwcr+=y%N`;$4NUx$759FMGRLo@-{n@lYlNZGiktjlU9NA6Dy z(-S`q{Si@tYF%DD6DyR#$M<9Q$?+fVm}*WnS44{L>{u^O&!Jxw2|vL*yA`nB7|ek` zVhE8APe=5GdNy*=^LwbvOb$uo*;4$hYI4;8h^k>@kwHX(F|Vv7wPPPhbvL~XbM4^s zlG#=}e#gIl_q*R!w(0Bsq(@dVN`$~ijD;O*A|Dd@R0JkcDB3Ev4}nGE0G$RPwZ9hK zf?^nBJ39`C>-&6;>4ZOB;rX+^9iG3Q&)N9hWQaYu`aBFv;n4oPue6JFGtl7_dKs9K z56aq+JN_yJv_lB62X@dsdd>!Rk%e;Lne>hvNFI*kyp*gZ<Psxv+pWj{8?wem1;vVb1VsTQi+d>K`xa=uzLOp_=<>DCPrjz`OcP9@h5 zr=mSjhk3ct?R+UGy>bOQ{OcT?R^n}3vVS3*iP_jV8@?tv{lZ&PguB1j;ysq zRF)zjN=$z^yOR8}@w>Ez5%#JqJ)83xvE;6X4Jz49`)nqkQ4D?taR@3iQXqdvi`-}1 z_7q=tQ7zZ!XQs_8O9&=Oi)!1}Hoc}I@WAuiCk=yC&^ zwc5{4k?m`JPcI7g-hJpM;@NQL|K5dZE1nbYtn%X?QF{*=NJE7mE)Ek%Y8#Pf3R<{g z!lgms?6V{KXU9hEOYBSCPku*gogmEN0NPozi0@#o$R6V@gf#J?vV@DO1k&ml!zEgK zSEQRBnVoHos_DdJ=xu=dfa;3- zS&I9%C7g`VnK8q0NMsf9z(iOc@LW#zR6QB(ta=#L`(SZi6lo~jU>0{sE^0_P*wV!u zGowC+$IQg}MOn**17}7I2ZcbxMdF$9rr`|9Jxx6O&^%)r4bk)s`U1RR*Mj)QLBtXj z%y7U{2>m4UcI)i0T012OgdRdUk4x~{-S<1neD-WW9=X$X|55mWuQeDgA2_#+V`_d+ z*M&xg(YygJFc2%uVXltQrHK3JfMNP~-O_0?kJ<~E^TuKV!|}paja9{z+lN``U~3?0 zf$?-#ULPKFwsg9)Xmn_}&%N1(aCC)OrMWx%xi+1K$3TNtuHQYs#JOxS><}1fy+0O$ z@{LL5$Vm+}KYTF7+#*xf#fZ7jc%|T0O#Eg9aq&uAGo8Hk{g2v`f@Z57_&9y_M zmJK+MlOm`k1%U7v%~80`o1%>fSkt2s#D&+o@_cPjc9*<{^Jv)&>V`M_*A!6XToOfN zvt@kKuFE`w*##DB`B28puqgEi`)oCl-Q-;U9U~gBMPiCQfS94W>N$?FUFs?V6-RIz zxv=Z&^I0_vK|G4V+A%uzpLx6As}T<5x z&Xl!4w!<^nJ%8Q@^W~z9I?)2vJR{7xH+BKpno$D>^+kWY*O~XJ9Sx=x8+z9B?l7NW z=HY`5q$N0GX0YX&)-5C_!>#WArOr@Z5xqoc?Q++D4Aax0dCLt8f|yB&5MVGgv=$Cg zkPoUOdPSFGzn!EZ6+dTcXhAGsf@hic;WcH@#3)M^3quB9-eboKS2ttQjWs>1)~xOK ziCYmI{0o z;h0nvN7Y9(gvC2TWauT7*)b742AHb;St!jW z_i^-~@hPGPuHInubn^fH*lZ-+`w|h8DfU7Lx13TINcHP-v0G6O)brul=_f`&=MFZ4 zDaFt8*LBd22yW~`CM8CHTri6m8^b4&K5gM=^r$uODS1Yb2JLbE`E+sfTGyvge)sLptslad+u4 z*U}KobM+Ox25c3N1^_+wKSN{hlbda$z+BVoBnt9HR4lRtCNA#b-u!uz-vNC1ANxbp zN2(r?Le$WBfZ6<>8V=;TC*~|O_j=oc>$C6Xq%0r2`G&_L8LRa~9X!C3LTo~D!(iD%r1l@XPS09pMV^F8p@>{C*s z5WTgR`R9@ugi<*omaWdSG=wCv0=W*num(qzfyZN6#kv^`Gi#;l$*qb7nfcX_14 zHj5A;>QwJRS_wzP_haUipAcLwSx%{=jN?1vxlM~YnNfwUcTn5r2E@K>6vkd^W%Ni9 zXhr~vKy|-AIdy8r%xb(Cp*e+!>7Xt*#*a;Zqan_1XCrA0sZNafR_<+=u!s~|`A2;1 z8-Wu@T+hz9F-8w1*lt#(dkqJEZ@(B;3n^c$v-!P?q*G-g(NyEWK%ASb z&h_%*R5Pog{n;P~_Ao%>GMvPK*A2*$sbAJZo^2@grF~VNZndkea zdJcj1yOctLh|?^kdE($}KceldRM7)3;tu$auV3NRs15_;zVC97Y+}HEuN8r&Gkg-* ze4oF#?IJZXtGO4AJ|eHfFX>Q#lq!2Lk$7}o&_mT_22kR$GgIrEVb$KddvBmNVlZX3 zAEYy@al_Rw-%|rSoEW}N-J5PX$crYX#ef5Sqosc`nSyQl0BjGuJ&)L3LL;$QAqo<4 zMQiI3H&T0GAa@QNaP9S{(=0Gu8UtQpMnC@C)DmXydhWBQ>pcsh#*8~CFyH$x7Ys>> z0BT59zc-cmptrsMZ`65%1ez`1-F7ro%KiB1%ynmV3v_O%st-Y5o+o(8XpVPhj3}}< zo;fp_cAN{noI^kMYlL}E@911F#9p!iY9cd z7h?K`5K#@*i~@;0-UoL6+&BcAw&V~VMWZzZLPx|%i-tuu;cB=@DWpLlSskxfmkixM z`>cD4FdL5N?c$80JlyC>Al?A0$gs?eJNJ*gWcSg%DOSV+4hKy%H0G?jG*QQi z?apQbXEP<%nJ*VRhOEbT6$J{l7>Y3k{wnM4Xhwwt#_BRb$J(^YgGTRYakl3`Wjl-! z!)Dz%y3Dms_{>Uc8|_N5uQX!JQ0F&lgVt6wsX~m<8}Rn_ zz!JwQugDz@iDK0zsb*i|E;NgprZVcXDJr@z=X2y3AyeXY-6p9R)$K@#76|{$R2PE#20kq!mi1XQXgc3EPR2)dHeF~9< z8e}PYcZx_0M6#J@GEz(mTZk~S!RkX_stkMXk+Ua?buZ8Rh2!v9J9vc4MHV`BjBwsd zI3Rs+?gNx`hWPkL-1RMr=lX!E=aVysGbKiEl<^-VAsAa&_eA4?)(4=1kLOotYv3+u z+#~bVU3fB=|D<%mM+f;D4_t2-`gLKh8&E~-18qF8lsv0e1&y;gx}z908hpJm9@hmm z!MdL?U7*(S`>!7m5sbhIJE>#go(x@z_sj2TYc9xAQ1|_D-r-7m_;aOnUoUY4GmF<@ z;;6~iIEHat1gRa}^{JMwS-Rf`?n5YfT^C@6+wOAi-uI2i<0{9IWyY(y>v>!kcrZSe zXC$jR#m;2G)Q7oC6=coNsNSLX)7S1w6fn@*1F#;LQuAga6NnZ>Q;_WMz{i)bK1`+o zSqt~`-mz&aXqVGJdJJV`wn!P^=y$mwm;y&_@ou&_fA6_M(AF@<14M>fCTuOp{dB~0 zch}ZEZOKwzf=Q0l)efX9Z>FBdT@AnCeIA<=QhNVwe|!?T|?#1iB3yvl4$ z8+ikGnPTd4)cfOdahOV(Q|4SD*iL6-2TXC#iFw~u?sJ6AtuM(+aS2_1yjd!JBcJky@J*+zlSiP<dDB8yvzljq|O6 z&ELcITo|q6x|$Db_;9cr%1KLE*CmavHFRR=?UVz0>!5aF*~0IC|2zElx4*^v+Z*Wp z=f0PMa9y`&#K*9)Q-gZIq3=mFoSYC*KWlkUUPU461ELGhr(ujMA}Se6-BFqGGhWmA zAU~;kncC1>!*zA^M!4@81FMEc3?V~%3=CG>b3q_z#4f6;y5H;7{_h!D001BWNklOMm$PnXEuY5`SHz&`yxoBg$2dRU9xwtXCgeE-VeZcSr3=Ft#J&d7C7ku(bq%!Uy@j<5U%vbv z|NPJY6My>4Kf^D7`AhuG-~0{!@gM#k|MXA)(`Pr-BFbw;zIY7p1Je%UgLDTMCjFRI zjD6qf-D+l(eT3|P^78(Ii9!*X-x(dm4Q+Uo$Pz&dagFz?eNP{qF|G>);A4gmsdaxB z<1VN|AW8A&PH&>P%kKVB2O@S%)WD<1Ua{vydEe@-N6eVlh&peqH3M(m>yE(r&wawj z6I_s^={OF-JwY+o#PfOko=m&<`;;4NE;JZ=e}H@2@o`~>ahEa1V?_pesAJG0zO%8@N>mr_dx1t$w*<1>@eKB1z4w}L?<1M_ z11F5EaGaH3!IdL z{M8Rp)h1d}_79*%&7mOC_13VWj)ZF5Cj}4o{dOCpsML=X{YV70%y{=K8*x!{wt$t3 zKvez%O)F{-Iv+)k#RV~QJ|n~Y4Xt^-_VMwtBmOd8t8>k2NW7m0YC$|Bk8wQbR55>R zy~FN1?h&izc4J&&95#G>eC#W?w7q6X2!2<5r(ud`U6=S^H=V2qA6r}z7bp%LZMGu!V(n4W{NbbM@_ z0hbG0js{+;N-HZ)EYQQfTv{i#bZ0kuK)lb&H3}9khuUWh`bNm_#?^_34rthseXcJJ z^n3v{22bfA@4b~PHq{f^0LqPL7h3iSvrRRC|BQM~B%7lEVz?L$teyS*?EpOsGW-NX zksN*%O6d?1oDRMgimDSMTKVQ6aKB!@hwY->4m8i^q#C-O)A~ehuDK%Dtsg@`tD=J| zSA4~HHu3)c{+$O&PkjCQHHHkS0;0knesW>}rs!xoa!X&nXCjc>XFk&lW*s;#p=x1DMYl?W^r%Etj&m zioVXCbXb1pb?v!Kx*fQQZ6*rWieG-I8J0?A+qqMfYcOMpEv^Q5HoK6uUHIYl0`Xa0F3fPy10ACwQH z8scw+wzwFO_Hktg=027EjkoJJ)PcLctM%=*aSt&_Yds+YSxY6V(abRK`I0%`@*QC+Wps;tY3hE7^O|?o zuue@KXBy5QEn?Lk%ur;2rL!%6$0SvGgF_&5#h>p&2asb3Dc`ARQhSDTq*%86{n8EX z4dYwxT6bG;+m09osXWcR&*Y%jj@l=2+Z>{%8DfB1bMbDhbb5Yrv7f@3Gw<@cd~hq~ z17(V45a%!?8pjkbrw`oy>{&}8%V1s6;#pO5%3f>KIbCtyTVneHbC`8^I5y9LdLrdo zbIe-fhLOU!jB}x_j$g}4u+lq26i`IQ7-h^;tlt=tCpNWnt13*1A#0)~%Fh(ARt=GC zD3#k?%n_wxnCdxejfZE^so{P;qbZW_ypsdKKu^&QTREay=gK_Q$VYFjp+!zxWwV)Q zIkylA_}wq^#t%fg@7G*t@U=8tVaGq0{D^edMqN94F9f~2SOu-QqnVrk{?F$#nlO=3 zt|`XoxO$#Z8<8&Y9GSV$flCY$ZeEIv!WMTy9HO~JD+D!hXN)Eb1r}4yhZ01L=Y2a} zB1J#tO!en;T|P|8ccFzSNFwWc$qlgKeR$q`>m6-0v`0s~1{N7imODOG;FbnKs|Yp6 z0XkKgg7)D9tp?90RSCE7qroEo*TN0B0=+xh1yawf6ulv~Yw9V2`|DRUGCZ!1-hAM2 zOJuQvAt4S|S>Z-Hs2l`$^gs){ssP3a*IIY{zZ1YX_5#Ly`k>@7hBq_e^*ma{J0&^5 zHYw25u;fN2FH(^O%xw)~E%I#1v>9 z4dfI9CA^QZ#nV?tp(L8kVkjKXunaL)(TL+QpzyxPoD=t&K0M%t`MmKU$2_-2_|OGi zjeZ3e&)|z#H$@(sxLtK3!t=sM5L-+~WXS|eat)VgjH zHC-;|2>v!#^qxYO0n%XNB$JiBFy6$w{&>Wn=>iO>0mH>p7TEOpocQ`&;P>Ir!30wm z=($`-#dx8!F!?@s^~=QvF;ICvpDyAX1C1EZ`=c_8J@fU|sPTM0UwYbp4?M^Qkr$j% zRdokUdRp{8Qk-$mxe1(Vpyfij)`0hML4+$axseagJQ8)I;!}*o=|v3!j!vuitLN7n zw$v#y?9qrEqG!)6cY5G+EwCx>s1axh+EO4WYStJML?L}n5F4&XM#uM)W)B)7bi*wg0$_KU zcMD=iZ&$OxuH^a=Rou95ehrBd`PK=I}4 z?=bHV{OpG}{P~~%5`Xq*e~$nBxBmqq3v*>G+d)zd*Y4ZnioN|5*=@&X8thv0noZWi zTMW{0+*en8rzN^NdV?+Q2haP7_juntWgPJh!2sy^>d2>=mM?$%4J+2%&rmxZUv!T-RHPnlnO^ z*u^5IX$W;e6ybJ7Ud5RK?ZT@eQ3$rgX$9QShdaWJ5ivo%hR5}Wkz##vF`2>1u}LRFe9mzVpO?tO z{qYQ<-p)0r=;;@IKrJFH5CU<9aJcFrPPM?p?{HJVbo&gZA9#1TsAA0{DtiHQ3TS@7 z9)@vUSP^^Xd-?=IL@Bf?&Tb5+n_Oe~Om0q(H*i8bly<+}IPP2#Hm8y>jrOw))?LfaCSoX7_Z!wr_jgP^b9d4cdd;Hj}$c{{% z@6B zZR8Lr`wv(9oCvlv5V4XD-&31?cM6@p2j{D$p zE55oNK1DH{Yc$cl;oi?nJ@Kp4l*zNTDAb9f;sctWAeTF_xi|(E7Vgz-MyuLJJ9)cdlh~0BZaRcid<=o8B`!3YGa+1{QjxZ5zNP>n(d`y{a-o2+ zFhdoY=RjxviEQZf>AZ;Ff$3Jpw(WLEgj8XgK4I{)-Z=$&r^6xtx9zw@=I`r6w7`!q->1_>%!PK{E=GV4 zY&&hlYC^S4OB|+wTT4`1M!v8$oTd&lM=vo_B~69z_rPwJDD5v4>^OIV_Q6_$0`P#$)S|pM=7oYQ|(xULNg7&kp;9 zdRO)Mg~o|C#dc#^2)jT>4ZF|7tW#gy%b9H#nRWnbe6!t6^=TJB!E@&tB4r5LtH>yJB^3 z*ci$DY+3_aQ!A&$i`eE65+fpY&O6T@EFR(t)gtNCdEHW6({`5ow5n|huXHDT5)g4j zAmrbc_#QO&6eb_GP7eMWboi|K?BSJNu@ za5aUl$neG%4&cO^A9SDk9U_Ms$cC_iRgNZKG)tHr%}PfGF=c*x+xN;CswwZNhKw-a z7s}d>da!7I?krm0n^q3p<5^u}xPo6@aHQt>oQ}npsKo+%f6z|6j!S9=g&@O)I+@Gq zt_jEe!N{A*k$dW~K|VxRlOVGPnl|ySM=ZgsfT&fiM2x~~A_vbsu$hsaY2nzthPxR= zrE=*J6bj-NIe87^@xbHlQPh!`eEQxH4G>ZeBz6p*(-lkZP`7HB0bs*pbSwq#>5cyu zju_$;TWw*Ci%kf^K}rzyL39YA=bV^|7@%A1gHpW$i6;8!9K$WYSEeY8sp0WBoFFRb z%^haM9o7i?ar?dpPU(#?&|cq!5Vqv z5}W2W)ss_+8Nxn9UzUjZ9T`HEcgxWaKt+kYJ$lur*(cl%U6c#ywfft2i1#C{?(iwb zlcnW6Uvs|P-%cW?BYs!K0EznhU6C_}s5i)+#x+FOz=sRgePcdv$a6xMhLCw1eYi0M zhL3rB9D$}QtwEXrY>;U9s|naTko^VnHG#m5OE~W=@?k+G>jx9CY{!x$kxX<#Y{vQK zg1ynYW8Pzcq|48&9*F-&1RgDf3A>KomIi-zo=xqdS9gF%4V~E{x~YE=5AAnAV$jGt zh41sN5juslaw=|FK2#3eD-@U{Fa?&vg+=fj`Y8*I6|60sq2^Ic1axx8+T-mF%APk} zwQKgE(-lvfpyp)IaG9+Mk=K5**(RdZ@Grc6S)((b0#L32dc~6Z)XRkuD+w%tzCRJ? zhQlPmFZV!M@n(|Nop7mBW}eR(7;hA2KhfgZKePjNt5H8N5gxtc;)dH4Q#`_kErxM0 zECDWVp_yV_*MON|E~n24&x&?Y^V*#`)<8t!$eLK$jES}wW?VNyoioe_)~$7(Qq`SM%* z`ZxcA`+nk2{*OPwpZ(b{@yCDkNBHM|{wLfYH_Cb&ZcnQFRb--wLQD=4me(9E4ryi3 z%%Ni5Db)0Z#Mh!n>^)?y$gAuhB_YOOP>Non?Yk_(?B}@gc3__gE&jV6cMQU&Y$aa0 zL|SoX^MU8PLa2d8FK5r`qM!428c3J~RCe#$>#K-s4RRD61TxURD=FJ{*r8V8%h`?{91s z-@?Rorph!38?^a7gJ{N*PQf%w5gz2`PZz(XSR!N+%sOB2Ibl z2WgaXw7KE!&EF9bdx=%dm0`MF{UfM?h&x@IL3haYMWV}%gj2xW$8 z%FqEMSUB7cmICDXr; z#Mb9J?Hy}c(I5fCb?sghQ;P_WR@+R@hg@{%;-&uM1G3%N74e}KU!xkrXY=n5HP?4j zNsfW~=QiTb(|yev{Wf>>wA!E9!1^*sqdzz_-EJ;JtLE}{UcC;<`N&_VBWpqNI#xa% z@cRO}2j}=Ec9v(b4D zDvn6s%5Es}1rV+nytvg6DxejIZhrsY+l~1T|L_m^fByZyk7k5!?CJUM9K_+o3)`nS z_#-+h~UGB3Mv+d5&DgM4;vZ>9a3z zS`Nw@y+^~zj)EeQ!u*o09>qwk!&Eo#hmlB_6>3?$h>1?;@K*9igMnfXQAG9$gGuX! zXB=nBcNT_FW|i6@2#LW>K5tWZpR0xQ;mD(RKnzvBlwlA1(w%V9IWi+Shnq>|D7>KU zjIhj4Bg!FxMuTOGkMeuD#`oRx{@Z{3ulP^@=|ADjIY+24DKnA}YKb=l^mQLggz^ij zTn|dkCbgUn@QvQX@%O#a_L6UYW>O#Gns1{bw(ESm(CO2eb^h$#*x*;7N@oy)j4EiJH#4##@|p08T_;E z-y`=?m_vWZuMWwf@dJ%(8hL%>zVkpQ%OW_}>4rpLOE49G@1yBb~dV{|827Rogxfw}XY^ zd0`J8uuUGux9*jd7gvtX*+_;_D(efsB;m!Da6XV#wO8WXg3 zpy?XdyB0GNA8zEOi>YEllJ>L_^%n60RE_N3dSxk7{9h0X>22ytQ`-%t zC0dz=RstO=)v)Ic;AOutS(RIQX2IL1TEsE6L0W+~&n+-wC!y+GXFFn}y`1M7z4#HV|Tv zVD3y*LvMR8Of22T1M7>knv7~Mdv)1I9aj5kVu-gWC>^hzP8twWv2zHfDgL*J^_EQ< zttc8Z1!tDok&~VR?K-Cuv5^A}bAgMQXQQWhL_~Mwhk5SsZm{`K2qg~6RJ-`D$b4Xt zgXq@3xr3GbhCWrGDWXZNFzDs}>cg~Fzu#`w#hoe|=S&R(cda{l$wHJ7IfmJcBLiy+ zVH$cLm{VTf4afhsXgRHNB%l!dV>j%MjW6K+MHq#0}SD;Bj5<0u1DMIx15vv-d7WAFYN0>xjbH zO)sv`zt>^|nrE^KW{`vka|sx&ViLqASgp{_@KE!j8kURV|MP-o@nR&V6>agjb zv0~gB`v56K$sEon&$PFQBw#FEPQ|Fm#mF_YY@aIDJ*y@)BeaUeBXqQC)WaM>o^fD_ z%vW8}zF^#I;hqzsPK+=jOcmU+93fwg(%m#oWNkJ}iQq2L(JR^};}iWH>=kRJg$K1d zU%lkuZ=xXcEF8^awC?*5bsvt%q&20BF&&OeG~85F@kWN1sfkp>7*?IE%zOk#)vV1Qg$WGGiGckh2RYEF_dDZ+`7qux6=f3_p?>f_%dn)L1l zl~~_9YAKuRt@jc^odXBQsQX?fVf3g8fo(%c-4BmCC(k?Id^u3GdtOdCW$<0CdM11j zK1;~&hZZO!EOFegtwk;1f*R27Mr5qZN!=^NNJO8oG9W8r_?iy}o3Ew0(rrnO?uS$@ zEb5{*1BLsSVa=VRtR0Z$gY)5g@wDlJizS##VBxMs#0fDIl++_Q(mVzB-jM(u4b$9F zyHq@iF}_QUI|E}I8y-;uxHw|@9Xf@4_Xl*%xN8|e3PN)femq+zBt?`;?>j3#Oe0Af z^7uJ+*M9Rs|Gl1Q$ZTxEMGsI9q1_Sd+1j-SPwXZHf!84_@CXQ~uOSP;E5pU;opw|s zdChQ9FQXu`_c9um-5_cheMC&ntYNgO#sHG4NAdCeieLT9KjYWG`4#@vAOD~Di@*F! z{N-Q#C4T$sU*o>NR;)z!O8oBYsQDD3A_PHVf)VxLOB`Visxnrj`VIRm0eSQz$9pT; zY4b+zL7fV6K^O!yBjB=s9y6fKZ6|eOL605+#SMg7kN47-CE0#&mPUk3{P}P1??Lw2 zk$n00ih>d58zw}pP=IzQ>2dBDp6f2hIX5a}O2y(<;1E?#x`~?yIOlasRdux?51{cIHXz`U~b^-3B!l75_>v>cML%qV{#sf5dG_pQA~258!)KmE8Zud>cOWO zDLRHh$9B;J;h-2>m!$ZP%2LdP?PH(v&#Agz{3^NeEQs%gz=8=GT4$U4v8hsa}ZzQ#CO zUQPj_Scd|Y<&i&MB3HBU$_JRP^o`lnSJxze&Jx9s zpj1y+mmcmT{)5eWk#)G^X`_t;Rp^@)ee-!dxW+t&x{MD>e!!NS-(pJOd9!Db{sSw zL2wFQj%a0fxF?Py_JJG*t&=G66Dbw4V8|g-4ntf8?(bRQR0+7+D5p?jf0(l(@Md1F zNy=dmW#)FMH)D9>c=$c|xaTZvW05neNue>fw{lTzN1lJqbe@T=y10VqCHEP+2PHoV zS|J>8iE-t^Oosc%9C^gKw(=3gfI#7eU88UTN8ndxHKqI33$w^^qwSWPKl5i_fX(3Nv^hy+hGI`eka z-}hblM5o*8rRc6a=@bKGJt3jg4#!=bZBn0|wlE{rsb(*((v9Ul&&C*90zL?d!gLE% zK8X~03(2`$gNI}LNAU0li7ZHz5a)d6nTgD%ez_WNJ4PdFic|?FR<^LgDTGTw!huE8 zV|ZRUtnk5@#Zb%OS&W&dSq_nipUC})61%84vgj!;a_+>-2$9;8Q#6we%9nv)uZFnU zK{p`=H9C~E{#_=Sp}r5CPE9)oqZ?`M4o_G9q6T}PsVh`&VU7#K=V&I=!*#B^QEV~b zVroFqU%Zi#q?k<=aDvQ=Z1WyYo{TIyv)d^gpAF-Jm(zj+b6{*m8jNUA{>%X<m@fY_YH~0DKlfO8TrI9Y*Q--9P7T=n|Y&YuI0_<*3n1g%$h+b${nJ* zAhysNMb0?DJZircb@4~z1|e^*tr^X>W+3tl_z0&jaT39W?6w)mU5i6-tl;h$X1sk2q2xuIE7bH zqX$CK??4<>8k7j8Mf8`7RJ?{FQ1>CCO5v!A!g`EpZ4(>llLIH$?F@kwr%N~-lqoE+ zir+DJtyI?fsAz~3Qf}eFkzY?fbOhIp-dy7E4OE@UqQSE5#ma!m2fd=-0Xht#+cl_}7GrT|ELLB2x zMN`Aoy>YE;Vp_)vGYsw%ENVjwIKCCn6D#vPG44rbdI7w?lac&W(c?&us& z!*C}vF?cX!PRM*>jDfeGJs@V7vK*Hj?)Roa;0oL!k3<&>WD4%DHx>vV_YGp;@p$;p zi0G!?JNg)y(;L#~dz5{kB3Z%Df^^S_2yVGCY5M0^g9z0y(FEu$j!d->R1L?Xe6Q=0x!t*&Hw}2Rdp&$OAMW9QtVm$X# zc;D0v+&!Px9opV#Rq+8I#T~VdHwfx>859IYi~ZE&(WXo^D7d+UiH$rz-P~a~9&ejw z5%*)A%LNi)f*9Ji^9nmEjRLj#c)VfV6Zgkgbg~fX`g^TeUywl=(4cj@LDkQpybG;} zM0DXAS3HQ~FdV;2PcW>mMH>CW_k9;VB*gVVQtnfSD^P2N^Y&bKP zEUf1Z9^OOi?ZW6C&)ef|S|3hf2-1SZ+0NwHZA4^24-&yt^&DGvEV-GZpGRka2cGMW z!IP zTMT*;HAs*m#m}m_R%CBqQC9=BmJ=e>2U=!MXP|Uqn_=_|KU{CZ7*Y&_P2E-I^M7Zbe`+Nv0?&n<@#z}i}$`lvgIHNu*P>no#p$$h1-}hY< zuoQjy{uX)XrZAtL`9GV)!}WwN7bRWX0Trz2Q48F*d8W02t9RV899zqV=e#lA2HxJ^ zpu?bd3`T+|VJ5XsQxHrwmpwAF+2yFRA4jSm4@h*MSgD~rzul}BSud*=?aQ2hR5{)kz$gQ zU5Z2{3kt<`UEtm^bzyzP+=9FReN(5TgqW)xy#wZk_xB%gCw90KFd8fz%VrC`8JeTh zux^hpGA0Nsj08PvEMs6faR<~vM0a(egLYRy>$7^-+5iFf4nK9)7>S_`t4 z*A-?*e1~GGVBXK2F|86Y5Qyl=3oYY4BF-vBH;6bb!1qm2^<@?tkKF=cb5h0_AnxG7 zM|>Wte_bZ5i2gAGcywsQD9$xuF#~duvf=ssaMvrx{Wa;GW+8ZyEih&RM>N!uiR*FU zE$$V55ApkN@BU}B|DU*b>9sA%uJgv65wZ5U_hwe6i$w~A%Rm(jST>}V+~vbIEwVuq z?h&k(ZGe!Qf`5edOGr>H8kDFXUv_F55hx-rL$hVCAnuK9Ibu25B%(ru zv^-IgKKM&Y!eoB`-R`)q+%r_D#$0iDho3$TDYexZOSBV^-N5=k`sM3#^bXShlskut zx9{FTWZ>!PiM`y4sVgKrsm2*Iw#c-Y6H{EwJqL0gLc!Z$WU+gQ({uSh9K4qbcN;c$ z60Q^IN>WJxv3&NYpcKgU@||jgIp?0RT_8r!RA$ z`&=mdbd1&qN0t0ra%!`%jpEkkzkgVi;1QRbO?@ug66^bz4Y=ISIU`S}?o@lsVf>db zwo?sQ>x+TCEoZwh4?Tuk%UzN`)7}*3A`u;19xCR7e`T$w+id%cddJwZg1^k2|CRjZ zJCZXGuuc5%C62lrD#l^m=K@M}<)G$}DOU;EEM3>RFpUp6;HmaljK$@!8^?b_A zWS+mAP%_Lx#QR;Ir^=_!sww(An?>&u;cSj{UnpBM$8j8?I7|eR8x>%T=5p{el%-^v zjQ}v17gww-MU}7^O4V07J0C;}KL58&HI_|0RI6>GgA&`Rc+91LpMQ;h;<~nHrGmOk zFmIH@CLdJWF#`^fqk?oSCkE7(lW?l}*z6$(CtQ*XbmkYiXDortEPKp2W5NY}krAZG zhVAz0;MY00rO;->{KnwD&)?AdKl7qllHrfTKH@xG!%b0=Br!=W8tUqFNt$C2nHu@t zmUC$cM)Wj%K3gfMjf=m_xWpAYPhv<@m2RO#9H)btXJU#Ge(I-w3P1OAKesK0e)58$ zPd@nsKl;&U%uojIXWWsN;th$Ms63}SBQ{#A)2%pFvgzV1(aKsXcC}zd6UUuoFYx9M zi$Q;knArttFY(KHuV;<2|97T%Vapg_2zPr}ZkC5kahZa-9Z9*9ML-mIo;!JO#n68& zVG5O~PG@{6Y}DyAp17^;=bFxCIsj8}ks0+aTsyhJ@aS?)$B@I;(w<1SQgm}~%hW*o zCR$oG9;V|mzlLpy=xi2;O;*FBv)^@Qq)yU9qW9Bn%G}54l;p5SiIVfp{hUJ}WBz=V zMpvXy^|Ux9!De5gN-{I?f=1$)ICBuEpUbj9cC&`D$Qwjv_liyh@g)4f=i)UM;u}tS zBehIn2%m$#yO%ZXBv|J-7Sg%4Mj;yOwauj^6RT_#PsZIcum&9Pcz;t|;%v?bmngbL zIGv}>rKWBfqmMKvpU7tC-E&>nCiJlB2F)d0@0||xTtG9=*(@9{A`fG*i4EpwUrVUU z_p>1{vVL7ls3s{;v28K!4|q7^_bVbZuWUutWX+mL-gPb|vaHsn_*Q;SwU&uP>%DJr zAeds@gCZpx1H!Y%ebECTg3?+nk;XtDR}6&cP7{g}&U-YDjn2DV;Ac*;Q8}L?T87e2 z#|-};4y4BH3+5R-V_#%u%!w?)l$Kb~nT5k_^bt-i#lsn%sQ>)`6Ypy|bw{9W3wxG+ z4Wcpw)8>k-?ArN67*az+$${a_dTif6o0+Q%4K{Rk; zZJo8i7F_}^znSTt5iNP%F4_f_D^pe^+B)-<%aok}v^hdm=x*ndo!G|soyEISYe6kF zLdUV;9Pvp&w`S`z`KSSt9tohYDRBw^nXn|ZWqOdV=fAYV`&uU z0CDXcE|n4)sD)@%6-8@D3??rFOi;nhOp3O{EfL;RWz857K8v_x2%)f|phHM(WA-%! z!vteo@SFx=74z<+9KPzhY8v(Ixb#8U{AXTdc(ozQXT z)FXz5T?}T5st3>oMF7=sKUP%KcA%c~*0iHv z9IVn!n@c*&cQL35V>-WMnWd)Fz_22V2F@#nv7$lfJ6et5WFdaEcihi&p4(EC!gEF- zT#oBJ=YaS5^B$BN<`_#+97nuYZV?S})LYb^zV7wev)YQeTB1A;a|_S7S}R&R@a7Gx zKfWKiIE-BP!i-ls+O`>D-o58}qShLYZx@Q|!wFYvK}jSiule)5^InRj>hJ--E_5?I zpC_(P_nIuXp_4))CGy9W|C7jGXS7371&bo?R4;Lk!iiIkny|J8EyDMjj>aA|zvH-} zYJ>P0wT|1Y3*16nW&ryAgpF8E4;S=)hw26Q5X*6`#E6O@*BlzYZkRx7&IJ@w4Js7_ z9a^Gi==W>l@-_Pf>lBccaLIX!_Y3aVGZb;|j}hXND&aykIK0Pa9BX;w{I<~9e}>bv zkVL_#Cn(<=twC(?z+1aH`gOuYCmuW^>)3BwXWHyvLybex5LQ+&rjl zd%tF+uXJ;0U$ue2akS+uOo3!XmenbyKFWta z?41f-wUOr=Vj7SDqb0Ij-3;Tpa1T{2!Vj0u^a7VcqgWwgJkKLva~m;qjQG4W#hvDo zSgb{2H4`*hr4O&+HY{T)c-{E7qWuLDTVh+=wv>Yv7j*JitTAsq3=iGVX$a~uc zGrkK-6I9o5Np2$F;)bVE!Gj#yf|}xRM)d@3%6iP0TWfea4hRK0wIvR_({W4V+7?lWIG^0J9xA6JkegmD@aJ@>(A7zCpFc05htzcB+n zXK6MZT0p8oP$y0ziPe=N`JfbZy2m43L1#46aXUgt&mKHTCu7!{*^|t7iLpLK6;HQU zIL{OBp5Nko-}@eZ=BGbHZ3jO3_+z|!{RVH}eU5j}Z_&?=ClzRE>_Ky$I~a5J7?GI0 zX__A*oA_jZX^clJvkz0&LVAW!*UcJxwkX9=}3In|-nQxiNB3YooEu7+76fzi_;!cWU zAos%{Gax0?(wxga4bhX0P3RjllcUu*r?H63mWcXRxA-?2^!V1-7D5<^KFrc)bPR0X zV{V4Ccl0ZSv&!5K&HkH9XrcT4C3RU<I{lw^F3cSzJBSwMW>v2RJ$>7h_ zyP@~zDSVQulbG!n5$Nneu6{;51na}S&ugttb5G%ORYY)WB)1Ghw|$N^B6FQT=a4n) z={(PmT0$tnJEHdsUIbNI7_(xN8#}NOLi7-}UKF**j7mszGA@Drq=|_48Bz?>JJ1Kl z(7B&%?U*xpGhw90SoEqI8ClmDi(ZRZMvE#+P4T|LtdsB;wOK7SOcwL=>4a`2T_ETf zHR)3{e69#!pCpwy>nK(!i@fc_Af=+xd?Jh_bBgNSW!o*0#xN+Vw=pBlH0g8>Jl&2( z6s#5JS*KX}JcGh;T_;U4Jw9`a0lJ4kDt9kIbiz^xuNP-2ZxVx;FXGBy##ACq*eVIQ)NFlf&6Du(t;VPTD zd*yScllI5q>TTG(*w+w!&$7i-)k)BU14RLKS7*Np3y5L%;Hm?B!}H5S#KLU!r)Xw@ZZlKei8t$fCKr07ZVTAV zPSZ*2oY|Hh8D~KU(y4CGin=aq4z~hexCmDz;m(9(zo6Y8DMZuD|r3`V2a3)sF=XtyG(%&~# zAyK=PWP(7wq*x&aIPv`z7I*0=pHHVJ*4UYs#zr)=b0rFb!KSnFJ{T4VJQy7->HL+X z;W^9)#09nLgJC|cWzY9#{I|dMtN8Y}zy03Myg&c*KgaL?lYcUm`=RC@6Vnv;yHm+u zHc_0vD5#g*ndIrANTYOF}WiD@h zb3N(yyyRIr(Pb3BWGxpN=QeSq@y~7ofT9%X&~eG;H1j6sGM%{UVb0}`66uHsT>E;z zwxJT$)1qt$SYPD=t`PaW2tN6{3G7me7p0V$T`8W3G&*Hv;S>V}ClApcl}mYGzc*4G zfq4h!RWui4W?MdZ)WYaKgQAS;=;=(yCRAj6(5~g0Vh(xCKli=jMQgM_B5>Rw!LcQ?RkciMWEzcPvm~edXiniV-l+1ukQ z_%0PuNR6)(xyw2o5TzCzE$BtkJFIU#A2E|rPx4%vc*hiU@q8J5=GPZp_usI{f%ZMJ zYD4&?;8ip;KQZfWhoPhcW9hw!zSI?SQZnC>D8`!T_zrQ!=qCox^)Z-3JL0n*Jz+#k=AeP9W^SRW(!D=i|?sr@GLjDivsIzVm1FAF* zvPs@kMJwSzy{t%;d* zhbfWYe0Ph6BWd;O%VnKt=y=)UcVd>#n22|iB2Wi2aTnIKXoD2P@GCH$9`rRA!4Qw( zXf5-(4GRC6x6&$#)VbhL4WwxiqTDqEpw|d--Ti!r-UW?> zH7!AEnX@h!`Uc*xG0=VBRwF+>+%^|P9j!e@dk_}Kab59qg_4l(O92XSo>#<8U}YsMvrgRxymz!F5Wj+sU~eE6 z>ASpoG6khMBN@a! zmm(868W?N|aRy!CK1MkATboYrAQ$x|&eRYqj58K-tu`FDTNrDKPCRU6hf?370)?X} za8wN}dk-=jH0oSXjFc3v5Vns=(<>^dQc&!GkW%3=0w_ZCqfj)?j)un!Br{Hvsu8_* zl4@e9Ur;E1Qg~6g8b)_qXODOX*4BedJmmt_lA>b<$?WjF+n`a?Kx4tq+N@|SGes-9 zbsC8Hb+yF&!RhP@ReI#Gw?fLz#rLtIl{y6h6|s~*?OLdF4%C&urw`t|#?dO?y?w_e z^Fj(IhCd^a`qj}&i)0@fe9|tFnBs^u2r**RanUyj4GEJNH+z~`glHAUR@uZIr|>=@ z!uKl#VuCuD3GH7vh2vz`P*Pv^E{g;d14XOV_8?iu1W+^b3~{sCX=y*nemQ zdDF!Xv{op3O*&Tmj;cg1b(Ipr0)CbkGsRnpGu$|1L z)CrDI&IN5aF48(KA%{MltlAczx9ZUXf>=LBaTA*hqeh`$g!#UikH*a3yufNZ}g|jMP#>J_%A~;LPC*+DE=A!U=b?=O?*=`T^J0w{ zFEG+a__a+)`BpTgs$D_c2f^v(Wjzhzl^npeMHS z>YWCyqAkvW;b>BV4r&9^opX|?8!Jg@l6|#?cxRry8ntQaN-{vH6~&{@%6mTOP0@enGf|tOT?HK=K_K2E6X$Nu_;aP%+TdQIo~bR) zB3p#p_#GJE+33T(C*3i2!6EvIyC7z-LDtZ+j2bpl=q%IB+vXfO1olOjiNnVT;Rfd) zV*~+dN)FZG!*OzHZoUxudGCanIC`ABU8oCpV#{^&B13fLCd#&$o@3Y96z7NYkaxx9 zh_Ddw>BQRHDV9rnJS+evx=B`ULB4pUEXPN!*l-(x+FMRMdCWVtToSFuXU`kVjNe$w z`?mOeRR7DCN#PSky_QjHNVqL%N~J5`wuSkIJb+L1XDYYedmb=Wc2w%-RdY$c7MjLE z>_hHq$WFFQP6tL`PMa;4G+k{=ohFaVq4}pj#skdHA8Qf4FC35Kz%T#Zzl#q){P4Ye zUe|TukN@b8@h5-$M|gVuW;#W4z?ci7d=IcFUvoh0$Y)EY8yA~m&$qk`O=YW;7w+`; zyVzZk3-cR|i@)fLs02)9Qi=)^HRt}q+0J2PI^q)Fn(hVPT=-KRw-sSWJLZ3u&A^UT zP}yAbvc4y%Zdq6?kbK72L%u4Z!hoQYt^fca07*naRE#sg9MKMezvt``9wu z@ZQM^iD@pn@UrRV92~SeyY*17>U76u?(C$fFz+g+N=jvDe63C;XkuucgT#?4IoXhx zj1%#U7?5awraL*2=A!WHj$i-vUk~)od-&_TF8p8r>R;gx{_s!2nbtcgEv`c+{!ztWiHlb6Ru@08{Myf z&mnI*RP$f@5{YD6W*)mN-2{d4{)YQ*<_+yG=FBXIJOEQ-n2ANg$c3J)fxSJ5%N|7$ zDWpu5Y@Tf?ESl~ksoS6J4@3a)y#?JMHa5}46cpHWZ)Dc0cr@>3{;+5qww(TRfSg&t zMP@x6*@Q}LG|2&N(N#?8aL#AZ6Iq72?2G%%W*upX$(-3(v2EJv9V@?ap{e(;5n{3w zzO7qVWRF3T8IP3jL%34)A%A|4cgY3Vj8DkHoMVbNb^=5?*<;Y6RCSlN5FLiWtTTb4 z)q>+_v3xKGtZ$ziP@59-HYTcWs<4MYh+(qk%JV4^_4)U+PA`)vP^K8INGu>y6e`nc zZ!@28MiOlK)g-HLoy&nO=D^o6~hKqqNHCGrT?MMziguzsSS1;~tRB3I2K z*SzV0dK5r``xW17*&IC~ZjWVyYQY#C!*Nk z3f{5e1>&9NiB(%9?IM+8!v^!ZODulOh_V(6AVMrxY6z2T`+GxzJmD0MV#Gk&Ee2gS zMi6w6Q5^?51tx9-FfLl_4X*LC#4;@-@?y~gaonHp7}hxqZ1d-sLQh}knY(j<$$_Y7 z3?f}{U4dv7#L{Qhl}Ze-YBmURk{aFS033}36YKLm&4H(n0q1)>tWSE7vY%4cyXgkIh@#IpJjnL` z*MepT=X8UD<~3;UW6e$CXA<--b2gAvrigk8r(Axrvh~2~F}FHuP+er!dKCFgQqfdP zLV}IJUb;~5V}Yb)ha1mcd`3q*BKk&B%oZ;AA=5@4&hv4hYQwEjBxnPIfm($b%1ZZP zEE(KJ#!63WMwl$)S-*zkJUd(*$Lkvmz-c|s&XVWwg(fAIC=L{p>2h9Vi9*U^#uCA)*mP1W&DnBl4sZ6XB>gUkl1GUd5pQ>FI_KzxFlU>Va`} zynFkO4%VP%7^yN@r#sJ*tl?6Cn*I71(et?)#*DTK!3veT=ybE^+@fs=@o<{<)i)R* zBjcEW?#8845^Lhmw9(^Tv54JsH9+f*FpYjuz=%hnBjzX~@!51!wBr?ySFcfzBi^|& zVhI9c#Av*OgMVJQ0ArD(6e5SXWI$_)`%DG3Z6Zhuu>@d2X=rhGm7>7l9pjEM;tZ__ zf{HUjq==xj5V2UN3)=?K(p=aO;hm9UyLfT>h*=>)p)n7{ zvAa-=pfjE&D2@@AQc4XszK4L%eZVB*GcxDiP0)RWV2gr9RYjpA-AWJ-hcjk{hJZ;a zvL*Zm@19pr2YLs*Yh+g#1*l`-v(J8nAO7eE`1r$*@zFihkSWjxIjeO#y|ME0fCc$XR77-ou#5fKifSg}?`l@d`>z0W;qDP_)Q zCgqp?Qkq$F4;R9&_`0eBFB&3sisI8@?-XN|qUa>mCPgo27%65sYC$`~Ip12Fb*!^T zP_5CE=*pfKmnpVO+R-u!$K6q@lK2t5uxgpuegLo@LIh*1VB`Ed#OR#G`(xx`tu104 zI?0*LQO}<#se#$oh$xhG%uyN!fPw5)b6HM9b?%~QFuul#I;g%e;$~vFr}N;`Z2^!6 z-Wc||4B za&!*qB)?C4_?c%$x2`PUnG-_SPaBO0^wRMR{H498k|3T2-_cDE6HO zknY4(@BG5g|2%&7XMc7+lRxRd-o1N=-}#6C5cPOk%eXCbH=gB2htLu!dDjSNL^}9Xu5#%#7khMQEuXXDk<<4LS+7OnA>h zv^@-Si)=a2_9FK+m%;8Eo&{U}aQyp`C|Ok5`jmdwlL8N0` z7l#&QB2{uZaCN%cHdjBWL=1P7&taT$p^;Prl{Oc9t8nu<)VCtMgmps%+qSS@=ZHG7 zT{D|{IdOSdz&3>XLL9&UBQNoSGB9)6wdh2^1n!1es1g|7(L0MUUpdEV1K!T6T*?{| zPa-qI zHL3Z0o*{Vntc5O|`QM2j#vC9-#$y_k!g1dyXC+pQo zLs>#TH$#1T;yb#Q@H<6k{+R&U(H@r86F2P+GM?z*!*svx0?J(}Xcl-z<j7;+oV--HDbk_70v5}1(u<{>o z$3dKV+oBa#giXdGW$s@L2?}aPDZIQxl5)k{xfD85YAm06PwYA!$CBsAc&H6^Q*1Bd z)T7uh5&C=X-7dl%BL?ExFXRxwv6kmDmjz3_QMANxgG}r=AP_F5(y2MvvnuQ8LU*@aq@n2&^`%q9h|v>_ zhnmf7;JkO@H)TC5IqaNhMx7|rpb&(E&ZuDTz2ne>LIObKg0_aH1!unk_iph_jy<NPfH;G@|pFAzKsF`jYX6VOu+_7KLC5> zDK<*c8V5Rk#Lz#McY@jup!d1>5;{H2W8m6ag%87VtC3CHBNI>~4+*M*SM`9>0Sr}$ z2Ngr;xGP1WN1!>+dpNAL6&&pbVSn4XK&~}D%NUFfoP9toq6F^5ly*ic2(zO57{rY? z94&D510w_(5^lZg8YmVB-4y23Byx>`b3`U+yVc0CCWq}{q z*kTsKAo0ld773STIGgAO6~*O)?(v}26vj3UE={2ljuN}jw9NXeUl-kifov7Xbp2fC zH3yU^g~-r2b4Csxt>Ylh|9-!7I2VIx7ll@V%fNu(xHVK&oaZy{_vbi2TBRuiF$gqL zK!naP6rATB_wyZ8A{Sny0)8v*xfi^B8oCmZXIF1`!1=roUnAB-TI@*myqq@<14Cpb- z9Jo-9aJrAdMJx&wq%inkUTmS^MkgR}Ty%4)<9T$TNA|L4WKoB}uur!=BoNd$S@o!m zsBz2y^IZ#?G!c)v8oA}IKXU#Xpm>K3dXpe|43iDE?uHkaL&MVxUHgG$hP-=sp z@p;UgdFDIES)UF=N2?7_uU_NTtJkQt;yN#U{-e)exm=)$rBUDkqFA#|&)IAe#nMc1 zUiT30m6&FA*0QZe^v1>PW2M{fcEl|DeqPfl=tMJT{&*03E+EAZ>|qxDH0q{fe=f$w z1yT0OJ}IB2Dc-z!4Kc%jGuF01+YP0(xiHDTv3H77Nc{i9DiZg-^daV^oAuDL$V+DT?EEV;oXMgEU0lV63qrfcF#TK`yFV zQD42n1;gj#1PbGnhT~Qb9LE#x;~nnzGnRmibN~^{qK>m)7~N1x#4<=#NOznU=_&?@ zMKoRZHnk{jw*x;q--gf$iqkHrJ0xQiP|$9#B7UY{QxIy5SS(dTICdziH{5%;EX@a0 zO2m>J2h4%%>=e$exZUGuD5ex+MEr?)$JGtj7`UI$Xtm&{zwr%x`&-|_pMCew@WUVd zU=fEOj53%`bCJsTt3Aw1vRBGEZP8fJf$ya%z7WNy5(4Uc_FWvcMa)j;Y~^;l%>}3B ze~)vMT0_uqo}C2S21w9-a<=SSHaC+)2?b&R-!VzR?JyRcD=k^|)87D>P^22&z*O z)ZoDFIB<=Qfy`bHvCX7j87ZV%=Gd~9AUot@`r^!G^m9fXD@Cto?+}VB!we$0)dNy1 zh6C^J_i&6;D6-Eh1aUvv7_dGbBWg+IcG<|zU>&1|BBWH!$(><1X{qiZg5x+SXfd4E`9SVVF=f{J5k*6hW33nzNxB6IGAPX?3AMT+hT$t8lT67K5H7|?4#BebQjK` zd(1XM&C|J@&b;$1#`dhx|KIl(zVO63eA%5 zuIWqX`Hox%mskI;C2Wcd_91@neJkAK5UI6%$%4Z-R~c34?h~DTx0zWwcQ;WvKc zH}I`*ee1m}&jH{M{@@SrzyIMMhMI^&*3Cq?60|1`(&rE~^K8fH6H}Q>sOezXo>^>{ zfOr3iyp#X#cXq?rWY%aNjuXe`4-Vr=q#$xQRc905Gy5-jVZdHlo0$zXpCc7i$b+iM z6PM}OQ1SAR7b(n(nodVwnZi5qAo4r6rJ%@rr?{6|X0Bwa_;xYRE?}D9bNUK7Xh|1v zB4GKk@YaX=i4A=8)Zd*LZat+8_ zwE9;e8S)i3kf=e~sUsp&%%OB{j^1(h&b&?8l!BO|0GSKr%)@1)Q`VoG!VjYg*OJ5n zL^h7w7aqIJ1;zpV$KU=o{)hkWzsEQK!*9N)&&u(C{>y)f|Mj2#)4AL&%!7JxV{dnL zr8@cxICa@^^fKKl!@{lY6uYHUJl)LtB4hj|C1#=FH~NIi{&p{?zw8v8g>zbG1|EcS zyKv;+=QDfAU(aml&E+~KqIVOq`Eqd^9eq=xkSOjKuHM-=5>M zl-toZQDT`Gyo`0auIsS|b(ygMHX{3W7s{q!XNhLk`LWKh z{T?N-(E}^mBSr|0NChC%S^=@nd}H|%uR=W_mN$BdeoLI-Ba=esbvQG`%XT3b;=Npnz* z4AY)M%n&MGb`crJ_jHoHJJZbz%xy7z?EolBf7JhLb)Q8LhRsG|OztJ_dRpxHaH* zI~W&n&BeBFkuRcxVG*Zrv`V3hhD)6I+{+>#xxPN2U2yhijDDeL+N=nCF1>pQv?P8M=4M^`WZ`J42OH??_N=EM|=j?Ablg z4ho8}?sxX%g{adHKKu~Zbtj!5TyY^NQM9L5M9LOOsc?w}hDabl<99mdnQ=Rw@apyf z9X?#JoX^qQ7ezT*IMIheqz97qI8dR)pE{f<@q~E^>5E=UxIUFJ2_8;;b>`KpqTQb6 zuz#&)U-#2|f)81Ux2E@yEDI?!zO zvD36LsV7m}_I|}8kD{u6^~hOm1?{M~-CpDV{2HJC@P>Ck5}ZD8-rwQ#^Q5yX@|X+7 zZuk2+-S&XOEW}h%3k_HeTyb}YT|H{|F>u}Aq3HoB5~LH7=P+qN4z-S>DSAd~5ZfGx zTi#1!pcKLF)?kPnR3Cz>6;HrEQWaYbQs!kgSz1P^LJ=YB9Vp=R9sNKqZHw=Tk!V0Lsjtl&1-!4;fFZS zj!!@R9=`YKr?@lMe(&pI`B0}|@C(MSu>_DAS(F0boCoE;uvR5$EEYWHMIoUj;+D%Y zN#}6faYBo-J8-hTiCWJY%cBo-o)BIO2?J$CAX&%gjz*{IFbAaK_UaWJz|}AG9(Qax z4kDH{p7}8%cEx%uu3b?z&cLHIj85mblucAVV0I7jj(7C?TbRTQq)L!+ytW{W^bQP% z)&t$5&Wevb1c0is;8vFz_vI9Z-s&yf)D)-*VgY-j085L&JhG=tpQc%eIZAM3m}?$+ z*gfm;Q6QkGc!Y`TrXj9NG_m%MRs^plGId2m?5%yE-VXFyqrYPIcwryyjJ1F$tjDs~ zdWVy;a2ze}MCE;Hg6pz*{t66Fw~Xb9da95tV~obN>=7{_-cgAS4>I4tbAJXb1;r(Z zh;j14T)!}q-)Sb-#aNJ9(29n+Mhi>@!v{Wl`x%~}-{OPUAK+(x=BM$|M_~^9*v2=nJDkoN?K|m(WY%x?fYsIOCrvwu`7J_HRA%nSF}BId^8C zE?W;$N`)wJQb3><{pfj)hiWx3*bqZI3L_eokgtN8QDGDshfpEJ3I<0h1`NUA9^`gw zLF%xMvtK-R1fq>JWnf$qd?DrtS)Np?nX;DMAiqZ;h%9x=s zqMkG-VTLmuV*4SnjCTs@uMtrTjZrf)6k=sk1(fs#^PrWuvbS-A*#-B3qeR4sNo1&} zQ-9dH14@bc&b?najw5J99)j!ENRjd-WIjXztr%vw_Y>!Jp)#T?o*!QkAtERebx;#W zqvO8NB-1UZT5g8>{T^{Rq5vLyj{A9EB7Jj=tK&{l-EO2w)2Gpt7;zYb)T}f*M%^Cq zTp15+fRq`@r2*HO3-x$rI!5pK?DNkdq)KUPsE0hzd{qRRW@#TyJGkngILAbL0;T2O=hC7VmjzcBFKv%Pl}!T#6EE0@QdwujMy{Mg}gs*$omOeaqk zJP{G=+Y7Z6OzCR2L=NPzadUz!rp&|bO#Oy=@*xw`fo z^z~Ug{9!=9FSKA5xFoEB?c*Y3A!1bv{@&mFAMuO7_={{xe$q~C!FRv=UHsN>{T8nC zP8UxMYg?-^m~)*d(nKiPbnIbbpC5k56OotMBrE@#QOn^l{3@2`@NEgUWxH>9@Vsd9 zXNiFcn7zF%#esDp7GLo-@9G&mG5Gk8(d{m4d!rh^tGVj1-XB=r4$Y{7S+P&>ILV$xs>cP z*Lt0$V=!a51VVVvX9<_zBDd}nQ=d*kpK$h)Q69w5^#Nvr%Z3hk-?AZWIeT36o1v99 z$pzCfhlMN8JfmDT%>|nvateLVPLesa+ZPK{`T8YdBk`5-CYia*ruu6ieu&@v&ELe& z|H3cewmCR{l4ss0pL~Mf{_Wq!kAC<=9LEs?6%IsKRK>p3CQ;Bf1nd{ac{woOkjVSM zP;^79ub2VMNCto5LdWK^-UW0-)iQHCzu&#K*_Y#)wYW!zq(~}%pJtC(^)LG!EtTmug+&mVMfgJLKjO}(cotux&MPaC>M9rciFnTM}0KyTfHJ#5Zd6 zLiYRAXzgDoMWLx=o?mC;=7isyPi5~S0xxy-?a4;1D*?)BZwXPyF8+eCMHCX5+>QEHjz@}dE( zuc@1xdAjXv%!Vs)uYDqgcM4R-I=Pnz;q4?zr2CBDi_?*rKdNX!saroKTWk$KAjMj4 z%7$@=u&GW_#uhh{sPSN#rLbg02iYb(HghP^X=S5c^~9lOehT(GIM2+jA7s{D3L_d_ zQVz@^dH%f^F1-**mB{<`6fGIu_uPWW77viMLn%6y_cnzCGPA)o#S3{SGyHEzEU7zP z21-kH3MW@j5(C2wqcGEJ$v;wIAZ%;lF2o6gD<%Qlh{_GYDz>~W)Jo62tk zOa`ikGxHkZj%cl+c)?{C4nAvH=cf2Ddf@%sT-knkW`tM?lUkH`$~=$87R}|GNW?bx zz#b`LTza?<*5gw*$#>W`n%M+P&G(^|g3Ds?o5E?6SiqYv?B_b~{Xt|u9YT;;1c-(s zk>_Nmvww4eusC@@Ayn$Mq4<4wsJJ|=MGDu*-^O^mWYyo;~IDPX;4%gdc@i4 z4wn#|7%-g_*hEl?rXI{Tj*N3=gfsK=>KBH|tP#K*cXV`^d9a;pXRpuAQpgG7?;V68% z9kGZwPa^gU`&pm)m8y|F%rzjYv>15T8ltZ;*o*bq6Gm)I4Dc=+kV-+eTR7vDaX^~O zeV?MZaF+PQGP~4R94OJQ>^H+vJ!bv1_+T__aN*{0;TSZ9)`sFhkpgA5 z=Vg6G=h0CY3qxftvo5inD6zB^K*8BNF7MC+3Swda4p=N;ijqnbcfI*Qw}|6FF1g*& z`K)CYw@5s1qjy{s2G(-Ka)@=(j}s%utcECik|EtA&vc2w4V7-^t9Lx#!p^o6i@a#YYM6DB;>JXi zX1#|}BHo_DoIoF^h%rPWq5`eyq~=UbV^L=31-PQz;%6Gepe`si9JH>=xUsl%i>#TJ z7De@l&kNjfeD-md5qr+XY23ewVUOP>v_wrVT-u1h2VnhzONqr3MPL~vRoNS-nC0o! zD}4Cjhq&Et_^bc-d-&up{u1B&-d~5~cgrA7f`^lgBaG$AGc5Trw)%ky` zC@Kn+REfwbZh#vugn-3+IC9fy()+*wV6{b5B+m^?=k(Dis)%~5m59day;Fn`_ejJ( z#oaxIV|0r4S#swBJy6vSt#o~wP2$PyFA;;cl5So%bWbO+Kr96+%J?bAd3E+PgEi!e z#_KlF+7ZiPH%4JEy4<_BpW%l;`T<_wUg4vUKEhA^)Hm?2|DS(@&)z4OmG@4KWJ%+2uJI0;R`)P7tVbOM@%V z^Xoi=$OFT0#xGP-*o*?R6xjA45*)3?68j1YL(X)ag1rzqFmu}x?q(YFw3HB;X50qn z4e^}LphS3L(K#7Y&Jzks+{apA%J~DMUkZovzMDifcW?K{ISn57mnj;tTwa$N!uK&2 zosohiY+2`NgfOD!JSmcO@%z9X8 zB;2W?!hNYBW;jZE#B~K0Kj-m96`J!-8k8i7iXQ!7q3A|4>n7v#ID?W>=I%Jmb>Z-D zC4|#828BDO-6z&#{?gcF?mxsnFg9B1fBXX7Hy7DsRw*7Fqhl&hQl;=X+?Iz0e z2Wj-dbEIt<95%Dm*ASifXkKKA(Ojw*@E5y&p2vLEghIq2wFXs>4|2G7LIAMbLXVjH zc#(Y$5%Oz9=H`#b-~XhyNr?~5!YK#L#>;2oTxYH_v5*)KF0I0hkm2JYD^_*oXXe)% z6T52H!yo(*|KK0|&-m3}{nhuD1N`~tpX2v_@AvS3{EL4P*qmIn zWG*|At?)qiBsOhkEwRCj><;CQmWvKg^gm|aTz($wV3Dr`bsfKeKAVil_Q}CGHsMVG zy65-IqHgXq;8QU+7YDKrm@(DK!=k`3H>fLdB$_eRTb44P(;UV!ODD3Ve7)z}8DjGS z&xBU+@?nERLCsgU;A%< z4IjLI{a%P0&(F{JNB`&_XH6E$AcPL7UFh99-x5HXB^G ziRRYbX}-OW8QGD);N9)Nixbi@Y3AGDQf4fK!=Oe5G8eA}1yf&7b!%as)chU2)M0MT zdCMhx-k-*N@$E^--{lf!#$Z`%+uZhxzLXg0QXU6bo_OpO{csSGql@^t>#C#ixRidl z$NdrCo~Uxwbsm*gx23Yrf#5`x6A7G)8qd7<`Ewbh3X0NoqXKlIPQ@o4`#5we*z^8y z!HY$`P18;tt# z7O`(bKX=f%63>FvHW!vhyT$L3&-l1HP@+!{M_#9+BA(aI8GyD1FN&dpei_tbs3s{6 zhr`ZTt|z+rx=tu6YH37Trd231X~RVlL&nIc=`YHB7-* z;h){<5OdTblUAm)W)Ey*kYx_kc2InzvlRDDfR;k46lOpIR}S`B4#$xAnTM@dlNgxu z_k=cGXj71CanE+T{Spc!jDQ%OgpINdbuF;>tu(rKI6LX#HmW2RnlXb~!rgPddxi*b zw8;MsG)%<6b2f_)i&teVN8;4o0yB(aXvCHK7*pcW$BEvr zSQu7CZ4FWyKjWYa|Tob-)qXXCTKu1SA7=7nTfntza4B@;Sq=1Eh zKL(8AO3bp(EO50P;}0%5FPs+zQ6f+a?^)FrNXzu@@EmOIz!*AvzuwpR-)D52&Kj%K zAU>Se^#!46(ZV?q}5+j=$mP)*#c}7h|k!V{M?FaoGa%UXHo7PHEJ%^x{1+b8HPrnLX%tu#F8wK)twZb zs7J4}V~oi2mJ$>cu^_%=PVjIdqBDLf#g_uu2tz_?Lb5^(pRX%wKiG~==ch4)!!8%k>^w=zXOg*CIVe)nz35ahy)U2qt53Tc!Jr&wkKMdQ8{jlS=) zPVv6MO;CC`jq7pXV#b5pfzWd#OgYW(I_k$WEtFK%0Vw?T=>_0cd zRT7s{s0gQsa>D`dV(n5Q@B7aD<0+2J8TNI-=*UdLO=*cA7QhSXuUulKu5P0gfruUOnMV_l2Kx=$$7Vkruf!eyzTldu>OS0m=y2#VFw8jjLW*=h*0Ec+}ME`$Y*=S5`LTSRwI_!W1wty*0Lsz=l-WEe6uioIymp(!FV z#Cvb!nvrbo8Z!l1rovVm1kqa!vmj|nh{2!VzQqrJ^nHB%@yGb!qYv>jf8%f9gV(R| z$tQmWKc3?I1Rn9^obR-DO!|iN3{Df{6x*iZz#<}M?gH{_l9pCfaWuw3$Xcoe^~P|H zbIq2p1kd?@#~5=ynLX>IqS~OqLs3dYsYi&(ayjmRUwpEBe zFGdhziv7nhTwKzQVJK=*JM%Ls6b=cN(04Z_rO>Rj8qq3az_l+D9OBQ5ags3NV;N3f zSjCp91CJ4Tvc+!+m&>&_l%1eV>Ri=AktzFEE^@;lzIJy|_WaS*ZGEiMjj!|UOHq25 z4>8R(UN&Gnzu)tEX5Ss}g!0+7Idh5SwT}+F2HH{CYqGD)U1!Dy>7relueeiX^aQ|u z-2+3eg$6bj*rHKWnP&`do`)a>(AcBVoozlvO&AX$MXbhz=1ws>w&pk=T9wiCbDd3SQuEN9jw3EFuc5&`tIQw@4Mh{oK zYluB#&KvVlA4#Q_xF^e+Z_SzMb&>*B8L=Aw{5dZ4KKTBnNG;ye+tV$6$77(Monps= z#AhZA6TJ5d@2SB(_plyrL9G$(I{H9uy5$G@Lhf$3-C7Hto}Ms<;iPSUE!1^$TKkt` zpLgV;YS}VG@rBIjQuJY1HHJ-`cp~KXeC;Hkl|0{p_Ix&tf2k!fjED!6}+BU$~ z2WQ$CzKI6Hb+8uQG8<44MXmBMc-!->A91!$tW^DilkTfI7T3XIoBU;7Y$`)~g(eCIpg z!7u&Ne~k}5_~5-^jQ{yR{}cS~@BS`6{q%cu!<0F6k8G@XXY$!k_kl4#Yd>&GskrRi zNDMZS&};E9=AuGVS^3`S{<}Narz2-N!g+D-i-!E2rz&|27Sk4rvD@vo9jZ>WA+y3# zMI>>VC6YIXS2h-g*j-S?w?$gd*sD2+EW99d*?Znk{yi$0SgZ~w4lWl4ZeN95VSe88 zqD(aw^V?@mbpD(pavzn-XelLzaOo~JpK9xwPn3%s$w7isk;TE6jX8vJB6@YBV<>>m zESD5orNh_g%xb00ODGpJ(E%2Cp%Zd0k@1y?6>?~ngEh+{VrFC088d7nBG^Rl`0#Lc zJUAa@=Iq*3N@8M(;-8Oqya?9)MwF{l#E?1C-3C5<^8x@yB(WiG~KLul`rin$PrJ3;tP%C>ijXHv2O<~=&ba&|{n zX~DLce=OAGQI)@|Yv(#C?_cN9#V%jS@QED8wUAv6+H%v+`i2f=OtWb& zN%m!a;*Q3=^9GkolPZyJ=97*sEi<=kifs6zQv*4nH$w3KkNdDJ7T=_zx01YM3=Y)+ST z4=m?@ilY+mpN@D{nNbAT_NgwL6J>M!WJ5OdvWdM;@o2;{jY)5sl$#gvCF?zoyAY|8 zrb{SP_Y3b0j0cCi**aTn*osxyNE11%T=4}tTnxdKdI({R+1RPNE)JC9u~btfK5w9w z%7!gI^FAWuxYf!*q(HcwJ8I)do%rx8rXc~u@mV8=W1`bRv4#Mvfh}`zDx7AIk$FPI zgOAQETkzS>MQ{uOU2KX;QjnuuAQ*^2=Tb)|IV^^y5d~Ezy3x4Qi=|UOlNo!$=cKi8 zJoJl8pE6y4Psb7Nsl=8aM_}V62{DytP2^|yt1rxZW=B(40uD5?cPVVn3o-3|T&NU2 z&A5{30!UP1L2C!eM+GNcGqu!NQ^grvA{VqM`#b=Ct{y-Z=5~^Yy5k%t<2Q~F8^UHS zabds}Xr-XG_??{|d7W`^#{vx!d2ykAO$t^)Ydo)+@eZ@iDUrjZ>}e6tUx|AsdhohM zPQ}2ewqrh1ORO-pftaw;4PD;*2z+0wsEwj@#1eASX^7t&V_>+?=!YsmI}TDKV%YTN z&Ffekv=-Tb7FfkNmn+(F!1@XFh*ooRj3T%+9H~+dR2SOF0lNZ6S@>rhw^#8qUJg4g zK5s23@(OT6Ck|f4G3=bKTvgzHbqKKy9c} zpi&`jXb@Ouh9W5$K@l^&dww_HpU4l6{x#0c$h5z%fsV*_KT04;?_=QIdGft19JGa# z`s$I1ivnnEA$YJ0xI&C0S_5}qO1RHCIM)~3pV7i84`C*%p)|~XL)`K19K`-t^s}QPT;gMJ2wVzA zH;g+_Owrm6B8jj)A_JLzHX9umb0UpP=Ikw`M^DpkH`Ll<(0g`fj$Y8>D8=Cy(65f( z9a;yg|kTte)8J6eL7#-(%F=oY4 zYs1mllQQ$Q)#G7VrM2Ms-8)?8!aCo$Wl71$-HtnE907AX}^#|^3l=h+`3rczv;b=`G^Xaeei6)hS|CoQ<{ z5$B;*@pK$Gjsy4mJsf;CU}uNOIfYfvecgX9@0%Xc;3!D5XRV zt<|BWLyE(%$a1$KD0aXr$p^)uhQLrmr|@x7lKB28#Tqu^eDpD5ap^I$fy5$ZI0XX; zibAUu;^DGaMoUStpjy^A(>f(*LXp7N+G~9M>tDw=zVQuw@6#XPPyg>f#h?D^zsC2! z|9!l9^CA1O3+cGXKIJ^G>HK{urXN0F-O!H48Uq+~xPkBfU`$BNNK=pyF&@X!!ZAt# zb>~n&@|zXC8;aI=wxvKdga>AUR8IkCr^%u4&dr%xYf(dtaRI8h-5SIzIs}&nx#NQm zKfp&{`v`B|d=T+9teGzxxZt>t4uj(;6?Pep63g3jJOfQ8ISP&tyU|`8nx2BE*H0*= zqMrlL&nJeRC~S87{hAKXUV!U5aqk`C*Q}SX(Q(vmc|xp22DmD;B5>iuP({&>it94GJqLOy0J=a$za~(Rf&t?3 zC1wSs)|t8PX1E;<2P31Df=qb48#WwgKXG}S8%H}>^BUYVvfsJX3{kT)GdX(3-UqI3 zuoIM3hWoP~0`XX^n*&;3L0iMw?>NUZ`&&}7d_YRjldLck8;bsXM}?qj!*veMV}aHx zZntr`YwvUK%a5u`RY@HLIOx++ z%TdsgBLr#ywi+1!JB0C{U;^WalCUWxs{+D3xo?695egcBjT<(Svh)Q?DJv^0-#vS+ zIj0-*W36*D3$>i-M%|1T@iOzhd(YWt@3rQdbBy2k#y9ZOKl3eo{cB%Gqu+}&L0d+M zZKy^BJU_iz6sB=u44<92SRyDqJ>~_f^&Aj@;3^*Ai3aiUtkw?Ay1W zq4%Sl=sUe3&xif!F)z~US^I_SaSoIa8ycQ&F5)F!LcLc>_U z$H09GZqLsUajFHi?m6=&6+LDt{Ec`z-9;5iPT9z&MKlT(1qUJ7!T`i6^i+jHfFR>o z&P*HE9O0T5pcH~83Dd$65n{9YBT0F*>bsz#Njkf^&qN_G`1sUcSDu3jjN5VIGr^n(_asq4eu4)d#fZHauTVd6d{d5@S)0v=|1H zY>snzmGQpD)%#Fcb<}&z+_|snD_!zAJa^0~6>eoUEAcR>*hgz-S`S>?TwjTI(KsX$ zF{mwP)lM}iYjRwZIR*E(Kf<^F%3sCb{2PA*f9tLG~RkF5oP#hYFuh6m}adghZ=QP?x$m$OrW_b5aBDD=N7t{n>SEWQC4J-1^0N&L{FhW46ue?;pPb! z5|;SM$qpRr zn0CI3(29lQ$?H}JY4KqRA@S3AaAZ|Od2{E9w&cKw2;6$Dm2E@#?gQ@{R1-Z2+xC6AoB*#d?06*xT!Jlog(RW} zaa-y^C8YjRHEtK(K~I= z@a9Yawm(aC{VWj8DVF8UsqQE4tHwg)GxMUvAhJGv=p8u0i2TZfDQA}P zykfAMg|h$vAOJ~3K~(73qqbi{iFCoEyYn{B0@@LXY0i`caWVS`NJ> zQc1Fji|M>h^hS}!aH*ABUP7dKHjeMz@e+=y+JD2@bdAgFl{jCas2QFQ%FP?{LG1T) z95|dufQ_V(bdOjg7yf!fv4h(I1!GRbocC~QPZ&)YEkwGR4-rHizYJS=M#qc0llHn^ z&_FoDfyC1>&ZLAP6VwPj)J!7YWbWMpZHsW&dGpvE?O9s}l><^k^wv74g-2HxF46JR z3O){SYmpu6j@aG_jKf{ZL}==@JR}^lNstJ{q6-HY3WiR>b-w^ZG@ILsmSV!3R}3l% zMv7_E2U+B6)zKZNpCVIH$A9ZI+@5YYdv^i9OkejHpw6J~t`Pjo)~b*cnTd_pHfBr@qa7$M;RPJwPcqlyyx@!@Fx-dv>MIm!}^-R@Ba zXOCL&#a%;0xb@Qq5Vtp;sjXQrXr29tn`eB^MRP+8r9mr#$we>%ZbwCx5OMWMWXs-c z(I3fPR0=k$woWz|rSsm`?G!zf_y#_hDq_y$g{0o1T{H%TXFvUVMm;s>fQ*504UFq@ z2j%HBJTnDp4ALy}LmT7l9UW8%-Vt#UwTB&C;sJ$vzq2uVivf+f1Niwo@qC`XewyKa zzY1OIE_nf=*LhOW@bu*OItMYv_u?dtD2^j=s^KiBrZ_qQ-G#E$8E1P6XD+r3a{~|q zyoz}{LR4n!ycXD1LOQ2ITre(2dt*Y#z(O_1an#fc0u2BaP6wSPznE<$QL>MQyz>SSXd zf;~Mwq4fp{)VP=c;d~#%DJO4VUhwv_w@$B#{8}fvgsBb|u~k&!M3ITNZ{LC&pz!-j z#C-7FPr$tHkuhOOE@1XGJ<>N4?akqey}!Ibrz7Q!oit+XuEV76r9os)cK~vbc-(;) z@f@MjONTR3$Q=C@Q6CHvxnmUYeuNMME#d|m0o`lErY>v|8D66jJME34e!UAWak@wA z{ybF&EB3+GTM5v6^DJMB+-*?vpBtjwAyOg+B9BB#48Kt_wjD37aF;D@L9YxeQSWXv zFfq^OHgj8qIPoIhiS70$vM|ata;HtL`pQGww$+qrl24~sf!AYFs>`ec0S~# zP9@MHcE@)P)>RcRFE3tGZgE_5PBiXyzJ&pEh{w<{oDxKe9we>S2;7b}c#Z4J5hd_) zpCEM+^?8ONQ?2NxYep3&lZeJRk5=bBn8#R*YpgyEx1cgm)#OMVyskZVnHYl7Bh!f` zX*3ain15y8E#uJg{*^f+{(~##c}~FI9TT!|(4y{A_d_elO2B^Jgu8 zv^0rmm|6qjPR+&02Sc}v&>60Nzg8W+yQmOp;*Gv|hYz=J=K+F2=75d~R>HX4B%-m7 zdW?@jGNT>95Os4;y6QQviv$4*@ppohQKtByzKKVpxS0EnDHBJKVn@U~Xv{sicO2wo z$uy;?D)hR$Xgmh!`>ZR?i(axCD9tDd!h%7@2r;q??j*=%DW>4wLa?FL-|(}7_rjjv zyus1EHY@W`{QToM0P=P6igQs5F-00Odh`c&(=!u+k0Z=xCoJ6jV+_oB0pw)CJ-&C$ z=>ltFk4*^YmTLB#eE&Mw^X0QfY)RKRjy&M`JTm@2g{Ym_V|P;g)58(pB7&3w9Nb{W zF7_Zp&wS-n)B*N6r}i3N&aJ7f8v<3U0R3^(rq!sj!iFuXfIXNltGQZktfeR-TFo;H ztWGvQciiejW-!wiWE?+ut{)bY{q^j5uCHHb4#;y*|A={CuDo=MFyq06wEy|t0bi~c z(3j3|uby)v05ea<9uc?8X_uQptL8Q~SmHjk$f2m2!shhPOc~6N*xXWMle#MXda2j< zxBt$6ga6{^e;$A7Fa0I_<-h!wYk>V_ef{a5{wcoqz3<^4{mOUn^yb~TUo@JQDEuuk zK?RW;-zsC#-5mCCzo_U!-lfYWT| zqro0cE{^Mvc)~g$zoIrE?la~FYF?P_O>m;+W=aJTZOHa4>hfB1YjvRQ+mI<c5-y ze&xRZ(o`(rY+CC;K8L-sv$YNiYbZnuWBiaM2^f1$;t`D$zkW+>ge|fnDI<-%@ms|i ztOf`*Gzptg4!%;U4bJ};*`;kmQkP@YRg|gX{nGDgTjUKygBjc^ODY|d*oKnTq}_f` zF;IsYX1I9GG7~u(z>$ZQLI{gNhr1{xkdS`xPFC{Y{;&TIetui?_F>hR@%70kpWvVV z(|?M8@DKh+y#KZLV9aQdlT=xxTNY8_mIJGsD4%^5p>0p4Ew?uJ>s_#v1JfL4Rdm6Y z*R&9Av<=l!Zmh?lJQblP_whnMZ{o1rzkC?hA4Dn^IkS%lW7`n*E4!6qa9VVl{AY6_ zdr`QF5nti`Qvpo-y^~Is%oeZg;~;sws^c;{+yZ-*4X=kmYGIH!EPV|0(hQAe#ZsM;1zs2t zB@tPz;wa0?8YHg0ItSxK{b4_Hyfu|$ex(d;BAIM3210K}^FWnLIJZY$6!jp)hZaiP zS@Z*Xj4WaHEXZJqt!t(F zSYtfk+&5%@5wLBMBWM%wxNEvcqf-jCZn6F$hqG8`3klaTbMwYwl6ew8PYXHEJtjlBBIWzOz~_ofddh^@XZ?g(S9~7^mm9<7=RIPYZnSli_9iB4f6A% zY*-*cQvi^-`krxJfkldlf?%*CT4|Gxri4%f{jSX0Gi!zYl^~-ft_~t-6^Z89>AY5tRI&{v*P1(^^UqkT zEJ1=di&iYgil50fd5@EM5QqmVvC*n+s)moDyk-V$?$dj;Nv=;wyM}Gg$a+p>i$|h4 zYv1WXSAfJG3<5RJq0Vcp8?7fBfLSLw^19*Z4L#x;x@l23ocJ((_(4FwoxV1)#5IpK zJqa=K8Cf*FOnki~A<%S3Ok;PV0ETP2$U=#uS=0b-QNK=*T`;{On(ct9yThgG=M~Qc zvLeDDGFpp-&={CnZW>I9>~g=CDV&_Dk>`%~AkK#obS|34!Y?{SVAu>1Mf~g;8G?}w zZSi{|#?d;S12H_!aFzJZQKy<2m?4nrJ|Xv9#_h2$1(28B}-7!vz#h*@HQI0m57!AD2yhaRYJd3u?|3)W6Cg2Z8z6>TPnj)v>andx*Ic^}pB5{kK>vY^Re&si37s$-&}yAS?d{-*ys*p#SD4L;XkqRv%51tr zuCa^R%{mm~0}pYr2@~NO1J}4i;OO2xQ#Mu&cWe^C$BM6;LpMUA1d&V#;r zyX&v=$q6$ub-BBE)x_y6HVwU>c<;UU(ObvIAO9)7|9juZAN|oEVGP0Z^P8y8_UHgw zLppUA8^7wY?n2F7sO@LLC9=(ac9KquSQSE4O|nhvPKSzr*iXf{-^WAb+0+?pAJC9B z8f|2%Ws3Mh;kda-13{oltThPXMsAQfaKG-Dm%BQzYry6Jt3gH(U*N;yM39SkoptmO z4-OZT&N(7FpgGAU&*VX$k#Gc4_o03dq`xRZpe}}5xlLXVw+28l%rk;pQpO@~XHkP9 zel=(+B`!^baiGa*8^C)nha(D7pcX=D5Hy6^3A*E0b7!pM{@fennvqK#Lv)=nu`Qg96t_zc9ol%*64ePBHDT6tpiFJt^L4Mt2%X(JwbDfgM#665N-5Y|-#HnED zm~+MdSv(gmcBHCD8y{$NR(~hgOt0M>$$dnYwF|QRJy`TvJDo0mjAy=a1NCJD(J+f8 zy>yRgc47!u6EsC4x#yS}r~|G0uyl@Dq#iVl|8H6*9Jl;k-}>6x@nU8BKcZ4qAHKp3*(OvUC$(AtCKs@gm7I0ea~jZpW*)#)rjAvZD@rD-1^?M z`rN@CJJ$8lsr86u^^2DX<;=_QhMzs4uI(X<(<&ck|5-n7c>eiedFCvxY{)&UmP^IH zZ7lpnub*Bu<{!hF_nY1V&6U^A3xBH2#xHxI#LRepe!`#o**~{bVbhzZIRsA?f944x zu#1M}aw5bH3T%!8TbP8%1hn@BOzppWf7f(a+177vIV`RQFXhYIqxZuEKn7jv0c; zatCwdAJ0T{N7J_zD*MY9SA3E1#5Ol%4z;qEH>cnTHETB8tz2-?Na_u}bEsW4@WkG5 zxbFABi07c9MT4=Sb$%Gs5Utz}clgjlR!3qqu@!0}63tAmU_jgO=(@!eeA!O)!pBEb zs)j+^`lcJ6v>Ln~Kwk|>B6pIy`_P+++*&xQr(;@U7+OQ5Z7ma(YJ#i+B?>)TnCFKK zY;11Hhw#zNP~Y=}@s+v!5s21)ocQL?{Pc1_ZxoKiS&?a})>7^2)GvC-S;}msA>!zo z)*i$MRE|li%y$c&MkB^w_zQmlfAz2Y75v=K{T#mat#5s$Yu+cHe1c#8!HeRfQOJhyLL#p`2VWeyvlM$M zWzox4ncH>!H%bp}8Rnes_@o-P$65e}A>{=@LNL=0*$(t1zTsHL^07Ox7r_4_@14#~$*BZ!ZwdSS7Ewk0BY7#0M455X1E|B;UInc`GN0p1L z;U1r&Ao5)H78%a1g^*;9n7j27Qv14^8R`r$J0>@TDgM!}j5#L8)LCvS>$WoXHi0dL zXqPFnJL6|P660#esr8+hLDA@MEt@~t_>5*vWxqu(ZQQq_R)Q%~CjwCHS2>7p>2ff4 zLAV>JFX|cyWD>_+2A7~-w_%nGT6S@T!XXBfgAG-5?zlbO908oew6NHp=ZVgYNrrhG zOVFHGpS~w=Mb~O{sVUQWmX3za8L=Xzd zP*}Pw!a$*|0p#ZcoeEZOEHwpsEE`ijL(uvO^zO~aT%%OLG0=t@)Y$9b!}m(43kxW+ zA}2H&nf}d(_#l^>*O_Oy9PghE%rU_RoW1$p$LZpWyzh)wXx-h6u_j97%GWSK)h+Ds znme1y)O-(C5zHZePqY-CvZeGg@2{4ukL{%}3LW~gmPi8&`R+OrqREPrS zaR8m&y@U{bd3bb)JgBafJ3O5NLmKCr~5FwZkyd&lj#MRU@8 zP-Ka!HV_*+1O0a3_I$$`5j&z2a}H1q6Rh%mK`H!O!}T2A>|(TB`;UIOcv1zD8Mjea zsTj)evo&nfIHUQjF>v%V2BrF7xY4Kydv6i_h!VuEVbL;@r0B=bE?mEe*@p*AF0zP5 zFjuy7h&z%m4Lf3?*KqP3YNstJ*l7=KG*gLVSi8ZZbD0yW=s%f33I5kFC7&=HFAM zN4?&NH0tMC*ss zI}icQ1~h4P=CC7Tfz11I1}8##=6VoOkBqpA_#Lzidj^RDDliEH91Th%gfOA^!`;(F z^%*D_QwjH>ej;p+3w8 zg4h;O2H`4k0zy0My*6ev2BuuwY+~Wt_jy+i&{ZUAncV9<9%@dfS6Evnj@CPl^8hz0 zdaOsTwpwGHRRXWWx?his-Xo<#(j#Nhf;3QOQdJnIFuPUlpA_E|WS5C?6Oa2TH0hxV z9m69}d?ByfgP39A1n()rAU~VHye^y}$ZqD0cQXZRoP{I$EF8LWKCXRYG*{arWpX5D1;SpFb*|EczcxKzC7_vJ(beKoie# zTfN^)t~yg#ilDebRB)eyzSNm*L)koLlkbB--G?_S55;F5*uQvSy){L#)Chh-dto#@ z&vBs}(^;MkYix)*s$7FsIQPAPY>_n~qF?B$|8WC;Y|X;;!M8$wirAK)-fJURXvJ1T z70(+C1)a!teW(;zdEoHH>7m)!H>@W|Dt~A(6f@z?*_FZ?I>i2rm1$mfM;kC>e=f}YTJDCYlPu6ZAQ^b!91zyJ5~tN-LzaeKN& z@lBCK87Q;e!D(E>M_?U_T-EEtf;Fg&p)~t}i??Cz<3Nxe;sml#eiWhUgQC{e#mCAm zrxhoXXsXA&?#F>+)*)+n-lKqDM3ox0Z!T1h&u#tv$h)#dCCSEz*HRP*pXN>b81klq zJ@KY3>YW{}&6z7@t{4V$AY#)g?hYDC$eV4Vt7zor+LjfWJ7w1O$!nbr)CHQTmYGMfeJujz=~*DG^7Pj~M) zCK%<4EwNFo(+Jh}>vgAUtfVfbn5=R}5w&#WSc40NNO0j}k!^B_0C&*|Q_z9dJ)Ul5 z+MaWF+Ad*3=T@0pl}Gm=K(SY~ygiU)c#lHbhR*rE(*1i~J{(&v^L3x*L0=-9-1FgW z;RH?5$nkpnpfOQq*SIR1eMf|*t3|QII=SXi4lLSgqGO}+m}Mjq2mT&~cFgC+hobXA z5R{^{G2NAL#AoLDZ;InQD_=SIUQ>~R}mnhd1S8hlRIaTubRvXny`!2W9+j{JA-R61lct69HC+rMa}y%1lUIs# zQV8urEzkP%?=9t^&2FE}3TE^|Xd2@^a8D}|< z0LS;S889wD9R*G&<1UIJmk;6NIkBlw-i7+HZ;S!hjE0T`X>MyG%8a$-sm?cH*xaZSN_9O&l>l8Lu3FYc^u=I+{9SJ-?X^Tu?>xl9-uZs*N2NX6XI7<Iz5k^xW02_b<5&iH(OLOb#dlW1~x938hF*@{*%c5_M@&>Q)hzRE1c7U7b+`j$nEx0kB&KvBsh{PKeStHYbKSaF8)fin3b6yacRhKb8QcI8SHJgUf zM$Lt)=Xv7!`R3W^Tagd`K&(CkXK4-&qy~W#?Su_BF;pMt;7|^?m*isORfTh-jx3 z$K;f?IL}hz*#(ZR9FnF3=fL2)?S z&Rgv50^y75FMVx;u1Pewe0^4yMHG{d`p0mw`##<4FL;}@;>rwy>$B}|w36r7kEyO9{ zX|Qg%t_#=8q*}3TShc9drZYn_YA;M276d(|IJY^v5K1mW6){|M^(A{d{5%pSiAE^GRf~v- z`~Ah&x1^LEPRTIUW%RQ(ui>p{L+rH2M$63E8ke}!f^d+=7T?oa(Y}4w(qQb_=BtOt z73Et-l%V=r)UY`(ONxU9iEWC3xuf#|oA(gn_!;efUD19Bqk~0^k_p%}2xM9BIl}&^ zwbF&AE#s=v+(a%2I{E=?2Dt{tHPO`H8%1B5nL)xHOkqwJ(djWQ0`I$Y2{hV{fmHRP z*84#ILp>*V!>-aob$cVvz>R9a=I(@64b*gWXVY)Tr0$LE<@Az5#vjKS5B?*HeId}b zlz<|08@7i#iV=r`&*SXU*}8B}h@7UmIb>2{((Cmd$7&GnL-C|NWkd0(+&-?Km&%UB zW$w` zl~r#?ZThdVsbAg{ld7@8)Ese0TEoP|@whuWyj7LYxjr2qq}T)I-W@e-qxPYZ#_W+9+1$ptGv z`Ko8}cYf!0@SX2`2jBhfKf(PP>P@nUb6<6Uesn@D?g4HRu&C*L@*Vyx7ImZ zIp!(S>z%hqi+%rJ--}CKnyN%Cw0bHxDbUp`_GJmd3OT$D(7i!;JqR2UlP2PgAYymb zs9Qq4P>ce-F>lXEJaU^eJC*X1 zwk5nW6w=%@vTB*Drdrq38}aGnhlwjr(h^A=%<^zn zPAO~-=3cd7iy@n@pAsU<76ZBz0Jtg~-MhYCOLWIfWuBvw^;GDlxQXB>Y*7P;Vm@77%o`Fd4kSegih4+<4+Jtc#Kk3A4K&Yug$jM%Eh2r>m`;u|zm;=b|h`Gdrn1*SP#J8Bs)< z*!*Z(xjWfa?p&be$jm(CngPer;~7}u zJyUydcVr%*)1IslcNFKjCG3?V&&;SPlV-3;JGMRZN#J78wnuZi0>jcm8#Z%^SvW}3 zQe>Cs_d4GZxmnV&Rc|_u5$;nE(@trjE|G>CJpJf*5eg<+Z)7!Ip^E>U?@5wudl9rw<9abx`ZoRP!x8 z@>se1pS#~(EO#8yQFn}}sGpTE+{xB(19wA%LiNIDBIp88KhRGF2hvc)vsr=eF)U_i zMul-6LwxW@{xd^+1}MPPa64{L8#s=JTQsmG2mv$;|CD=>-~^or z=ks&8>~ljW9LzX4;*}7&mO;ZoXINv*5^_0)yPuw|sY3$gipn}Zj>FOHDKJ#UlmVNH z%PjKe5wTVsY(C_-5UI37AoB&+B{+_oUq_ImlwTav%_$U|?&g!}C}BDpo}XH{`|m+J zZ~<2{_Gi;3hP(h!-1V)m9Y&aU7aq0SQR@IAhtmLz=s%aknqef-M@HC3I~KAl+&yfnnl`Xr;X;xks_+ zR^y6#deAJxh6B-aj+N(HQ*v9K@VeFW&DL=Ga7d;ik;K zg}0%dc5#h+h{f!c$UPz*IG%?wkh!#?f+552yWT>OG0R!h+50PV4A^=4ux0w-m53pM zXSR55<|Ycilpx&k=H2)4jc<*DuXA_DppFu?Fn9Ez;{Xa$4ot7thW+R<^znfPJMd3?TX_-28h<^nZHvdCuN&+2ya5+;HMEEXK>r9lblD%(a<* zmKtMvj0!WJZoTGhi72-iKF<&i7roB35Zi!fThF+6oP_I!GaveD42XlEVScWEd3n3_ z+L}k|#C$`q89gKmYVf_T~vq zgP>yyGDoz_6p%5V&SxB*gH)v6lj}zf9gGx1T_|JZ*mV$adwOz8^EGiM#vTgl1R>A7 z_w|Lrtp^#=5?t3x%_q#a5`AM0Ri@ zNH&Liy3SUnj6NVC^Ls6)?xWMW@-?w%mM*XJK4AOtaB8d96#IKMo>4eFsiElWM*C_u z(}OGj_28dqsb1H0+?(}M&cw=@`^ndrKPD!^kACzc{MK*%7QXx4@8Z}0mtVv4JMUHF zcg=)+;pg@^DpFY)yQYZ^JwUBv&+=1>%rRRzYG#YZkhmLHSt4+YTsgR3!Bls(<+LT+1w5NdhYz=TnMq1%ocdWCBfRr9GPfe}dJo{(VISc3|>>*+_YNb%i;or>W zcqoY}5K?ARxaoyfTaN!%@uFYmO&ElY5Fkik>>^v-<%f>@LAcaAyP8bvfa2MAnVe~~ z3LlDlPvh|64xp70OM#J-KvnHoTiBuGIY5m@pCsNqhZY-_w}xKfWXg=?bl;`p>L*`c z-J18W{?)(2cfb2x{MxVn6TI`@*ZlrddvJY^Ik%yjma@>o-ROC(DKgsj@Gb8USOS+HkDx8*J6zwfen~jK_k1Lay{X(ZAW-H$W(0^Wq`kq= zsI6S@u!7exjcikgr`sS0=e%Vm?-iAKlZ6P3_TYX`0byd7vr&-ltR!O89!FR%kIZFG zcgePg)HTmR_m1^vs==&cIob>1ok(`|0qa!HOmdu@i-z`CphVu9IvOjT-bB2ST4;kO z2YG^rCXPif2(_%2b3slx#y0Dn(`u1zR(TdD7Tanq6!`G7H?E)(+9#m(AR5VLC zoqWycf!wA|eAo*4URljC^pz0oC2GC527wfg?R8U>^SVel-NLUYQywz&nAnk*wnTjX zTEfY84M-sTn3}7x?Gf*u$aK$aTW1q&?hFbSbP=|;>s6w;5QO;IITibGoMto^coPbW zWJd8WX4;~)>R3g!4zG3G9YTp5KiCm}n$M^?9#isl#v1RCCU2TmHgB$N(~-?7MC~ys z))ZK68SL(^?(PiF*amcuXvyoWo{~%!DEX>8C7Ozxd_Rzk8ac9ais#fuPFlHER6!z` zIvib&j)UFVBK(xPnWnxY{fd0w?{!&WO)-YVD6Gl$H$!F z0(_2kNOP<#$MrJ}AzG{ptD)q=f;kOyC`5pHpO9w(PK1k1!jU|1jS=L$$od`=h7ff| zQ!pJObav1T=Y2G}GM~MXqrZE1EbPq4BqB@;TP!tqfO2!^CoODbQU;QeM=?B^V*u)d zs{0t2I&h>YTT_hX*xhtw6T5)K1;Q>)AR(A>#VlmTx@SfDnW6XYxwhf9qfo%8Ms=@-?wk`kT+n#*10se_4UIbh zMWgOnz#4+NaLb(iz!4%2$50FA74)66qmjF}T_~o|IdB|jII)0nMYc7__nyPEJY{;G zDu}=bhj;{qflU;=h4U6IUn?+dgs7<1x~3s|st^i`co>AU)COd8{E|gv!qik2fEkc6 zYd~Znz-f)q*&T!tR)8aFERzYb0mJY$SqY5+h7&&60tcT&A5{-4GsPs2sp`f)VDUw} zkjoOoU?0TjtIS)C#;1nZ*7vWOGz<>J5N)EbLO!?Jt5bmG_HAEp`<7js!~;N|oP(6PA<)(`~R2y#SF~H^<$@3)~K{s3UugaiGEYz(s(t z!PtlL7>|wReb~>`U{U*#8HV`%M@IvhyZ)^^GF}w8&w)lAXKUfQjrT>luTl^>R_s+$ z{ESk3>jD50r)y;BkV0`DF5($7ab0&`2U2LMc!XvL<1UsrIyg}b=p(@#IcAN;`|;`<+dA3ylyhdw|!TGjO2 z8JLP|&W8xD#wRrYTh{E^j~0t(bM5gB4DL~L=D;HMatqqg7!x2XQD~B$&f{3;GxJ>4 zyrX>TxMP`{zI1LxB_c=!FU;my16;P&){BZw)$U2{q1@8kLzjnvjp^?kpy4NH+ zy_f0F_4M_ZxQtCs1C!bZ(5TiuC8utx`F_@jTv#w%;Nxp0hXa`x@geAvE|?i5njv!v zlGBu&yxF?fkb)4_WyD)l_bOgD`JR-jCm{2Ti!PQ?XVFu1V;{%ah009SgJLtqV>vt% z+RusvhH=K}%pkYi@cuX6$Gh*ni*a{aO=Cqr4jcyqlZqnRd!YKELENY6H>|$;7NZrl zeeW)|TZEU`Gq)ZivaX6V4G{tf4bYSjlK1#b6|zy>`t9`dhs8NM;sY9YaF0GxKUUAa zC89eWM!wIx@D@Q~>p+XRBwBlXQYEPlcgv(Yryz7_)t7Lz^mZ1D(lRWev3|IC@)Gg$ zPl#SKg68C->grsNbH5=N#`Kt|g+3~yHiWpPT-BOhw0Lh6{jH96betXF zp%}Vow-nI_3_nZtM)gdkAk2lzhmjg+QIq5%;SNzaHG(+3$N%o}; zZ>@6KyAMp&;=L_{B#6-0q6fgmA8HDnv5$o(1ghaor;6W^X*fGav~|OXenZA#`4!Aq zIr3NwlZ8Oa7!;yF{<|;`A`!!t7%A_;S>7{Z5MF%+zolAy9)9i^a-lCI&2m9yGgozQ zaN9$E`HpJe2h+Q=e9t9(jpokpT`n403kQ(~!uALxsJzN<#4DE=J^ZW(r32IFe)gY* z=B0WVx$+LPnV%V>Gd}!$?duw@>*$W6h2H@lufrMySPkwqHi=pYe)9E|43a+l@I(B@ zZ~O-S@pu0*{@uU(zXIF7W1LVM=fj{SRR5wYzcZV3iTKrsNKhm)bsw_$QaZCS7lILQ zdQ)VjcSoD4d=>Na!2hJOl(xZ@E);9N<~-EaA#^#8G7B)XMiXb%!qIkJ*XOdR(^>i8 zm}P#zJ5$9cNCM94z*w2QvB~V~-xs@a6Ul-f6HW2|;eE(0n)_D6#Z2{VktHgrwh#J& zHd1GKVAwX9{Ka*Pa1+0bd} z229m=4pl0nP=B)WeKl*|_kGR#$Nw|_^}qf%c=PW2_0YdYs_%!K*ZU}!cr6Pl+2|9C z{6epuspTB8LZD`y@OsbAIwA4f_4mU)TKjSUz(7C0P%A7D!>&Zt&9$;}=+f7y%oOJ00U3 z*ULD+x3}iFaSaMhw?R1o$U2ZGo*CFgJhXj=n{&RUVm9{H-Wz)B)dVJ{aLRJ6y?MaR zI_?OEU1fpdRlZH+tBKGWmKW(rOGJ=OCnbG#4_Mtdd9M&LlryW!uWd_=I36iB>3r{< zKL6}iyg^*VP0*V6Z#F_62@_Nzfy!?TEcv2I*h7R55$b+LV97#-_aO}8X+U0vOzAgpAi_$ud?DZawF+nnQhMthYvzwW?jn8yDw=q z3u^E?z2Sf*yy#oxK<g6aNb#mxxK7-0LXk78ab8Ks zP42}mPKkBDNCDpT^gOay2Xo!6eO${S#o_eQIA~k=nk__s-cXAFCIBZ*0WKUg(~8tl zwLq!){nrDdXdy7+6hvn(apbLQmw?m8%7d%Vj}3d!{!ZAbHp`#7lrV+#qZizY)`S1p9ote_b2rB21n8u*O(E3qso=&Z>z!K~HHGJLUn}4Pys)?ce zxJESg4O3UN29q~$uQ6c|9OvPPa1Fe6xP~k`ZoR82cfmYn}ceQp%u4dAuh^@f@v;lYC#oA?UuW;BFZE7f{cCH8-ezUXyvrM z?gE&sqtc~MEB)>`T@ZFykw9#fy-+5NYZF#;oDIYB($B^hlHDXjY?eJ`EoTr(ibw8lFQ>;bhAR zw~Lkfc|a*Ml_fCtyE!52|G;CTLC9cnPZYis9+9ACxL*T0ouHM^DMWE+Zy>ksS)V#3 zUPtUv?2&6)eIOs;V0yi-M3tF5=WugLiH}n3rxD2^V467CUHz9#cVLS;QZ*cN2zMR9 zaNate-g$$59QfpiKg16{{sI2||NZ~q_y6FJa9tCfjz^P~ZGG9j9FO5q(o*%o5Ver* zNot|P$ru*6vR|5lgme-NR`q zjWN~9MRYvj>CGFwdGFmApr1v-ar%!7msKVreAdNA7J~5JqgL_=Mo~rY*!EHjd_oG<0Wo(pt1+4eu>gh!-!n@nEm}Fj76U{z!w`@3 z;Sd262;&-1Gd$gH&@sWiyWlAH5et{1OaY|DGbQNV<85+%B6iom_iy8#iHvG${#;tj zLPZh#VC1%k>A;LIrVD+YoD)O@73g&>3M2?;KQX3@;Y_0!7SWaCxT;r0QXk$IoUUiEH#jEt?gM?zP#M=>5o2zn&F*y-od-? zzK2gf{si~?g`o{iH8Qka^kYdwi}E_pid5Ooz1CI>3RK2LS$6{f03ZNKL_t&u8`d)- z5%c5GMTUkB?k$kd@!X#To=Guu%E#^bbOTzFPBSw1=%AxV&a)5CT@1*cRo^KDPpe-^ zdt~M|r{maT<`4jk0N~Yi&M1CBUZJY(@*;HDC41PdKFL(4Bek~mN7Z0Sf z7~b*b3pZ`su$$sS#36EXrSCbYnYI37Oq!qjS$PoK8~rmf^gcf*XFT>#Xyvn#J}NHk zRVI98K%ac% z_|1R$FY(DIpWylVd2;~)X6+IAOB_g44cbC0BxbrcT5C8?&r{TCg{(+L6K&0WX2(fV zIHyDGUSf{@8Trx&ZA{?fEClFsaxOXbc z@Im5H`~Hlk<%2sj8Y+8S$?hoc;WW!k=|>DZ9Fkq5N)b$1ZWP1YTUUk&Lv$Ruf^ zK648dyG$J2v(Y$mmUG{%h$G&Ff}5&64=lv)1iT_IwG{j81BJ8q8lKOWdp+Rk>fI6h zHEbcSLAC7%hfNsLVjs$eWi~G}PtfAfyqk-;3K4|iDx4$!!Um}5#f z(w2MPA0T(*76~mJIwFofv>5bqVEo9~9e6n)%8?B1PKPDdY55FRW_>F z%xfXQ$d zc?=9*t{0e0JRfi3b6@u>AAzA)#o2q+<)Q|;Ph9sqtO1>l81Mr}?BQY^*ZuB$Egzn3 zocX|!flj?a#=!l$hr_4)y>>nWBw@v`5IwcqcQ8tspviOV$Y6F zrz67W1bTyxfjMM};PXtmt*K|bIm$EEJwq6V-OCB6g)3TI02Ky{8GDwQK}W1rk%P+z zT3(&gNO%aO2u<(utkxPxj~b`bR`+PdC-bn6)AnosltL4nXoOWPT8xxoy?VvHJw4 zP7F~TXZH-!F#;)1csjj)(ICjE`TgjQ%o#X({~X^uKf7RWPF(YXk)xGcKOir6jBDc3 z3&+`U+)lLC1MBRVXb#GX?>e-GqUY&i4OhZA34)Uf6#FvR;{swp&8>kWdzdvvxs+dtRac~(u>x#9NiyLj{d*U`@tAAb0|`2O#H zAHVavzl)DP`jc`k*FL&Apxxb==7Nk}m@Y(&0l=b1XpxQbKAv+zqHfF>GF3Nv!lNKxH6#8yshc87@!ahRz3CXJ~5}^YWUOy+7r*5o74U%XC5K*}J>XRqDKc z1VS6bYm71O5c2a^!_6<|6!28cdB=PK?kX+<6NNHjNPmK?L6y;Z4$2vXhTH9_q69!8 zmKLu)T98VNg3u>kfirhlb2K|*u%=3o%xZ_%Gjq=R?1|v9J`G@v+CBzWJp@oPB9EK- zVJ_ftB>rC9`5Z&Q;Rxz!L3XM^|HL&WIO3L$qlXwy@Y&nXps`jy-EMIS{hly0-wQza z^hclJ(@#GIbI0@ZGv0gW9URAj`}BO^Yg{;6!_j=QJOe*XK?%6uM~J!O^V%Z9Gz5wH zdj!p-%oCCQ;)EA>$NPTQVjsW!jHOoi{??qdGvyAQ;%Bz*E@hDs`>w)*4rt6!_Wt}B z*E(m!o>;MJl;^BvPP*TH&2Mo|XuO_L6$Nn)IRRxK9v_Dbe=}l;x%p=aj-g=GCc{zm za}JnH-1-y#U-sVR*VZMg@*8tT#JBc7=f3hnAzoG)iH8tUc8rPyL4y_@T;e~n<+f#a zO~*yUl&mTv8B3OsOLCH^Qsz;{loCV(QP@b3G6{L}=Dla{wZ4d$(~bFvSoo2cSw%}oK* z;{0mEnG`D%?3oH6*hLoi~~r5(_D`oPxDt7h~i9RwKzBnqZtJxHY$udReW zZJrdd6e@x~0aQixXi3T_Td~*-UA?@c7IYCv??!L&yNkL}*hG!PqN7xRMlJ?e6u{j) z9m95Z5lpLgFOFWw7~P`|su7i&#pSY^aQ^w}$!f932dfDoAm1yB*WX5XDR`a(=NJI& zxwzh*PzvFpUF^;*1FD>Nn4r&q$@UT5^ufNq)kWrGni#W{f?CWRJH%*l%mtTLQNu|T zLtN&~mE(UG%IQ6iQ1#yNv*(%bs)WS;rt4haa#ciwcnzKDZaDXkxySdPy`wdm?_W#& z`OD1c@ANHqhxprWaq%LbHiXe~jp)_{M&<)E&hrFw$=vi9!Y-6$Tu|q7V+Nj$J|Cff zFTOtc<63-jX6M6M9F zeBpera_yLkT1s1J(r|&}ZJhcXj*VkVm*TxxM>7X@ttU-Ibl^w#L(&ez?&wzj|J{SW zD+6>cKA5zNjYI=Mb%~gmJ*&%+n&GIY$S|834L~uD(#_#J9jC-K2b*^Am=ZCD^;E2Z zJ*Pk&85DocV2snyhk+_fjHkP)R?g}|L1&K8oaSVcdGCDs{Oh~E=l$hh{w4m0-~5;O z@|VAikG}P>AxF1?O$dZ`Q3{dg12NqR-4f#*Lqosh2d;K^kH7q!?{Ih#v9RrV-(lvs z+|cftqb%b5nUi(KM^SfAirHPl_ky~8Aj`b4z6-mk{`&>O(;6_n_iRp+BbxL3d(mM- zGrbd%aOD&q5dsZ{yJ5Bos>(t_`{xqw>nZm|O$=f4vd1q_Tw4@RM%T#PaPrt1Nbvmh ziRn1qxz$#gG41)xdlt3ARnodHK&`ZexrgLAYG;GH_ej%ipD22wElL9EoQWo24Eo}k zi-v1Yw+wPxrcNW6bD(%uV>I~CrjXj#lFWJ1LWDq%nTYmpUcFYGP!HV(P6c2 zwZE<=#|u)$zH=1MPaAzCfnndTb^*!ml7~}l#^!KqY?#%WF$m!pF(j_~gTIT4;4U52 z`#mf3&Wdg#fXLm|?H)3H_PSK#n)jWVBDE5f0I{4}r4<`B#V+r*2M9`SAc{3(4VVdY zZb+;L&)wrfi#8*aq#+X}QaX=P-<6=Vj>&?#9!ii;!LGeIOB3bN*V+=e$Ul;uf z!1Z=D2eLZ?!%U!RjzcQV>zfXunvKiI=alHt5KxLW{z$A56*Hu`A53?_&0$d=M>`V1 zu6;tiX&*5wl~*RC#jTj*hftu?Q0N3B8&sz)P~vx=6f_0U|{$ z<}!|xv(*Ajr}0s^*Q|Exqnnrj>pT&sjnObs%W%{=Ja_o{c15L&?SrL&*w05_OFBFw zv@jkHcju{q#A>nl-%gnO6l@qr@#ZmUf#`JclAqga?hJN;3dwmG{ty|PrYXDQa&4?}AR-{8BqCgd68tc0ikC0#mH*-77 zbfho^0miW0>aTlrJ3E^133E=I{j_?bl&tM{WneZ`voY?}7VusFE{7@Jl)c?1@F2i~U=^2lYuYAC{lXKVyXeKHdV;F^G8jVCnQI3-2K0?Ku9p^?(i(yUNHF{k06Ypo^*#C=p5sd{wk8p7oOY04&CMGll!#HZqRyJCodtL^=dt>T^c z-o<>LBNc+PYow0be&F)4c7H6&uq ztY*F4u0B|+I9TuQR;^TUadfl5$c|(&IP8&KCZwmlzY>)sI*Gg5ZGgyGAJ$S(*+em; zpXfK+6(1g6Sw65Zq@Pd)T5S*ruD2VwSbs(UJm0PW6qkofuJ_)D-}Rgj=g;$-H=p98 zZ+#0t@}q)x-+hfQeE1>WfB$_yAFTgT8~eSMOyK8KJYo~3AIIuzChxBB9ffzexPS{; zBo^EKjgGhjhtO((yWiZ@>vz&bIhPta=@WpUHW!|#?U4%dGZ-tH$OYZHiS>&k;^!oY zjJ!h=#hGU7_jbE2dYlZL^M=+AT#g2<6%Zc?yO301-^cDn6<{-x^=X4>idZQ%lT$&3 z4l`;FA8wKxq9`JZbh@C}&kt4HZa0W$qFX#1n=rHCj+7gNR(Ni;oy(m2lzm1s_plY+ zB!I~elB!^)Hxu_1vZ1uP5N$<8+wXtgy2S%|Pwj4Stt;Lvdkr3GWbgfSVS?T3LzEH5 zlGrN&M)i2D+j+$}J0M1rkgWAIvFw2SqsHAZ!JO`TZuNp%&G0zQIw*Oa0zW3fCT+!-_USrNjIb-Nd^wHDgQi?s}(f<&q?2vkFW1s2b z4-xg4!vzAAJuN8k=J^@d+YKUif2*zHfesUPO~0eM@n!Gxia5Q}TU&Oo-{vmjy_yiH zsR_vxCU~yYoT^r0fPSApyrTfKczBUh{BqcAD)s4(+xv#}-aLv0m##9>?Lv&iw=Rq- zy)~o{lzROA%RzhOqXnKOl`fmhbRVp*@2!d7*+l~JFzJR^*cZ~S#(9aQ4d)oqOQ$>T zhW>$83!%B zo|?dUsUqUL!C|OcGndq{agmdi8F_5sGl@=RWJaO-aCOhT{hkcZH}OE=G{U8{Pqj<9 z9_PZY2YNG5C=@xJBq`nj%Z7_(S4C=&rnV-;60FQXPDZ{b_Cku5!xH2OIm+g2;%~Dt zr(Q6{pkMN`_?ftaeZNdh`?eoV|6NMB;5@Tk#L-S$zDQ(2F9CwOb5u8%DcueFraF?; zU4S6U#((51Tc?e-LApC(H&9JnGT{&w-LkYO)Lve&(Uy1o`PX;v>+4_tI==q(uj9*K zwmt9f|KT6-`qiU5f;ruzBI2%*vPCJZp;OeB3cScR);rw$o_DUButk)!;k9y<)+H*Q z+d%XLf^m0Y$KbW(uzSlD-v)mBgC!zct+56Hc;POlL{`&X)Whyd2oa09z2@3i^7p4y z9-D)cGIuydErqSeulss&0iF+f_hEUSD`{J%TwBqgiqC4re7vZ|VlV=_tLd^B_WDsa z+Qt4Jdeyd^<4jw*LfA^RJR`%AUy5C%LNJh|%%prc_G+V4fJ}L->mgb~Oh?3LZd%~A zH=I0j!0JOJ|2`6fOn=7Ihw&Q2Kv|jc#6IBH?EP9J$us8Jaf9lOFLQR37cn84&iZ)X zG47u!UUoHKXX3eLlmayNdSOR*Qw-at6Kx`!9-9M@QKHI!G;xd!o3TjS96YuF&(u@*j&|pticdti`Su5lc^2wGk2Oj7D6=RkHEkjLBPP> zxuI(34tZS{=sakMB9SDf;?JK5`~UC1|6Dn>R93{tE3x|%rFGQ~SY1_~j~40iV`K6J757$h%qt`rle26`QgqZG@W zESedFfz%a|mHUi!_L)H0o-dv1ICJtQq&ZqWiP0k?Jja%%IqFoMxX}QyLH|&veHr@~ z3~Tz9;#f~&G_HsQLm|zEHe9@MISjok(}@toiP271kJAoB#0K%A<{Z?LLOg|_&w+6& zj>6Cohte9hnya2s{66FJaYQUCN0&WGR9l#`< z{buebE+EepZS`1KbF!a2r?DuGQc({Z+(a}NJcl>MkW&qfUCD)1mP-v{3}Ju@Dw*hl zR55+?k%-_*SG1-7k_&!f9aka@kW-j!9kV;@r<3@s*?!+(z3&T_JflpcrP&kMdx}ZH zQcYT82vhg^0BK~Dn*AOjH4%N4)nTjQHniBi;5)fKVsc3#amx!_Rg z?~9gOt@n3{EsK2EMBiRRYZ$8d^vxSQee)xH^wG!oo4@&6JbikFA%#QYO;GOs0!|T_t@o-#ll!6MtysW;WeUM1S5bJ7+ z13Pora=qF2dsjc&AY+V$;MG_UF4}B|#SVxgzl)vi(L(^pL=+mrTN7V#wc%Rj>cVp$ zFtMT(0))`#z#JVit?n;dPZgr}Z0X8Aro!N6Ye2?;Rx*kMF^<+y#iWu`CNNzD20<}> z4rIiA!VuZ)v?7p#3vemT_P}X~dyCDo;n>uHisFM&qtw80{|t+N$(~&y$biS(R3|qn zW}HW@p>T!xT&0lJk#YXmGgdqU+M=h<+0loSc|5XXvZAo(fLAg+zekNKapInt2}e6n zo5g1g>A7k$0z(z&dE)ua6K=OFYHN7+z4!3?-FL0N25^+>cM?F^9s247CJ@NupsEu` z$FvxQ>h*%HBgz)z9fdIIargLeV#}Zwv3uHe+DMlot_uRuVbLe;z|95JMviE>_0z

`@6W9wzT^t0TVQf*w+!(2BxKv9{mMf)K&nQV38=0Tm-}%!!O28FKuVY&1s?22&T6V?vu|e{zcVJY1Mg z)x>ng>z5I+FF~c=YJHh@7LbR5tKS{TdwbxL{XP?Bd2a>2Uxf(;cE@7GSwo4wPx8v< z6c>*vL$UMU*=+u-t7phB;)TT~G|b5vxi@rV-zVaCE|*K1DeU>~DLf2wz?>83@R$vs z5e2oA!ua9>N{Xn!q&{1G?eHj@_&th~6?H7pU#qsKMijUaRP1hyjpQL}cgZ;G)%zCe zG!;oRXmO#k#c)+~Q{THb<{XI7_&^?yaboz5ItIKk7>kXSS#oG*3$ETZu2%jUG8<%} z;=_5q7G%6xclhAQRMzE~U(Te>Mefrg4)@cZcljN2+-OjyuW&v;;qv&1 zi(_jF2j)&4hZ&m==a7TEkXgBYkM4_#EH#oZ=p7T9QI+d8~&oky=6Y803&=6>mjT<{pWPRUZm;L=S zWNc)luYu`)PGsGHE&B*|b_`h4GO0Im|9-_KCjjU<#EVN^sD4T9;uN8ccrip5@dhJp z7bLx-3FW>>*qmob5z@*$-x_kfA))hmS~gAci{g~IA?Qo)V=IGF(me)0S9KdsM-IFM zhT6p;%dR9D5x_3E)NqbF0uTA;+kneFW$U%P5O0QyKLigZJ!$De$0k@P-sr@Z9~{pE z6Jr)1f{Et9K89kYmUOB|Eg^S#iuW~S2=0oDHDc(;KKK_$!mETBg524^q0oWVK=jwh zd(fK;TW!d?Qy=6`D9V{(zKBlM5wJ@;5cP1~;-%Fcg(I8-VHq9CAc0MfRRLUfBoY#iJao`DaK+qnl4#Z)Lr{$SyD8 zfQtd3|C}HYF^V^O#WPXe{TFy$T{XQ4L@3dkfrek=FL8vfDb_7FRo5Wb_qAGWU^^Xi zUwIR%`LhE@Zt9#XGGmDE|FTia$erR&3UV@sx-cyw5=_)nSGFb_9zI>;WMZ(w1uAC_ zrb9?`F9xzZ{1g)xRW4rtslU%wPt?``Fov(A>dh^iVp2Basa1~$viG`G8>&a<@DOpw zJaD-%8nu;n|3b8HA{>ivI_L0Q?#QTghk}3hG7XEVY|UhBb&Pm?Qsn=tPD6gGq0?=j zWT054dce0M9ty31_T0xg*ZWc{CKPjqz*RBC9gHaMfU&*8YK;?&aI&~l3D(3S0cdJw zuLjbvw(8jZnb`djw20m1qb?YmL1kb}fem}Pg2^4No^uSp$3`@Pa)sEd!6b8@2i~-D zH8F?+I_&cc(Fd1;?pd}ooWrnx({-ev+^AQYd*H;P^r_Qjl$=H*TXX^@rYb6V)K8o_ zK1#z}O+|C#n4_Cp#nG&33nl36fKD4c*Mc5o9GKfZ1#>Q<5hsxZreCKfkwAnj8U_T6 z0p$rQ9*Y6XvIMCQv~B2O+rQ$JVFR#ff`M8qS}o}A7Bfr=AUF;C$%4Xp`dO2-Fe((4 zMhXpjW<9%T715YgKy6sx2hdbOVgm(@Xro$Qs2h@ZQ5DHcZ!}e-K|fvmfTibI_v^&%i_!2x9N2A`KF)4p zh7vR(K%NMv*nTs5M`3fFwo)<4n!dIRj63okx%-qh0pih)9DMZibP|XSA)qGy*+sNb z3uuYG!OpZ=Z0|1`j=&D7)*R#JIO@YZB?47~iq*z_8p@tw zw1`>@TE;a2lUxj?6IBgkTYT@Wwb>c$`RHf3vdM-B*Yk#NfAR(&ef%*#`siaky?M4l zClwO~_%JxKlf}hA>a}5tL5mG}`fZq#dQhUGlj0YVN4^ei@A0!RO%BNVrql}d3}N_? z2$-p)=is&F_Xk|RS`wrgy-~&89KH~9m z!DGANQf&W5V(EvG7+Uf3d+U2)2|igp?ynRViBjI}5+Scv>o68wN6Eh5)agVY!|FG- zwXCy4rVWXT<8`UHTXHI-3$zFn13H26e6{zVZ4i!1Nhw+)++nq)XKoAG`_pv-tvWr& z>X(CUXeT7#7MbVf?j@;9(Bq$Fu}n5h5fpI>lNz#J9G|YRXPOIRK%kC2pQ^SG`{`(c z1CQV#yPMW_SZ|Vw5B7 zRLb5Mxg&bIn2UTr%l-0>M3x(VolXaK)6G&hauM(ZGszGL(OoUAJG z`vX&=C&^oHYXZe+VML5pn$@4ADVpWYpc8$`Am+vWB8-h1gL*M?SK|u~cfn^bN?e4= z@tix6PAPlpr4{>}rF$%72mlEamcd>Qi(niwF){3{r>*A|tYrW1F=J#Gu7{{u)XwKZ z)pN#S`+~2~L~LRi z%Z>MFpJ}=E)tZ@`!z*3UFRg&;S*8^a4-ao~@2}Tu;uo*i>(*ph&h{NoUTaMR<(w<0 zA}*QBjm9sA+*r;XOmD99%FLM4H|&?l1fA~cY+SbhVpVK9fSI~Tt+@PA}80? zhCw(8_m*Tc=6g9r-;m3tV2+V0T)X_P19hQb2H=SBg&3#Jk-VBJp@^Jw=0I&_p0&4B z1A!usi^(=`T7xke?tb)3XsIZCC^*+VVFS|XZpW85C~?sAz`?|#Rn$4$Zh{wI~^vl zJSK8mHAxI^X>&yH)SF$nmPoyANEfw0pbS^`TmjgyU&C>);h+u2MbriYcZf)+Pgia? zJi}VXOqY2I>hc`fgaSnFvb9XR7|us@Osj3x4CF<%ye&W^(#)Gucl5wta}4B-0wj*d z<2!*tiWiG6?6qGAV(?6YHJDaMGSkeO$MVQ$VzlA!Yn%;A5d5md1|Q6X`N;M3|Q0PzEK*Me^K4YBCbf5dlEz0 zTz(-K-D^{k-Pu~xp&SGKAWm6^BIjVZlqI^DGVg|9V^~IBt?Ts~mU_C1z9#KzU%T;q zjWKLsn?v7Kf5n|*Kht-?j19L+HWia(;Ll7r1H%O#&y4L4dUr{+H`9Jk&L|tsQ&Pg^ z=8tnA%uDq(AT~g&wQSv57j2ee>&-=MJKbY}K%kifxX3W4{ZTdD|Lcr6oRX zjB$qnx2A44EUGtoGgUnz4$@t6`fyG&XO~A;i3(Q9v?0^`#_%~vD~6!13a-h zE8LRY%+WPvINq>ihO@}T*u|$lOq_FO!!oD>;Y#b>1`}gW^gdAvq2Yp33R;8R1LFCZ zwpNNe%GH}A-3I}e%f$sIlFmV;Xb2l(S2PF>wx_7LFeUb`a3vC(TggRiwN%t%2vxu^ zqzqV|;k55P18dK8FL?J_CEr^SoVT0T4|c|#7M^Pv=aF$)8?+Wo0J9J1Il+#!wts7G zapp}J=W#@W-&eYDGRQ>ozj=^1hej>`o~KtCryCf?%8Nplbt+|HZb30%b2j)Jpy%pqv) zu;20Qj`C+<4v06P)8AaZF+OcTdAr>VO?lWr0Nb5s5pH|{?(`RIDDc~PL-)^=Yq34W z_vK4#sELR6XOGwUJo^Az198E)-t2rLJDUS#I_Ja?bMx7G5ATt=OA{ss3Jyo$5Aj`I3Nl?80QT-r#10;iR+>U z2xpzh+xXM-ytzQBq?=Z^#%tiztGl!bjGJC9JKLM>CMZ-Kwc^Pe?4?$3wre_GLnH#x ztaW3sFDk}3p=hXj)PhHT*!|zo(1yaDIQ@M&Z#O(YU-A0k!S}9d!?RjJwE)GOtBu|9 z+L~j^S1)u7b81DFwrM$ZMJSb(+d1ZRe0xFlXtr7_hQ<)!u!gi+jMH`8tUifeMbAVa3tdeh@jb%VFKmv5CO1`1sqO;Nwp|#q;yk4Jn@OJk5w<2woSSMs47tL8V1k z4Y9}VdWDGM;c`JoIOODxMpR41z zgUyCDGroNwS8RS!kR@s5>lgi_H#4s z*wBay14A%xr>%)%^de=&=vT*%SBvbZK*x#MjS7>LTouc4f9|=5ajCe}1JiTvm4Neh z1+|9ba7MznwlWmVB-V9st%@OJSU zqGOyV#(AO@6C262d~H^*rE4`IuGiLq@ekr&aSVLKV5HHJR!rJ?p19p^n6sO(qE<8? z;&;z8pVCddQ=0uOvh`A`%^uVRaIwptec*OGaU2bEm`L+-dBD*cL}zwX?B_6WzWtuX zdEERx9WDy&bK2*kj7zO}xLh!1$Jr;IZ#T?ocMTMa+KG6V!i4FA_Yi8RO2*zK(T~`K z7EV5!u-7keXE}!m*5|G6I419JP7#z#L8an-2#c5^f3A)=Vx4 zQSA3!+e_g+2ofVvhz=&l><^^i*B#*!Y)9o{Tjag?Qi1`{@@Sr)vtaPfBeUPjDPn>|IQ1*n#y42g5zjgV_Y^I>%!Y=Vt8?< z3Jc}r{#WV?H3pf&YM8+7`|QK3bh&&ckH&^V6^+zf-;5Os?aez^%|_F-_~(##=Iwdj_t8R}imuE_dzo#K zMt((~1CTXT2!T>KRHrusi8r;7+8Zi4o`n#h zg-9sG8*3nhx6b^%PFPAvY%WQ71{1yIp1XITQeJcxhI;1N9E0OMA3fq+*qiM;#bM}3 zeCq6;`Ryc&o#L^O#z^~1G$190m9=bZQSXMAQ3$U{9KCbt7)G_E+g(L5NfJd_gSs(w z;qN(FBj!Ng+`KE!##~nfcY%ij*K0pY_u;~`uewfCXqCf2$Gef^r-U5$8)6^1vw)|I zIevB^=t3m4avLRfdp|T?iH7YtbSM1XMQ0-jfXE$_oO^6)6arlzSaJy*9X#{ZhVz%> zk`X_5Sz~??oMSlB*Du<=--$lVX>XV5RR=HpCo!8^I$a5}sdkakKrcmbQ3Ho#z8rOX z?$>j0UsvC}LNtq013s~e!xQMqKNet8xYUP5!^)$Y68R*HTi%%hICMD;+&bHW@cdYGbukI zPPR2R^GvU`+TM~Rp(TofV`$?%h#WD|6gFOQE^D{imdeOaVuaQ{tv` zUDI}!2HJ2FN2FWmf&AzB*rOH`0Ps3rRqPC?mzoX6(mFOck_Cv!*|VW~kP zza562mu}7QQi?qve!lfS%(X0^MHANjUPcA^4sMUs-V|2qBd!$V%7pR(Rn%D*xN^tO`4ZHd& z5aM*J9(B2bA~Vs%Brop{ZlWkI*dX9~-tvA@d~i2h?0u;X4JPsv7gXBw%^+^j=?L5N zX1UOQUMa&P7~t<;WC0sSxwXSGFg>ab(_BUE(k!cZOmk~9;q23#hD2ybNkPU`!Od}# z5eHFgMFCKzpEG3njV63_7aj|0wG3mf_Ip)kwBwS^LUWFrpav{JwNHMg_)jngW&X9o zMKA8S-D|p93LalQ;`PHL=B=Z;(EMl(XBQ(i47n3N!S|U`4uA;#){RWy`=)MvJflB$ zr#FqP!{eN`MlJbgV9_21A1NyqBq@HH!qA9G(Kw&kL>199T-nX52CB7yYQu3nSkwa> z;@aMKb@A!y`x&lWZ0%hq>Zs@(nY-b>^x=JwDPm2#`(4!Y$RUQ}FAbFnC~~%kv&E^&~Vapc&UnwE;I*>w})R6SwCR^VTtkIo3XXdcr49Z}4=xS#zK2%a+4d zqsg6Xwbp_$#B+01fqwf)lTq20`at=1fKLPj^C&35*($9bwO zWbN&CvtdFlDa-{CT5FD-m8{vLrY|nclIiiGq&NZ8R~Nkc;9Y$1eIMfcKm0zt_xc?i z%ILQ%-hBEoKKbO^c=PlruFr2w$l_?}7|z&$*E6JD{6MgCE8-8Ui&)RwnMNP-`d4)I z2jFxo$i%oRo+r=>L1lnwpcQf|OaW0d!p3m7Hq|tnAC*z*9qSL3b#W%~|D+Q&YDvND zf-?*`Q@o#AK@%XyFUOun3OrmM0LDN$zm1U7E$g;c_GfyF_A$M?iJf78sbKUmQHmID zy;jKZIF4e29UJgg7da>nI!qiaBTWaR+t8YmOD^8SGfI)5d5w=01&?9EK#EwQX{dZw ztAnX9YH2QhIss7}M@4%mC{)qv#RvYn^+JqFV2JfCaufHxYH>5y?RGQcBsaYC`ZeBt z=Usese1tJfKnQ}@?!`YR>k)h6fYS=#q$j}~>W=UIuxQMq~J?5koAx4)8DqaIBVRRduH;*qHx6=i+b{`vK;NjsBrO+0`YI|8bnh7nh zS5UFDf~f&p6lmnt$9|_|L(9emmsS8#+|G&V1I(xEb0oMeqNfl1QB2HB@IEys2G`eZ z7%)BBjy#SAi$XYE&|d;g?>XnK9k!m;&7y^pd@2GHUirK)BS^BB$D#L1L?J_!v;kemZ)b?~Jsx&CAp&If^Cl+U#;popdq=6tz{f<1lP|?xl9Xj&qoxA_p-hkZ^0b@vBKKB8oHO6T} zSLim&@kZqUgxBlX2+!Z)kk~SM%2Hxklii#_k&S`7j90nK0bSqE5wnHgYGVcpH<1-1 z8l&a&;raJuKxxnUaUA&m@Be=M>aYGPe)*Sw8DIO_*YIb5`ltBK-~5;O_y7L?!o%b1 zM5N{C=+CxdWhSm?hyL+r{Kdx_4Zp~TUBe1Ts_{ayt|0~8=iq*izrwASg^mV}WJC7K zOHoST0v%hjXSm+`+g+uMyJ1jw+;<>*Bja4R;VxW#6q#D;s9BWNBo{|!vNw9a^MKro zGgsAqMk7y0fytJY$}7JYD{Ge=ffkMXmHYMr4ei()BvvPg2jxy+5E-x0;8R+c7b^z6 zc#45uI7Jn2Ka+|(Aw#%6nM09onLtc<;gbCP>$|__eII`1SAGS*^h>{luYK)n`13#i zbNuUn{XgON|BtWYy$`-`Vab_uIGGvTxOZDlFF10Tl~fhY=j2|=`Zg9kg==@BBf5)! zc_~2KodPig3pCWK4e%C8f;MFI8s>2piF;%WUJM;GvSQ07j?2cJGoud{VsFnvmgV$g z-kJcM1Hc%#a5M*S7maQgO0Pj^ch81^F@=#UgMFt%7$$J0s37yvV}JH@Y3RM$I6j-W zx5e+JQ{F15_EIQZMN`~i$>tWc2ItH;9z*MGawoq@?lBtSI5)&N=YQV^y3l)+f86v! zlopLD3B3N)ME>uQDUt6@S!XUq`Jx6$x~>dszB2hJ$sTN&D$hU6*cW%RCi05d@)G@L z^f3@`J$qKMqNMYVb`d56B!(}G0dOF&*Qd6BE*q(7bM)nB>W+v-Zs5!!FC5L#?Ywcv zk`no)UAJe860@~vRCMoV_d#o+nutCzK4)|RR(6f(otO_;@1u(4+Ae`Er_(>ya$qR; z$cAX7-t94dnKJb2lG=vYb-yowqA5uEx|IwYPn*ixa(}Urb0TLHPM2}~XA%U~XB0TZ zS{&EyP3M`k4dk86_6FT>4cn@?001BWNkl-iVKQ>>5{bIg{@vN_lE~$L%_o&6 z9StjIIqE6h(7CZLQbiN7T)DP6v8w8^3I#~Q&eUlG^L+qPJhyebuv-t9Jr~xR{qdf_ zg&a0y6+m1VL6%KyPGj3ks;l_pUMC{vPU5nhcPdFv33nsG20*RWY$}9cVd_kmKrPjG zD|m##M6H(RYlDo1J&wIQb8yu}RVl=d|4VBiA|jq=S8`Zm*~F3Yx(mE%o!y>OYT0*` zXIZHQIy4;yL2oIwCLSdJ0evO4qB^rmT{a}>@Fkt0L&;=r35C~*HoBUYeAC&G2)f!+Zw2Wq>3O;VHJe+(BGmjd>9 zkLnm;RW|2Q3Hk{(HuHFbOjCwR+8Ue`qw7!N|aJW+|u&xlBC`_3qP!Pt$ z!^K{^zaJ(2Qc>?1wtVyx(v4bS+2|SCXXhe^E7LQ0nZd^aR$vlE!lSKE-6%3HJTlR> zlY4aCYq*({YD{;{fGl33JBfl^z(_E6DqHiiRR*SDNViOBSe~s;0h2Z4s~bUjKW(^M zjq0I`1(L(jE)xo|J-{aMfLK#MnxvLh$xsf&B)KbCGwFqi99_vqXCaI4YFu!X0xA`g zBt8Le>YKAtyA7#S1|~eFOMu%PmNiZ0QYJ!XIY*{zX@u%IwWS)0H%JX}=Bf`N<|On! zA>O2qzQ}NgysdK|5S3zrs42d`nFBCLLUYU{s?BKvyLfla(Bh3>_&M*jTL?=dsv_&a z7`Oz%AtG`@Ajl@x19rNVF2t&5)C%A@S{n$Ab3lfR@v4a{$OkA>4Noi?86sZWnFBZ` zu}0DGEb=)peb5}aoUFh&ZOAv~Fb6kR^nL;nt7cpv(YtKsAYNOod~Sfz*qm`T1UF>5eRdWmO)#;_@Yuc(FJKCEh!;{NpY0GB z3V>_x`1U8C;`Zqiv|C(2?*pGaKjF=JL-*kTFdXk(vR6b9KNIARSP^w-h_a_sQ9>}X zo1!9m2%ZHVXRywZ0@x61$C*6(@Ipxp`qtB+w>!lk14dBq+?0x;z47zJQ9aTXRIqx>9M&DoHAVi!Mm~ufV~BZ&DoTCuh>Gqs z1Ams84E4qKK8uP`AN+o)A|6Mn*}E!ih+h-C4vTLo#WUW`OhOdm)+H`qiD3j*H>&U! z8(Y?p+x8U=rSj@UY`p^C$S}GM>sbj?8QRs!LS6%H{n|Mvs@MIhlGH3EbE7H|luF(P z&g+Tm(=*Cr!8`A~#=GymgUiE#{^rRr%j6Mn>;wpbiV2D5nCQ}h#Fmc~pNKaWChVN9rJyRKI<1aer#~4^mXhr4*gjy9 zIepx$rlgX4^}QK`w!W*a>4J!70u=F?0=1ZcZQ;ilW86Sc)WRux2AhDjaDjwqF6MNK zO%%mWz4Dk(cJZ&8fs~k_V`kqWhTx?(a6N2K_xsE6y`Z&-=e#$3MukHjr8S0;scJ1~ z9!VwEu&_O}7K_JIdw+*Yk^#-=Vy@zxFO2D;p^|Yg>ZXzCEu>M$drXuwwTRMPqW@NF z_Q)ZQy(hz!E3Do(Lz%948Yfd&ZD`Lx1=~I_{G9f)TYMg3&U6Kh0dcJV43bOS2AFIQ zAWc(=$iV2{OB@!J5tqn-7UX@O{F$0qy@9y9ma_U*LB5`` z{|2o)MEpWow@^fRVdb8WG46V8@!7@w+z7Nb|Frq_G6% zI5gGYfhL@DN1js-%>z+MiHe+eZVMa6N83d15QEFnj?KLkIK+j#Nj!V}yG=={vM#B` z2Tbex-w*c|`t|LBpl(QL`!@?y#{9C=NZV_sg#l9m-pXVvsMS$)zJOP@0=*?FNQeCA z4)o7tF#PJ(D}3ooU&0r^_(lBUFa9Ea{}28E|HXg#U*UGU0+p8f%@JftJRodt@p~+& zcplpBn7S8v*rrz9HP-vM!*FusHHf+?T_PrZ`>)QWlxlC6cs@~lvXr=XT zc-MV+hIH+py{9`S9WxtRnLHaWrKMYeS~*aV3%MF1hbVl*;V5@`EWl^B1e5F`soJ_L zU{b*D+3!&dBlc>~ABiC&baS~nKGC}SIjFK;FCqPNio{Jxx=cMo(Q_V&*T5)Hs7v6a ziGK~D2$zyE7`pG{FEPiTe|^vPyvN5!{M^s|9KQI)FX9(|;TQ1xzyJIAum79>7T@~T zw^C@54S*b~`@qs0UrF0c$y`ywD1WZw+I~0kR(2FBCch0-_c7KoUBhnl~$9rZ7Eo-1J zXL5GO@8UcRiSBy}*4afb2BC4u&f#4Q_v1B%(^S=R>>^9hMIP$7yxh}uA^S5{Bpm7X zH=a+nUJY%)5^`t8+=LYA;PlIXBCGt8JLgDT{2FHZ&x~wqD2kRGxa8y=YZo3Pa zlKxK_84$lioPUw^9B~U#j|MJMS+XwA#=s^jh+Mc`Ft!sL%xOIheZQ~cxU6NCyALn( z6j|_qaQ>$IU&V$y%${F%FDwkg3{U%+b&m^4QU%|Wt_t6g>LdGI$H;h?j7p#-6vnoX zEY-Wee?BY~*JgzHAqnmAoVrMlqRtaT>1_+bekZoUU!VesDRWm<75#Q5lF%NFnM0x_ z52PHF>_v*gU6MsNiqVQbDDKki;dJ!hB`7lC9NXkJR!3lWxLY1D#C~buS`rs5PF4wFgGRH%AC}@xwh%wD7SCOC zM;is4!9m0J9JtokGbq@vR>@!la-m|Ko2 zuk2e2p&e3;Xv6c8M2JF!!=EiJ*0468yd)+UfsSRun1V4wv`|2;V2!11Z5lN#&PNl; zkPi)~+UF{&=-N@Vc(x;fii=l#TQ6j1w?*^V&t@`&e8C!!POJ!r3NbN@3T9+yaslch zg%xiQlDlh)t7C=>n+S$;gjfuL#{OFjMbEO)MQAnQ8Xp+a&G8OoGnzd2yt}iU*pRZd zl8If0Qyp5tqzM^2?lGKO>jOIo9!njA0Er z9w_9Qtds2h^v1OHmBi^#ic&o$Lli}TOQ|Tuhm}r4Q8H|9aZG&FyHw1jnPfX{(>8lIcL=o0fb?+dsD+!244;R&i})$riqJluu4g-dF(YAG0J-^hw_54L@E^x>aN z@#ej5{jmM+X0^S&-z)wmNle2U{Y)$7Ac%r-ZmTLL8!mf5@amoS@WVg)qxiue{6W0; z?z=c@0bzP<$-wn?;_2xPZr3NLHQ4Y7;c|A7wGE_9fZnQQ?GhNh50qkO+j*W)60aj| zpnmHoE|o2wM!i4hj&+d5E7`!7ik(sF1NlA$)uUhuz@;4+vuED$WQDQ~SA`ApOG*%r zAmdtnFgnu1Gp7+rw5%8jQcGmK-L6@0)#`gm7)N;JZktgy;@LbdEwILgTsRxO1UDpj z|1atU8Bs_2FuuXg8VUTh-*Ki5??8kO*#_%Yi%$^FA(-mUV#ie8u2($0d4q@J0q?%^ zEBxS&2Tm=F7mU6dnJK+V=`?-RG%iP9>L zO9NofsrdYeNR!+Zk*uvdWcA;4L0lTe#3BvM z?BIQNrJSpkVnW*zy>T^xwn9vZBG#*g*V3f{EUOO_0`G|8D~0av)XZ!;!K?|Y3mUvv z=0sZdeozQ_qtC1`v2Gx|p%D>b_iLH5j5UfR_(or1%7oA|&GK=ecf0de%fNFwm?04& zf+6OfCjkxXx!gs%{k&oFOu|%Q#@Oz?1vZcswlkaQzS|Yq-zM^~JAx5$O!%R5n)s2c z31hvV&uUrRVcv-TVw{0sN|OTnjB*Sk$`$hWIbSD|UK_L3R;ty|LBjO7p;#M6;5Is% zh+;Z1FKVJzk97M-uOZF?_2-m!j3c(b7QcwoPEzSiDhEZruGcmy!|yqYsqBb*6ESLW zg9|YV0Bw>+z6B2tLjW(GKVnTpOvD63pl-yJF>v;dSC0>tR{q52U!UDj=_h~cr|_Tt*pK1IfBeVs>%ac%_`^T^Lwx$?DbawY`Ykxm zZn%teK}n)Fr`Y{r|Fh;kGmRx&Sc{c8p)UBC5#1y@?)f__KE8H9n zlo#&hzEcr!E$)>3-hb6vU3upi#KqeoKgD1TNXkrPi35hRt)=7;Fx>5N=8CJPkJ2^=@TTO}MZpM#ZbZVw z>#LPBpE2C4_VZUZ>=lC-^P&42l9zdiab>=TQ;Sn+od{+Xv#!CPfQVaIB*VFV<>I;W$xI+!b6Xsv~cy@a7VPeT7FRgkeT4LiEv~F#uaNQ;Q#xTOKOcd_GZ0^tD7S)`VOUO zxw)5m!Eqcu^!DbeD~9g}P^&I1Trx%@9dO0nR#0!4E2uPgrdqROc=j_p@_ow8OHD)_ zP_2e*c7^srs{7CLoK+^Hxa`|yqVoMY6J4<}NjA`hA8(%3o{nR01n#wNo|kGa4ffA2 zk-#tFJ9HyQ3|K>M4nuDPYK`Su(Q3)p0U{K4(}*MGQ`q7IMB?SlAH(vDkHb)QESzMS z>JC}B%QWz_k(a4{;bOKm6e6|h!^9m4A5GA}&E?tT7j{i7ZAEF3H>p5TT+h>#($$(Y zfo0b@QA(mY1eVnA7UKS`6W>({ekB zRzt7(nFGN0>JWy`6+MB~h#a2l2bIjXRoFn#uyF9~S#$pmN6lNkwKC{TX|x)KAaaL? z3C=_WO6Gc-V}g$Zm)gup)jMQJx|ia8GouP4{(nS%a$` zhc{L2eSdsBaI}`6#S|OJFRcE%TGG(YRa#TE)hy&QIi`at@2 zGj|Xb2Dwu!&f23?$l>T+r$w-%|8yO1t|?H@{;S2EKTLO6?c-?ZB6uDhqj!wa@w#0M58et&YdHIf zG5Zn+kPp-dhQBO?DFZs}``#v_9EL1s78Fdw<_bWyfoj1d!t- zP?ll%aaG5tPPB&xZVixOLvL=F3Jf1|`iE=IM^bZvs+eet++kkd=L{x9Y!BFbe(9; z-ILX*kkNZQjsp)5k9hU!H7*Yaj!Sb4z2bWN6tw`C%Yn0-+}^WW@94MF_N`JOb9i>V)oI7$Wsw{RIC}?!Fr{P4L~WEcIAFP_Lj{c+j&ecm zH|XsIR8Z>$<9cF}7_RlGm^v+X%|<}zGSH&#j)KDTTgM!z#{mwP;s6Rv*gD6A^nuH( zM~F=HAz*HpTp*p!$^g7b55!XdcPN82Zar4XM5DJA#g4(raI3PV+=e#T&&ju8>T~T;2QN#)b#uJ zw?5x+o#E+xHP4oqOU%UriO3kQ>5Do{y;C8#BJXHLXANT?M5Ia)H(f3dP9qsO4yR02 zPJziB1Ip9xy<@sC!R~qIm>yXqjzK4!YJJf%Pdrw;i%uRm=LFXWi*p&)JE-lzB=X-z zbMSr~4`}TH{rP6%7qUCoQ7fu86td@XOp7H@RcK*z%QHc_LNPrqq@eo!Um@tq=sIx9 zL=h7pF%_$MP%v&C{d%sQNebeIc2wM+JFe$5XxjavGNBz8i@Jg0cAl6r zd|$A83ws7Jlc4f48d_Y7#Q+)gz)2d!s4xL_2!-qM2tFEsVZ=zXyH`z-(abwU<$_6y zb9BsZG^V1AOFJMST(38XDlY9n;{q9q+w&DqpMHujy#E2-|KL6Rz(4r`{Pny44?g6EMYoaK-G{{3 z)XEB0MnN?Z%7fqeMR4{rAVc7zpi<2UMojM+wPtq+?-zxbfr#wR3jC9a0hef9%L^HC{Y=MV|hm6N5{%6DAm&!(zD%^17`)Qx^7*-=tVT?X~_F&oc zw!g0EyFJcjIF*LkdefZqJ27GxB3ec;#%a+FrDP9*red4}SGnS-HgD+DYBkGZZ(xPd zJD`S)AJd;DtKEd{IR_IS9v)F^#nYQ-h!9$7E*cvsTF^X7MlcsOgRG}9RdJggG^P=V zqVFn#(Wi+^*`59FPNppBMpq(S`w2ZY z<40;3ALdMv_>P0O^#d2fPme2N6J?`dqT_ZxS^e%rF^QNwCnELpwBL`(h!d9v5kIS3 zctIYQQd`6AdSZ^@g1UxU3!a~!L1cH6+8X+K!-+7%7StGm#~^(_{6q0#%98TJjU{*N z`#B}Cso}7mQ&GzL?+Y`5g{UUV=4bqQ<}na#0ct3T+R6f^g_KP;kSP4xA5D){oDA{Kl?Msx5&cZRBr&XEoR;@m?5ZGc_f?} zox1=do{r);$+&bmS=XJquE3Gc>hWODso_=FzYU5u7uMJmx{he8j#8V`{(p712X@3W zmQzLa|6}i6dTvjy^S)=Ts`~H!p3}`sQxw&rD9WTR1|-0e2O0?Sz#qUPXJALpFo``8 zAi$YK8AqNb_D9gf8N{)JC{7$Ji2MbtIDwHEh9tu#kl3Qw-RHdT-v6pvD}!~Z+Naxb z1_7G`z62$beJ*?dFIB77dY<27jSs@gMILi{Gd-M03mb3QO&d0vk?$7sW2SsyZF30a zj;N5puL0fX^ByLhBH{wJVIPf!vLQd5P+(pigQdp8vx9mJH@x|(+XF<7cuY!1;zS>1 z8v2fiBHg||ln?d)j@;hS`6??%G!dh`oL8TfyY$1K&u7j1VUmjB@qy$;vSG2w z4!a1HlwA+mkj@fX1;$e;<0K;6HDdzY@f?ng_)dF)t;wM#-0x!%FA(@9 zTjyBy(U}{RfXolx@c(#+g5i4$JB~lq(IJ%Z;qM$)0BdTDiEhL$cm0E+{H{ zp0+W3L4TKg6xXD9Q;ghc zp^5nCm8~qAnDY?8PRB&Y@Xwm$)$4%i2sg{?qKG~q;PinlyE`k8`_n&*U5g-K!JHxC z7L1{*MnVLth424Nog^jsvCOOkxuB-v)vjJg{fSEVkJN zeGU^Kk*{U(b~#xtnrX^d`FvzpQzCQWGZ-?=X$?ncmRdozVK_=3Y(vq&MG8W&Wer7Y zyioM9E^%bA2Nu=^N3zIt z$BjGKb+~BSX&fr(W1{&G&_p`}o@?Mp-vgyq@KG(Z(uJ!b6i^rH^*K;ykq{1yFAIkh<2v%$O~d?^rBUO&Al4Ge)ucix5n5;p}v8suS&IT~& zqPcK25!loTy?4;G0d_4df+5|ZYY6Qi1*j;r3oJ#Qp_nM1O-f`m8M~KZHz5cWn7&Cf zBX|yL23ofD6GR4NoRHC>qXVU)90yu$=;y%f9YYNhZr9$0=BSw;KiSt&m`e!|RH|sy zFc?6!;i_eX+EAzxTs)}0HdFvT$vo-o6B~|m0j3%{y)?`FY%cU>S{bFFMM(<68&gfO zDRaSq;C{OqeIfdS8i??cHKBUVM3Ko%o<&NM`@E4c2x|xN$Q_FHPBVr~WTH59wcYR~ty!NWN3D5`jUTu{IGWxW6D6`o(7aeujC z^p4uxZ8q(>I!b{QI1+lAJIqUo#uYf+q~tlgm8%OXXp1V4<@Vxuo)wi!Cf>yL5he_o z=(7Vd@zk2<{uXE<5F5f5g>XMlh=zdQ_LbfTFk$o-;s-&5Dq;4S2zTZRVqn6YTJl0E zh9w5h+Z{I_z|3LS?>sy1_tOUH{q8l7$5xDq+j*jkSpDh!BO9((taw8g70v0cUPfVy zi?ID_K9aa#guXczhW2PyTa95N4C!9``Cxs~23G7>QksbJd>Us=-RW2FoK1;rNTM!$ zyx;HJnH2eZSFLWtc=2~^xFGk{^%cJMwGZ)=KmK)m_`#3h%TKTH)GA19ue#5Ha}2zB zx#5#HZ=u>zfV$my1!)_003vN-W!NEmGFyCGsz*ig!I z4)puo`liy;-FLklXh*}m56o^NnR;Qz|Jqs21O@6Cf#o8bS=6%V{ZFj0V`RJ8(ZwoaaEH=I0fx!5@`01jg`n#=9}aX%4Gj zVr$1bXU^gI&&23MG3A7i(TJ|?V$ZnuL;Dzbx!rKT-SBk1qFwBn8goL2587HYaWR=l zL1pIP9)8Ay*UEMlLq@ih+Azcf2Jp3RcQ=a&ZezHx%zN#=Uof%JV}iu#)Yd}kFOGfID~iv{X3$}jGG=B@@qWM6 zxnV4cn5>Az0=whe&qZ)isfa%_9J%Q3LJmhZ7TVmz+MInUaxtc;A>yr9J|Q|V`ZW3j zH8VZ<=ZKyR)YjYTgV^YKs7|lPd-j2CeO*z3CSuhjz?4$$Ok8V<<9F($Y~;w|g7wQ~ zWt%TTAre2%#C}GqAX;;}eO|G02{_Hb=s060slDb;BR-nWH-r(VE|n4WY*@ z^R4*=$_ICERIh=uuHn32*vO8H%!Ak*O)*$farmim9xeBdsev`oAMx3(Akfdmn1(a_ z0r{AXA$h=PnrdY=|6?J1*VVJIJ;-6+j=0qy4$psJeuxMke)u8&>R?_=R8idHnWo|2BU2fBs*#hQNMUhz!at?-xrPRyLeosQcmX`pS`m9o8IQ9Rjt5 z2FJsYGsH8+2Wv!YC>jSC*#=-c-f68-kAk?2&Cn%c3%vBIaaN8V(OzilCYD;)Xl}@> zIfo58y+GUtOIaHEz$Ol8Dv_^lYbTRF4E$Brz{)5TkzXy#?c)L^_O)=&u_8jc)I-ET zDcX{}t}*Of-y07C#&k)mXSL3i1;(D46hwdW{gEgTwfb<)Db=JKzTeSi*|d@+bQ*nZ zIjFSI-)7r=xcAfd3^rAgWh_Mm(F%KZE2a-!n9Kr9mh)|E+`4v(neiEk6`w2b(uVhQ z%RpR*7Ru-l%?#`q_(R2V%{Q?`JWH7mpBbK>BM4cdh@`3n`3M^=z-v+;42;aA<4?Wc z`L1z@12hNdflQ}&4x53Rrx?&Ha5N(x3@1xOuB>G~7L-=)a2gr*ah+jKu5ez4SYe^6 zT>$3df^25QvlP^TO-LKUICb>n9y1ebk|v^ad(M?M5r{W)p`Z=z8QIIzn-ew87fudfpp2dcZgW53s21MS^S!Nw+j0>c^(5iQ|ZKrSVPlT+-whoG*z!?cu=LV80t zdhNf(wb;2R$PqKMW7C;BCs2zw@@=2gz%y?(E)@n`=rrA_5(2?FW;Sp0ou!?XWPJnp zy35VZH!~*udHxYY8OxS&8-KSuo|$02tH4YbaxB07v*Mwwlo2AnCbQ*B4((8yAev?h z@chysMl~)VFEn^sPJJOVY&?l$=V48$K}Luu5ph*LdSRxxViH5SV8(LFT+ftfaw&NT$(;fRz zE5$nP`S!?Y7cr5~>>w25>7JdZlfF=vliF-*Gpy%s}hizBfKnu4i*o*)&xK8_UCGZh=4 zbIo->(c#=sn;NadgQ;yWIbFmlfD99musH)8H%MU&R`e+tXHT*HxKDiV<4ANn3Mc!e<#O)>#=iuCMUruYL_b z@r`fb8$bG^_}Y8#;|uMACobr-7=SFwEiIXaHZfkG8E1~*=- ziVM6tRZu%X&DPB^EpFk$&5+&E|AI$2c*Hf8ipz0$@57P*9$8e}H9S>ZjJeD^yip>v zhM5ZC38JABD?=% zbPO3_CS0#qT%WEc_!}MU+#)&x`{alZQ!8)hLFdgu?f@y;1)|%DZumM_u zk#?*XB93+!f3FqQDF=2A_m~woKMoOlZeplkc#$3=dM^#6R?k{JX!+pGj6S;yZT2WY zKMTZw7L39T$X*P2?J_ap^@8qwuSFsStf$gP2UA@p)M<5ZYYo*GHQAzqf?g#uvu7~H zxau6er07TZei}7RV@`53H9KR^5NxTUa(V2vjX8xn7zN z&aq-E#beOeP7xv8w&&P{1|ax(!TJm_kY4@F;ytg!2HYP1z-)0cr=ETk*GKbb3hP&d zhDN_X`UJ!evB%l#b5XpBpzQ49&`LW?$r4A$=$hOKFRCcsD~NhQoRp@tdV16M0E>w- z5{Jl0Cw=s8#qsV;Y!3H5-#a${s4%Q>qz4Df{t%nG2V3#L501mcoGN8QVRx($JvK3D zb6Ty1gS>b`HtFKeeJoa1E{G|j?S=cEeY!r6XM=6S{%{C~!(%U$ zqKUR+-p7zl0}M7NVv~-(6n&Vz@h>Xxp$#<_m8_9M3If zVncqFR>-S{S zP8QW8hP3Y%d7*0E|L%9Q^!BxP7pv^U$56u}vBSv0x49kd9l~bjR;U-kl0uV+rU5;C z0v|d_HV2_=s225BaU^{-0}a>5?xDi9 zx~?zNBef)nDkOO*jpryx5Bg56i_NL^8BCc+l*QPCl8rzf8k(OE}w$ ze^1UqgNXVeSrSd2^|o3gAlz;F{eTLQYMkcB|E%amP%v(;#B-SqnouESqr*jM6s(M$j7Ao%hoQ z?NFcR&~jnw5`JVJyT4Zwku?bFm}B8{7?hqw0P8x2yDuUGLf}_6G6`+98`K7p5Vc?9 zDAX8s#87j3WLF^{B6%~DWpf9Mxo*M@Fo&dgB^rt$SO~gDhz9IDwnf_bb(|9UZLp>Q zhqQm7O9#8_hqv`nrlIfHnOF?VRn$j8xtCT`Xc=M9{{+l>!o%?5qNomD+gh+OG)aCG(3AMCzI!9i4 zzSmSxT0tp`Lpw`(2TI+BeG%ab!u)iNn6?8I7T{~pqlxXmgn4YrHc)dXE@cT zyXq!bx8XVo#6UWRZH)7KQIEItXD%EPmHmBihm)>r5Hu{MnXwR>4dHmUT%Z=~mkJnc zC|MUla3RkkHgQ$u2Ay^$B(dhc`aWEY6AE-gL=wZ?*_y>gMp6_aT)Em1yo(J!3!_~u zf8NmFMg}5QpqT>>Tzwv4(OANSfr44Q7eyfgunVcq0xvMC0Mv4q15s-YKR>gnfJsq3 z=P<;6g-p281dvid0-SR|)wAT8pj4I@J{;kNp_9;0yBDn%Xt8IgmI|&W5SU_XgMjlM zGBFM=_MCJZtjwUtsbQ^cDYWZcYPhn3bYeoi7@#XFK+}NQ5sT;v!2NsyFw=?8RBY{a z0wa;4U7L|Byb&uXP|rq|F>&t`eG1w^;96~{DHG6X$j&jKIxxs{N4cUF_K2bouugaV z__p0bWuRIdj1gIaGAS;^E3iD+;g0dx*YD>I zZ{EJe^P4xg-(K*FuV4YHFpgG1?SkGbUI2`<<5j&tj|u4$xA}s8yJOr=@KjW)sFfjX z`J5BBHibi9T_{o59AK484*kT*an>uh_5Ru}DCoc>AJ|pnBj|vrq9?t>Fw?CuhD_W& zwj?61punXb=)>a|7(NiUHMLY50L?xieOR0U1Zak`t))RGVNAkMLKk&Ruhm4)w>$pi zyMKcF?Vk6g-%b-Cg=wK%42l9iG_nuUYBjOFyOl{abL$HmzM83`wACM;-cK_3+NX!o zipQaNCS|D&g@&#@-DeTmf4<-EQ00sw-Fp`cIn57s@Vh@D%-Z|rpBnaKkIFFX2nafvXZ|68bsue7oV3mpAzM?I)NjsOG7J?@9$Pub9a0sI3ECQJxqygqo)hOOxLglM)>~`{T-YE!lr0rWznkpC6BptZ z5LhUm1TAcID<~T5GpQhllF^In(*zw<&E*=Ix#{8_6UAvhR(~UhxNu^MPBDswQ_@uI zbIDw^w+X{X*IHb}F^rOODVxJue8}h7)p6aYPx*XcYK=k1g%ja6dJc|66hc62uh1OZ zo`PtZXd=+ti(%lSuK|n7nH~@H>eXvpUp-k=XYX0l#kxWg0v|Iml1F$dLO6M1z#@Hg z3WT}|a$3zOHdRFz6Z2fIhr2~hIODl(wx$z#9FYmo;l=_{V4fX(c-`8_-ea-M1AQ(9C<4ytFna+N(<9_egnb-` z4QB7QhqhWWTF(&v3if_Tm@TYtez-AKJaWqJaraF2qxu<|LnJFMZgpWmEf|=%-G@hF zG$V?PVNp!)(Aq{fvIP}$_|h))#~SDdzMivBy#~`ko~pIrJkK<)?9>6<=QaEGK{usB zsAW-8;?EVQT(-vBpP_jUQ*}y2i7a@^s92(PuFd;N>kO*2`VDr5Bg-rI{x|Uw>L-!T zMa}!uV)PQL8*g*M+Y(@1rr;p*ViTyBMBZ;^-V1Gk@k6@f*MK8<EK zlFC0(b0&l%bE@U2N@Dih5iPW=+uoEh^&J~|f&$~~252=L=ur<-RL*ENAQ#ZjW2j5y zIN(4=`%WDP`r|k(e=r>QklaW~ZS#Imp9L8q#SE)yp_wmR@_xj>K80}ibyy!PT)MDA zj?%OH=DDuE88H=iwav|a=>s3yhD|^G`GH*Xe*Wiw0sqNg|LYJD{NC^VBlH<+Va}#H z@fs#ARp#SR)SQK;dM`eNia~n}ub3CQdrigU0oSyzHT!_x25n!G?k2&4u8(usLY-T8UzasOBQc(fsBl&0(c1cQhuXf@%sID6hna3n z!0>l5gozyG$jF4F#G;%tOj#U^eE{UHy13@N4TZTpVyV^hzXPMo+W^o65{@c$w?c?P zW57R$MTV4G4SlGJF_6gI!t2^$k`GN+v#pQr2XaZl7y^&VUc;*4XTf%D#^|2GT(fyv zN(IsMd{wW1y*6c9gRMBwhzevzjassf{fPIPTUUI@64fnKbL<&` zk*oea;(U>+e$1p2tf-V#`|jeD$hr^o_Wiu$DAflBSQ+vj0ToeB?76ILlVM1$klsH{ z|Iy`M&-d^_c$1URbxmTJxH;X!;TwbJQmbK&$!IOA#T~^fqg-HFzwk4PHPCHn6>B6m z^22nLAaO~Dzc{t0mSVY-w|i1Pg4Do7xEu$lM8>53os!=4=IMpvf_K-v<8WWLAaQ)a!Iu?RQr+}>7tws3HOd} zG$dUOEfL5Zo}*{$MhtqVud`DCr9fK0W}ZiT@0RP^Jad~ZGqts5P7rq7sjtTru3K`4 z0*C%k^ZBWs1*p@UQijbV=$KjCjybHkdO3Xk)D&ZIsfIOYg7$9BkU4So6SX$HIu6Tf z8#XvO=eeDCJtj;g$s-XBp@hseG*JpR@frNQZ>aU!sz;^i1IZ;sIpX>A>DX4gzEMxo zMgs}N(}R3@2IfSaA0+$mcKP#+2fH4Z~E z1AdH&K2KCGxE=@UaX41e?o(~m2FfmSF*Lv7OJ@*Dye1fPxFfP!b3*}ta=skmM) z5LGJ+6kHb$2kB+~ta-N6g3|_Fhe6^GWL_+TlW;|7fBQ=!CQo zh{f|KC_y6$;Ypw9G|(gdg$Us4)Bx+$6{<;FARk1Q!sg(v6}1(#;}v@Ek*JE{S+a#I zS~Fa@z&ibN2Iktb#Sb>u*nOOahOPxitI+Q5R}sjV7z)%zHlz>A#;}ZW6o4zER7YYq zLMH{m3?eTt6W2?{>!;VK0M7HogkxBJJu1vj<^Wo0mQ_g=wN-Rt=y}H&9W3fG3)VCg z87rF52{a-`FO$J2RsDaDCFs*mc$r|R= z>A0USn6pEs;HV9?Rmi}KUh+n5!~5d~cH-@uHyGo@?Y!a5+c)^*?|v5_fA3?+Iq|w3=+`UCy#bX{69*)r14))(LFVaAHfamCa1359K~AKjuL*muG)PfT>%+f|HW#l?C^b3(cK^I{p; zuP;w{mYc74HdGMb+gfShYBl&&28KE44dHG=iF0)HG0JfZ}i)Ymf#A9V31nH83hNsJ6P3#~D=tSj))@ly9$c<1FVr#$GcCi+G3jXP9v(Zdf zjA$4`qHYU<5Q!moLrfjm+|>`}2UFLIcSL3>e->5LGJ@Ax^6BZx(X)LsvtjGAN9J$= zw}uaY{OkCcpZU}H#)m(FFTHvXPh7xLaXasLetyBr+qZc8$;Wv6=3~r$H*!-s%)Kop zNSQK#;XOK2MBu2^1bt$npNM2Jih;#t6{?0G7I%HJHP&h?KIm~Oq7S#s?Jqb-&wZ9l z#r4$_K#Z5SH{4!cfF>rwV*mXzAcloOEeBpby~gZ{-k%fO4`RRXHjtm)q9%q+6c;y7 z9k|H^wQ7PxQ8cdJTk{x~cA)puT%4_fXCTX$D>9zNG0d6$bh&1)p!YlK^@1`c=DkDu zOyZY_;ug8QKKQAvnRvhj)Al^*198AyxQv4twO*mc2B!CUuJgOsvrN`^qd7fu+t$$n zf+kXb34=|{>`3!IAid)r0!la09HrnO!g=0tymP;p5MN~_|lg^&6-(( z6951p07*naROx{tIL{NTCWfmAn_!J9PMs#iB72|UV$j}g%>XHyJ3f0qF<9)}=z^M3 zo5{{x6wk~!j>FR+!pI>l$xuG2gE|=(c(sJgrMdh6LJ5&g-UcdK1 zO^m)2bAixAAAw;vb6!Nq?Ze2(p|)$)pn@fuD<)X7UI;nmXhkvzamI@jVmw`+aNbYr z>8fRtS09r0-dzYuUSpUuKF%K11@h{c_fi^a4La%Y4D03Ojx&eNN!ETn{k+4p%?{^4 zC8IFCyAH=$F(b8fnLr*9?&L-u z@4~YYO3ldQ^J{1yCt=hUTpw7Brc{klE3vJ*Tbtp5^_tPu_fj-n*R@YW2CD z2^Xi&f+A*7-7MCn`?_3F!)ei4duM1&o0~_ZD;a8^V?wY|n zIMH2+*S*-Cu9%5m)zKeZI+??(Ye*RnOAN=^U9y3zFc%84shui#X2Xc_<50ZRm4O*p ziC82;>1dz5=4T0K`@0H}g@C6A_xeJ`Z-|Z`PSJlLe@ZF%gpM$iUi_i4HEWe0V~%hRH>V@%nG%R&re}NTh`&0d#y19T5d3P zQbh=G24D+PE%_d)=Xlss6IrCiuQR7gJuHg4`86XCD+CLGxT@S5i+wJa+887MY%7Q; zvunaZWlqGlq9+3X{(T7$h9m)2?pC7a}kMXlV z`?L7Ze)Bi+x4!td@OS?1-^=HO$q_uX4x{lr%`x1~YcFr{+%Y_08#$HJh6Zz2D(k|t zZz{zH{lP4kt&)6G9Yj`#MyXJS>;v~WuPhLxfk~5U2t2WyZOvTo)=}v}tZbmnh9J^St)(V;K zU>0nL#w{PR4~X;}ZX2SBamhoMxWg@!*d{)jsw=FLc_Tq>d zDSlXGYAe1e8j6nZjja2;sQ&rGy&U&#_&Fl>_z=egLN3I5Wp~CBu%D4qF&~QX5Vp`d zx5S@0W#Rl0u6BR7OWkmlV#0yy$X4}(=+p^Jq{A-GInjWlZ7sAo7tVV}43Cit#QC~B zq6(U_5hWzw!DtFoI@BGrugh7bb4AOT5N_de!wp8vc~9oBcd&RrB61G-)}I0UY%}izco|7lh)e9fu7uB^j*t zZ1}pbP~7e(c#O=q)L~7;;_n$X7le`{^~oAz#p53CF+_J)5|cH#gE&xXv5e2T(?v|c z!6k5u*7S^LX%`tWmyC+2rCL4eYem%Xm+RHf6PhtqBLqZOV=C4?Qgv6T zCZgQF&|GWf@R~x*dDja=h|_^-dv`JXtk(*yviWNre;UJ9+H&wpDX6kyAPisb8Qjp! zo##?eVOiF3znB;mYVR8XLfxI>3M%&fhDXOVHX)D7>4brjZY@=Sx{1ezuhY>mqYy$0 z!4go+flXuvYBWPv4i^`hu-BY_p~O&C6qpeGpoY;0&a+z|sN2n)N;vN)m=&!V(PKg| zJcAQLHWcR|6qxmp2#{Lrd2BUB>%-4owK7UOpgeKTd)63%OlJ^;*qYm3lY%s3$s%H` z6ccx-m>8@U%kH&?Iw0s6vwIWU{K}0jx?s-J>Y>6om~bVa%JgCNY4=&gi6|9MPgiS} z_UUV|IT&sI;uPLsm{Tsq7xhw-UPNU1>BSq3Am4}mJ6kM=k=%x?C=|+gCd;rdAx?K8 z6}eM7quZe9b7Y;EwMmeKupFV{!y2P4dGt!`VZ+>>l^9R$YJ2PmbgRE(qLxwW=YSzI zk;BtTPUroGKl$T-jqm)ce~G8-6-NcW{Dm*r=k6!oy!`|pfASGN`rdc(@yFl87$?qg z;_b@|K7R8F-oAMYbiwO(#jEQRP#LIAgD2U=E;YMV*wW^EoEQeFAgh(1I!+^CE^c?{Y$* z=x0YiPxLuln5vN5-PTO8A=wat6d#V=?&xe*D94;Ok%iCcgZ^S8=&sK}@*!6CZ!_g75yx_waB2&Hs%z|K?w#-ft-VZk&z6 zhDEOv!bW}LLg1r-oV1E!*A!BMIPGz09!Js#xH<*GMW0kx3{dRDq6!)VOx0;0cCKl@ z4q)*gP!GZt6-CW;C{BBt0N&m@xY)q??aSRrE9fXy44ECPQ$a9b+t#ADGcv@f`Xkyqpsdp(F&r&wjO4AF6fSZWBkVZe{?OH2++p7{U># zmaMaf_8jnEy^gntt)95zN(EIbP!2FkAbN1#pK)9&`mpEf^?R@Jg)e>quUlGT ziXt{J<`pYxS=*LxPBKwz!{u_Zx_I1yVFSNbFGjqGI!V`iYVKpnocp3K9sn@JbCWRv z8Q|E9xrSWS&Z1)>uya=Bb=>s6NyGrf5IV8+8d`fzfv@;EA>xOQqgjNC3+eheF{GoE zN9t0TDF8Lvm>Z z^e1Q|nA&>8?+`ky=d=I4W{g#coTx6!Rh=#fWH2v7%$x(Q@%GjTC*Z zvod74(jy}BXe|!itH;MCfEOnV%AA-k%o!eoKxtx-^#4|_s9eBQtlm>6&gwK@HM2!7 zc~66_`I>VUDkaY~g&4J!6y8N22JEH+S4tO-p4YnGa|U7`pE4P_JtCGO=p=v&s1)4q zXOa`Alinh}r?uwfIa^Of1=aV_*gwNWZFH07Ga7T{mjcvgbl`E$tv752%37#d$F zPK=zx^U!Ia*`UY%ZYoe2kh7!IX2M%H|CD&XydToMN2SExBLM2Yna9xA8bB-4Ts9X} zX5VcMHl53D8-ubPCArie3*!(?>BtP&9k$V|i^FL2jl&fbjksv^aOE6sPg#XVG|0-9 z?f=%;P*UYuj}TnQLo< zjpa%uFEHXjn$A@pbcaGxTony{=dkEF$QUd}j`{v~CmSzO)RZ)i$QR+TxB4$Hp7TSr zWo!C(P?c@yL<{BkeZJa1T=V|F|1dMY^{sE=ul=>ZhUe#J{LX*>_x(n5V$vQ284m)9 zg#7xxrw>JT3@r0rC zFRRFuheN`r5%F7oH;}_IxI35wr<7=9dLaL#n{^}B#x=?TdSLNmSZYj;hwu6BV4h+C zh?R#&vV@Q})8QPXB{n=_Y!v9D`_LTme^RL*&f`Gwa^wvOWdUxq0?OfrkmL|NvcSj@ z)WnYjfpn0nu6i!&G1Z5rSR8VuXA-lMHqt}s*eCYAE!-^W=w>_+KxPWZ7City5Mykj z(CH0i7CR6*a$B7el0=4RlBm_vh7$9Ajv2F$L}SM~ngS%yL%peL!jp(ZQ7A~vp*TI8 zz7Qo!HfRq?eBkxm#SlIA!@#D+vtaeH<}?3DYT%U@=6mb|+IYjKGnI`X6X>pzlmH5+ zFRf>pyrD(1<&Q;{cjTF4cQJdDWXr1D|GiT!QsB$0p%h|4_MBwdEKT`d=~l-OWeEiJ zdz){F3p1D=8mbo8!Vn)~*n2X;Vqy$c^VAmr?cwkr>K~7Pnvyx`X6RZJjGdsh7TIW6 zxL9a9;#w%*9df+9ID$LRaxOklbzwxli-3@>-0x{;%HqO@sS0SgH%xH4C(T7h_I}1dw5FG##4nLh~H?Aa``f7l!B}x@=je zN;t0ES*}aiFoTGq$asz^lEZEFcM7VQlPw376uMH3}DDbLV;0k z#TrPRW;Xf+feZEwI5O-tVP(q_8-hKWg%*iX0P1;8j(axdSbMfE!4Wg;8S&ab8n%fz z94i-@m~ga)F%1zMqMAZWWX8;ybDClWAL7qBJeJq;ELh#a&)p80UEc0@QG&d7fT~oWz@dg?;c;O5T?ek#EYD0fzKTrmNsfBwk|aP_=eT6;5_Xv0KsL6%v5sJ`J1B9!qeZ(Bk4qwn6di6ExsWG}%Zle$CXLu~Wq~5KItd%Zl}3Whup) zX+rs|&OQ_4naItkjYM2@=>B~ov~qD#sbQDL@I8k@h%poGYp>g?k>(iC+E9w(I2acO zbPRLv4RdWPS)50$A#63F`P#RUjo;B{4z7q5gAQD0D-q22*&(#QHE zbK-irq8-hhm}CQ+TCKV41f*Ju?*&Fm=u`Ry}q zPP#dc1Em>`JHMD6?Y8RAh=8>F*X6pDzVM=Tu|Be5vkh9`;w z8!U_18Siwl%#;b9R>w3hm~qY}8`>-RyP>u|>J)e2O2#?WS`+D9w0I6RIUz2HMzIfs z@Ytgc;KM;?ceRdm-J0mpoSY(*{luih!6SY|P|5p?q)G8CNtBzI7#Q=!c{ZH=#iDXv zUGb$4KERj0{AGOfy^r!$ipZ=<1Yr}*ax2iT&|$TBYYj)O7H=iygyju6y4(;wyl0(@vq$}XN8L!$R>s_ejNQ;o#^Bp~KnG++ZQeKOP`5=rDGl+LoAB?S<=h>A- zZZ)fa{^I7WBvI*#XY*cs8We*V61^Wk6ZBmaD8tT&ki4#oW@&put<~dnMj8l$3QaWa z{ehv%vGrH7&k+5V9!+-3ZDkjzz zkBbnEh!M&@NUO!~vC|5sJ%2-K(F6TnlB+=|&T4fDj&1GPXH}~^v?$!1&x3+oz+wHg z_^v^uD{dx;zEz>}(3=cV!-GkJ#N%v{0+=8j1>zs(QwQ22PL4jnEyS2?@gj5DnMCZp zE&wKR8jY}twk#VU(6*lR(NW{z8Y<7dDHE90aG6Gf`Q0p;C~$Yj`n$B8xGKl z0si0*{|Nv5pZ{}T>{mu6-Wg;RR|rK;Z75h{p+(+%-Lk;xA&;ALVDbHTpT~EytQg5` z4t~c~9L0@&_OdtO`fD-sqN)e38djH7tG2C&HNrui3l}_gM%Mh^=WRNdobWMk$>v#hZ_j?}1{? z$)RHtJQe$OK>*;*UA_sG)Vrm;4M4+jffA4X{!{CLyYP0W=8n*cIGE4Mj?;JQ4UxT&noBGbYDO|Q%wC`^;oiO`Khkwp zmU-l(j%=d5J4DZYdM~_yq&CEW;@|fCEN6Qls#nZ{>dM|r{mS;|XcXZ|0t@UtvQZnu zrpy*kw=GAK@k23;$PM@53$Y<`qcLTTP0p<57?kXT?YL#jdG7}f$&hm&psn7Q?gaq_ zPI(&&>~5tHrNJl~aUg(LzBEA+eQM6QnFCxT{*w~n{7`G@IvDFV?40hJUX+8?fQT;; z^o3A_C%s8c%vJpUFt4@SaKCe*@4ZV^vUy;6dm$jD&v>3R&{~PYj=F781>*f2W57?V z5Lxj<~S`*|Y1YarmDk9E#IY}X*S#Cge` z$C|_&%FMPNLdg)6sJWiQeY%PqdyfXzuua`PIsKhvKOei#8F`@uh&jj|Sxo64+j+?2u zh{&5N9w&rA`75@XhCJID*<4X?JdqMgN^kHW8jsI2um}K9bDxw_^ByxFes2eKu4jFJ zzoY)0-iC<5FgE8j#n9D-I^=_E_E;cwkpL7aD2aWbI~FpUUbLNUORea>A0foVem$WP zxj~yS6FGoDG<%W+6Z=p#_fc*3o{j0x4}6%e>1>EssaA_NlBwqMox@_9nxi@A@aLr% za&g!iFy_ceh==o;P6S_xh&@`#veaYEGyj>bx2-iy7undm>;EjyAnwj!X2?*~jIs$# zxi_-NocAc6y)EvV22i|VY6CA$my6*cy`~^PH&F<0ynz>uLAL8Xut(PU^BRqHX0Wgg zMddNt!eS*Rn1I>}SQ&Hp&`aS?`Do<%Y$Ea=X7rlOeJ<)v!%|U1(1*uSl!jUlN7D}{ zy$~*!2DyvpOioNSkwF|7We)UiLW|}upgB*7k_#2soQJMed;9$SNZj!IJw$*Z5cV~X z7GhLA12=XoX12yU6!Ufqy@1gKj>C|kbK-X1ZT%$yHF85m&1e9_@m5TlKExd6v?6on zXf!P+LB!s}dYH+ic$1k>yw08(n>a!!BIGe3>@*-UVZ7R~XLiAP?M^7%?( zs|rNe&*7W`>4*=T9_ON>*+bC4;!_NY_WgHyqu+&oLQt6x#E(1!4?AZR$DopW&hR!2 zWnyd2`sX<=R}k6%-YUb=ki`dh;(bKHCvV>X|JQdg=fEF-_q*PRAGqCKaGp2xKESQv z>GBGt7M!!=a(f1YP$nSV24=IL7`Gelw-e9jaKVYK)qN`7yu7&JmYiT%TySJWuUD^L zS)9n(0SGR~VL0Q+-3?c5;f$sCQgQ+lIP}rcGPxwOqLq8KzTcJ zOq2?6nc2e}!=4K&1+7UA+nMd%b27XOg(kWWd58;cj;kjb7NbIp_g_ERUa10=6X@gv zU|$p687^ajF_u{;&MnL+FoFlW&Z3ajVAK2gnEp;pJDV~A6^yB5LX+O@`?#pf-XD8T z;yLKOV_@chIjCVw=CIc}03X&xjxEz*oNV0lxDu|0U+l^17Q3JBObuh>aFdnKAuYwK~|IpIS|{Fhy|oyY(;%FT)`o z}v^r#Xu?Nk+`oM06X4&(8TFsw^(3vHj^ds-M9$&y7K5i#mVC z{ywLjH+)}IF#$>CVrR%wjA$SOGAuHRT+jg`+(-BGr48iCMN2c{@ajTex7Mt`;RH7$ zfQSp-*w;{}eNpt2J-PwWlb(6rB&Wzm#Pg>ON0Fy)dv+_$&v{lKbvc*851amJw7Zs^)gonwG93v_OcUQPA8Wpjz6 znPzTqpVep!ets^dBKhYa2jB1;M32K%UMRvWH0aSi7=w?8g2s!fG3?M3e`hw>3qK4o z;suUFt8Ce7q15Vqm_oAbPIPu<*Fs9HtZT}K@aU1}#GBh{y_j>3EV4e20s24w$Nw0= z^*8fFUbmbBG`!>f!JKDm&D{$U#R_yNT9(okX#5~iU z!Jf_fQVK4|;Y!dzhjmw!TeD%hFzC1(czSw;``xnQ$Q@R(SyZkbnz?8Zs-N#5oohvH z?X%z2&3zd;tWlt_I~c>UM-PgXSgS0zQN5vLgS7^(?D;!^!~}G7h&QzpyD6FjhZvrh z&Fvc*koLbjcFdL8W6CB1pu{|*l->-X`cFMbgpe)u7N;@jW;_8KUDPCum-{K~KV3jV@h_zU=>fAKHy_U&^vznLC~(Sdf{ z2idDhuIU(O-&+h5{`hBnR-GcU)THreoagB|skTN6MUlFqS{_hP+dw>qOHsV7VUs>w z>qqyhw-iJ_MbL@Q76;fBGl9<-V(k(E%9^!t#eJKYLlBtp>2-3!(TcyPcCC)%NFj!b;5@rw9sOMAx=Nqqb3R?g*F`{?_((ywVDGeCsI=| zeV9>*HgDYSexErM9b(wxQmp>&(}oV=ytv(Nn4+kyB}zH2bEySKZ5f@>?*r_3NyGK~ znS?CY`8b*nHOVPbO9-|i7m#aPsny&pp5bn54Cnqgrny|jpOaRrWfA*uo)~EL02c-I zk^BAFViHsY>W=5A6&PYQTd@Y^c@A8f2{ERx1*iqWY*<2G!|d2oLBRFtYC~6;1zX&a zNrljgVGE&v784y&H3u7cyhfx^iCUxF2IFkbb8qC#KA^qZfWTd(d{m1&py>@I234!s zbxhnx2P>H-VJhyULu|*fhA^`k=)`tSZWhlHpErgJ0!1wi?KtdA@A-%pm2v=uF*N7~ zHXKn=9LHf40$2|E^UDodfO6CnXN_UF;7e&xA1I_NW_nXt#T=4hkZA0}3lq~d0?u>d zyiK5Vb1hDD+m&kXLVIGIVs-aaG3>k#5-|k*c1Nof+!$T%ZtSrAYj|DRjs}2mzuoMg z!v;--jD|8s$9+s(Usa45LXGLJe{;DQQZwx#DYoQ7xIQ%;$HiT-mRBCph+OO(VNunB z-UZ_n6a@$!RZT!K;b>3Cs?Q)$s5{rnMiY z9%>f?VKSr8io6JJz{23-p?1_cfl4UV+{ZeXd#;P&;_KzWyq`%6Ffvs2GekkF2Z-(b zHb%$CAN>hFdGiTA`rh~O`qlfmzPjRQ%~CO7xcBSzim!a-%Xt0%dr$~oUY>pZD}VrR zUtaLZ%N_6CPso_4Y8mXKcTAb)9?hlz*I`wb+P{jSq{1?@1WI}~^Se1TN&W7v8&EI)b9iF&=5 z+f0C>6O9;`<3K0EC!f5*N4J+0gxqd7%qeJ>3$Cx904AIyC~#9iDQI46_4D+a$;E+l z0`6e5I-whVhBiZmM@hBT(2j<|*o(#md{Xnx-(WD@Gd;xO)a+oPYZ7k4C{M$RY% z6ho)SS=%eGP4XrjP1Jb?cM(eyarvMxnadVp2Qc%hh8dr1N zo+ngpIH-Y3!6e10k|Ifrneix87|pYkzxUDi(8oZl%@O^6Mqxq&Fo4mQ&6^ZHJEU{92nimVwcv?r#-*bX-!t^ z84<&B-HRjKk@22W%%M7Dy7M0<1Y}@LtKnNYY#22xY6V0XGH|=UKmfdY{bWv8BCGd^ zO&|(F1EVNeP36Q7VaF;15Md}+G%62slc!f#y#N0D_V?b$r;Tz-E^ZnqrTHMW2C1%<)CIYU;$A5EPM8~m*~u)_)ZOsvz(FUoZ!)l z_gNx#gRV?lkU$JN-qTP8X`PYETB<B5PncYO89+xntE>Z!l z-Yt~U%q1e(JGICWn**Kxo~I8<1^w*yntKe#njP4^Yt8zpn1+Kt=WxPM#Td^{@U{2& z-5#3tY>ZfR4#Cu*3lg|SA8pMB&-0Es?5ulvy5tOD&WX{z2c$*@LXc~{N7JGgJl_#o z?Q4B{GE8_=*@=uLqH-2-H(nxf)O)D~J>uMo3nY}1>LK>3niyIYhxecjTW+&k_1+PY zny6e2eGad4lDrpj4?_X%m=hpnD5k|8)sjwcP6~`zOwdCg6?raE4HF9Gd(eBgHMdm^ zH->~kG$R7H2$PHoha|1k2yeQHNhk#wwH2S=SY26aOM!!(`|ON)_HM%YRxGNDDinls zcAppd9yF$twlwqIZ8o4u>#Ly_jRGLtuq&@zw_E_^z+`2yRImrG|Jxeg%bw2=foFqT zR-Nh^SVb1$@ z%bWvatnX`Xkg}TrL;<+OPc@{@FkKXZX8+@4sE|%O%X5riv#feQd$IdYCezy;(cSshL2&{Jb~V7wYl1VrdR+J zLx4?D=<4&ps&JreSo6@FF0<|67_Qeb28OGY!qq-JmnO7i@q5Nb+lb*GyYoptcc<^> z=HBTP2sNo}cx%cgAFHWGH4vYEJqwxQm$qR<3<`=n{zJ`1hpWA&qdk2ITYysL)^Rl z+L~O~ePhn5`qtj(urCxvrbAJbL{X$jQ)Z|n4w-}xgdPPr5}?=uECCjzNDr}OAr~OY zYY^n}FDNnMhd44|NsyC&LJx-hBs+@aII*rxcJtDG&fe>*syXv8FI8(dU)6nxCY#;o z?7j9{^;ON9bBy1>bxczj`?)DD5L2>$mKdXOoADZ)0rqFr5lnyyK3=?hi9elxmTpdF zL)pCg>MQv0>#ySne&7f3xBk}8;Y(low?6Pa@8^E*=kWW#|NHpefBb)%7)6n;xO8Ls z3SId{>W+%)qN|aE$T)B248-^CnH=@OoZa`F+j?PtD)gOX^L_@m>s(8blwmLMa2fkOv&_8hWeGc^V^dj4H2?5*N99w6DRfU$w;PM)g zIFXLDEVwCPAX@DKa@v7qT}h&@71qR!voYQGn{dM#ADp7XaOO_WCQC7i^Akhi8*a0R z=CGk(**)BAu<0mgxJyU3NDh_NG>kzkd7s z#7FZI1n-dzBFm98bq&Wgu>ZsxZHU}ek966l8--#3;lnA<@-D@O7lv40g7+bUORb4g zol|b83eim7g~j`4DZS&AmGM^{IUQsUW_u>Sn_km~?x)kikfIMm|G`_8hRI14>StAJ%>}1oSoMh8 z@v~{_x_8HUImXQUbqv5X8V`;_pPuC&_nuNrQE~PAagaxhLIQW2k`Fyr_Uz+%I?2lR z)tDjbP{BDmYO4UV4}h$>#xQXMfdeAqSX@P8woK}9 z{|o_SW>lT}*-TV(AjHJDzrVLL@$B|JhULQ=>Ye>uQoAD*!{>?!#&l%tbT`k`9PUOF zdBW%rHkh?_9-<%J5ZfUjx|RVHhH$|o&W5q{4$KLz)?^dEJ6_twhGZ_7sP#ZUC%SYT z%qYbP2~eEUfnpAJBRngp0=3wXM1bPtZ3IN5wqYax53{uEEF~-#p@VEoH=|xG6%D@#(UFhkkS`qx6IyytzrN8_yAl_OaSkE=LL@A zTWH6DTFtFrD&cZD@cj8R^m*d>i+61WoTv963joHPigq--cDXb02{GgxxL&Wg&J&k8 z(8q~6I_~7T2Qt~YFy_SNV$VY#S05gW_XI48L=>19I7d(;qW)(*p3{)TYNCi*2;3Dq zJ7z!4d59G!$!Y@y2XMqG>ou47HZ!Qe$8Y`)7BTJJiVG_PCu8h^@Y|Qz+v^U<>soduhtF|rm3OCNfgZmcQk`mje`UO@K z7L04RTDBI5dQ1lv$t~8{>I-v5akb(#k3_V>#8I13tfsg))m`VZBFTkY;zr$BV6!{LRo47w~8siIYtu0jDiH5*DGo>(e-gO zriL7!w+#(W#iUMK}~n;qiHj$6XvbAKJ;qa4HTl zTy$so+NyK)l+|Qn$`eZdj1nc;9q!gOcX^N)fUf4)FQq5pFbr|=IbR>I))#1pXI8KK zlSM;0S;S2{Ru^^`NO{~zYdLg`eNKJepcI6k=3+6st8@`CiiwaI5EoFW3Yr@bYO8j> zxS$Q>&m=S2(NK@W*0c9+3avXjMA3Co;Ku0gcrGTc@%!6wYHGdR8P>G7!#ct05Peri$h^qm^jkV%ov}HIP}#d-HqU4ScXv zu;m+wZLd&kTuJ3>S2W9Qx>vc(8>@h%8JW zgciQRj*2(S;fbvapYKiW?fr;#6~*UUZ@-PV-+l}K&%gRt_}$7ZaBom`QP%ykI?(!t_GjWy8HEr8XZVS4KP zT(0LG>l6D`y1Sg)Xah^N3ywQrqM56KYw^L8hKo4!g|UZYy}x3XtvSz*Pzz*H4AJ4Z zHp@C;&q>;2IJ`NEg-0f4&aC6&=bka zz@Gg_yxgmzD+B2LCoAY0a>hq4YHorUs5nZp!gGIEGkXd`m}NQLrf1R#2*v+-2)34( z#$9lVJZl2gLtdOlvuF%+WxVswyZGj}zKuWl!+(kY;~)PnKK1F(;Macj@8D}+`x@SO zPf*E+?LZwYefkYuc#MYrd^h&8y2?-xxUxI1{tjsTP-K9G|TL`*qPz793qZ-Jspn3j6hrDNCq z%pzuREl={r{p)mn?-m(?6WxR}`%pI;QX!o1i&aG1&{l^g{#qBljS_6Li*J?^J_3@} z^QYO@NDO9UjZkE+lIBp7c(2D85q}qPBg_SGELf}s*#^IGMCg>bl*N0Cjm(qE%T1~5 zX!!VCLm(zdmu!kjTnJ#_*M=Ffe+G^#J`^r1UPvS^NPH8sAYN>gtwsakX3x*eFI}H~ z2mrIz3#vpsuOUtYZxn(hwg>^MHM3^sRL8X>*QQyfR&Kh-Bg`!mU7p;iIg!U~m_k`Y z$yj$wOoJ_Fo~=2EEnnS#_Av)oC=?M^9AA_e8-AL|f*f}~B~xuvKoHOV zOhjz_Om;rTIjenHDR-mZ1jNnl7Tb z4-zdJS%|t~H)SHIXDIezL(-@n6VZyfFpx~yEC{TBH1Rd?cCo_l}#0MFgh=5(46&+Y^W{WJ$9H+TChKrq^bP6e^% zdO2P2Wck15R!6acaX2R;H!yn?MEU-WKyj)Wg_t;N=Fsoeqd_Y$`Xgj^_sc4V3~%gd z-bDm1eklwRLLbvUI~RXeuI|(wNmLV$0a$Jd$>@M^qCw5IhD1v{^$2PWcsB9H9Deuf z=HBK&@y==Q|1L<2%x!O8s!k(Wgh-DV%EQ<20K|r^l^7!3hQ2b+YNehO%6Fhnz^ zU}Bhv&M6?~6e>#;M0UUL9iV2-xON;6?NAc*^ASS<;f7KgAOoTuOp zk*f-bii_LT1vP4}Zm^pPk(ORYA* z@b5SJ08)GF8B)qWc8RZAP6@|!CExmOD)+)tR8c)T*b(NeCz{3 zXK~G@HOxseE@#X|HjAuI_&GxWE|)uV(Rt%{%nq5h50DeZ&hx~)nlpSV+yKK_Th?lg z*`rlFdw!3%-}(kxtKJ+J-_LBVb8R@DJ;QOipisd{?$q_?tJMM(2DqTLf=k{74Yh6! z^8!-BY%TX4JLm56&TWnInFwHlqIutCPQmF-?S6L5dDBdf z&hQ|86lRMb5ff0I;{=BH52j#TuhtaLy30inzK0xlcNSsb_+W5B6RStmqZv;BSwesq z_qcTKsSP9p#~gy>qSm~pRuk{8Y1XP}%}5Nz@9iw=w2zXt`rh~5<2`R9$ZWXQdv{aV z`u#>|w0mZ4CX}^vSTYiXm{E_mqKWMBv$gH976d}O+~fPc|C9LK7k&(%{ru@%nW0Fg ze@`}CybYkMVck_AYy;;8`x#qdFbd8P*OF&8N8C|}99$SAV$mcfoOiL>dE&*37kGGh z#O3Z;V$q0-Bl~Ohuz{w+2B=(OfUGO(6r83Tb}aMir%3ih zbC#o4Tbf`|-GN#_d~p$^8#wz+@pEh_%uD#ql`%qiOOE0elM<1OjOAu7Vn&!b$7T$O zdfdhLvZ%uEqpOioxY#~A<}d+@lYvY$FDX7ZA*y857w4?)Vt23YUPD{$8GR&` zk%Q%08kEdjVe_qO_d5R>NWIPscX!-zm~DS63=#!nMefZxvTavb+RxsPGc!Pr3cNp;cUj#chhoT&E%wjpgS!b>WkBa?XFs->IR9IFHq`2T z7nc+^LW35&Z}dK)#Z77%Gi{D9c3W=~zB%$-ZQW3}nS5DlemxRj=PAPR!R-+~5aZ)QG%iR}&cz%;$NlV2aPVsQw?D=BRY>YQE7J_US z`*iB0YA+g4SdCLx+t*UkXGw_?j6WX_H(`&NCXNln75bs2Y*yYTe=(O@VH>Z2LXk29GO0wD89NK0(W82Wx;(J#$B)jw}=xflL&4{=@)XHtZR* z?{RUMxB%dTdY?rnrVJCKtO-fxl!k!C+-)mo4kDN&nUNgBC~;*Ux01sk%{@kz3ODyS zMypFvtujr?>aRupQe@48`krB6kUd7`&R}JoMvUz8wPd=Oj(N~h$F!&nr@#T17m zp4Z2ePQM&xx`=^NskWZ$Ib{v{WMz&SMh8CZq8#89E2Y4&f;8O)>C&-p^8D4;@#dRf z$FKk0U&G({n?H-6`I(==m%scKJbU*3?|Gm4)Ti*v|H&`ozx*%$Gdz3cwcGhy3gOi0 z4xEi%%`=l7y(Bp>6VJ#k@*EYPIbxQJ>DYfMuKQiCLIV;2gAVloPHQpy}NXD}{zF>5yI z5gC+hZU%ulo}eWMkYlW&8Yn>K7ENFlMcg`R3umzznPkKS8MdDfuklK4Nlmc2avB-P z9k|OAz4kIf3{Tg^2q~oW%=SH^TvvwKa%bbldAVvua@_n9Aj$G>^F0CAG-w zD73VM~*7FNN=7Gndq>=J&T|Do_kwM^G*h#G;2=7hc+QF8X`DlU=kTBeE^Ls?v6Vf z+H|`=6=KY3Q8J=pDBk0+y{cO?TVeU_1t#*TN5MHyJoLvrPfZZyVoZ?djhoY&j&L}g zC@%jv-HA4IfQNlhQSX-Mmgsab7eg!IXbj8>p~KczEtn993=EwhArx5l@a#53vVk{2 zrZwz+bnOFNb49DuYL3eVm-_?#@$|e{U4y9*jOdE^A-IzYHr%Q8@T};bwLs%$%}S>& zm|#)x@c4)+zK8o+#4b?V!jDo2#-ca9Mu2VxpmTiNos zf-cPlU*f{CK6~zo!>LCiwpPb5jC$b$@-t%iVEH&Me*QAJo6D{>cYzArttmzriEPs` z@OTc?!nhn4sKVDI@}4f9kKXE$E=6_paIL(^gHD$Vylo)tIh<{vMK~&UR&+1u@@s5& zvn9aPG(V*YOe319totae@s5ZG;cD-<-(>_wc#$zs$dKd83~Cj3&!6L?AOAjl_Va%Q zpZ}{rhEM$958(bo&!J34R*`{+^CiCX?zi!+cfN^tAHIX@`2r%tdqESGo0}=f$nC|% z10_U|s+rSlQ4-UNL^c7j_|P;AEI>o47I`t?wrefE9!!xVFo7ho-}!@Z<^sT?!w7sK z_Kqz3ZbM}%A*wV{I*|>#K<-vAf_k}tsT!xFtxS1%+=~#Q%Wxqad2E4yzdoT{oR+5O zL_lE_ZdOxvk9tJ)Xfj1T?2fAnT+h?@9C&2s1o1Q>v`6HaxCzi=J-7yYt(hwxcdiom zOSTv%Av?2+qBO79<^-{r$c${52fx2UjHqcsF%z6ot>(~Y&pwtlpn|#xt2Xa3kw=0! zUGnY#IR@NljPdWRA27u-zF)j}ffp~{#VfDAisNW_<&{_P>T9p!#k(&cs^*^cXa%pN zw)xP=+R$9V)1#XvE|&%-;Cel?pHsNt?zrSkB}EJ>p6PCV5@tI!r`mqS?mnhc48iYx z=s73OerD8I2)Qd5W0DhwJjRX;m0u4w5>xc@GDy?@DqKu-G41XUM83$h5Aj6MuzX6J z_t@5I_9dqGMWF1|82g-c+OU@oP7!#a&9IcHzUAQGV`Pm4JuqN*Es7{5F4=_?0_w%w z$}$9)VsxPBLd}`^=mRED3MYmQnVqaVjr2u9S#z?aIelmLfZ|?4PO9$xv?IANz!o1- ztJ9oN{9LyCd)&`bXs7eZS?@Fe@9FFCI~f*{(cWK1=$Tt7W@3P#u-y;E&)6iGxWH-j z4rtwaZYD|uIPX6q!wIieFV8+~|M9GQIQ1zE7}m?O=Vf#gNX==pO1?BdzwABkXSc|m z5IB*#&~`;7bMbq?m?pH}%s?@7!y6RcGuawyHD%z;hO%Vv zdk(}mB}i;~k^MJ@V*z+M6{Dfs`{@UI&AjzmE2!2RT!Rf+c^f$Elji!gBAeLV2~S;L zp4)}$m(yX{cz#(8^m{aGW5LF-WN)k+29>gS;&c(n=Gy3+JL(os9FDiA*yb2UeK5Y) z)r>YQ1vcD`q(H)&1)J+l;lIsP1l0({Fk4F_9L8EUP$EP|{ArCOp=-|zQY*J}!|nKCB^8R;ta*DXsSiOnH7 zMa)eSi03SV#q!!fDHw|(lR7R+)P9e0xtTsMB8cF0gihg-uH@&hzK(zN+rNYV>ks|_ zKlzhCiC_5Je;XhE@Q2^mx9>O(eB~=&#=rTA@5ejec_;TYLlJHHXn|yRDn$rYs8~aY z{L&lOkzDK0_nhP8*>JWmj1+9duRf*O^ZDt|Z@ct7kEZh~=?^4WTpz?;?3 zwc5bNE;E|(0hBpf(cFwnV$nd~-HiB?K9O#2y>;{}an?IGPUReuS~DXYRyxhy5{`1( z_Ow9ObF6XynsGr9SwblF2BYZ0qQ&+X7mC28XWW6RUB;sRamrH&kht*8GbJK;9OgW@ zw6>Z@e%@{+28O>D;ur+_nZ3Q8OQ^#N=^4Bkz4tuash{ej!^|Hkk4V8rdii%;_L5?LZ@fV!ET#?@?r;2Vp`{kF@Z0 zZuJJIW7$5>imP6I{XeU;Dd2-aeP(RfB0Si8Ra(Ii&8#_ulTb~hk((g}_SfFC zcJb`Y>33;w)U3hpt}to6$lmL` zW;8|8DCWu-uUw1>B${IVa7RYW!_k^YjVTBPtya8{iF2GO)(IgB7yI`s?nF~~Bc6#& zUYCnlW6=aPjMff_3_OnEv>{sY0vUnk&PkOdHtY?59SUwR*F`Ik!9Y<)7i z)Y*ke9CvO*bKFK-9X8~@j)@ZDCO>DZ?=|B0Bz04S&SAsjh&6z@`YdkE=m1AyOuZN~ z)6XPIktp(W2P`8~_3Awlb6;|8cz$UhWjs7QKrjraUJ8Z^iq}9g1|D9#Kx=n6$^ou~ zL5g}5L;d!S$Lkd*O=u;LZm1wweqm8Xr3x7X6BFFXalS4TX$@!Zm`pafb~kkML2Rqm zFduW;kkM;c^#PBQ0tZ=0aG9WC?$Eot3#b%~IdL5W z58m7*c1jowDXZS2JC0_bub#N8ci>qp!4}GGP1N*jAjAg?s9QQv&XLZ=Ec<-@sE#JkILe#A(*W( zex4_Yf#Y(Zf-t)c11`q_2BV+Wh{c>xe@*B01hMCF&S@E|W8!hV#N*2c>n~i)Avn4X zs_!lr9LHfgyRb{Aupo;ra59k9c@^usZ_)@p`*nE;uu1 zowrMDEfH13ArM3e9UP=f{X<5uf5UvWSB@pr{Xy7aJd{96DXGh-}muP z;IDk?$MNG|`f+^bGoQt4AO0R25`-Xk3f}(CH}PkG@h5om>wk`y5AR}()5VhZOx)c) zLm|fbczPDG4b3VS^xko~T%e@5ULWz$A5oj*gfZ;zxuW-pQwFM=D!?Z85FzL!9~OF) zn~UXQe-oJK%LIUq2c9O>x;riqX7uywUqkZzC|of-TA`L|dx#ITN~yR!ySD+=5Q}MO z6kcmsd_v3~<^fBkJdoD*CRkTSZ9bt1;i;_2MH30pU)`&6!5hCaHMTkCWoU#q5IN*e_I_s<+RFrp@1u%YmacOcfM39l_Du#N^^iccnX( zqxX*Pg0JJyBnrtCT-xDvfXx=lad_;Y&HYL(p1X~tW=yh35e8=_^c0_d`B2)jr&~JI z=a}}od^Rwq5sr@1aI^!&Yyy=j=+_fkO!NUL3S0ET7?B=GwTpGAA9?vTTz_Ys#`8iHWh=#a;kz34`ElQ~r!=4Z8Cxih^G7=pYrDD3lL!GD#Ra7eAR`B@vkdcFCq#Ay{7GHCY zpGSz8jrzhK&ssAQ!w26Uf2E6wU_=|QUJJ}TyO>0RlIHbTpT=P5y@TgO0nm<$3pZSQ_c$1HwMPW> z7~|#{XD${O;qeN`aiEllD4&M7Pa>+WITx)nzSZXONHzL8Wy6n4=6pvJbWTGpZ828< zdzMQqTpd*`73y~w=HCr7U9-B7z;Ndw8f!d2Be;tO>=rOD7pPvKDb};x&p0i z_xnx3yE>aUna1Kn3v!iqI+deP++2wuT4>cL&QslrdVRu&4Fqs}-6&Rx2>18*_=ErZ z5Ahqn@f#2k{K7B%0$zFLmG>2a|FMsK4FCDB{~G?M|M9=atFL|dM)e}$zTPy`rSP`O z7P>bh0Ji*J`%3{-v|2wfbw#OxO5d`11BjkxpO8_tfEx*61Yvnz{OS#Hv}d_=@W zsY{h>N-;`Qd({1bl?+v@=3vG0&|)|hhg+=27%s&CT*aKP6e7CGc3-M=+~kuMGB?e1k&hwsDWBsUrUB+=;+2u6 zNgTk+&e~j=v0vQZ-Qkb^=wIUR{V#tHP{l9((l6oFS6_W!_q>mP{NwoLU-~8dxBuP$ zfDb*tPb5AQL)hGLPoLk2sEADTK!0+)=U6!Ic-}M8LZ5zk@imsB*P3?bQZ$5;cvAy8 z@VQ08uVyy6t1QSkJIeUxJR;oGCY-OkEwS_9%?9p{j!F8p17gg*jXlAda^T@nFPbEJZI8i5tyFiJbPia>xU(77b6?k)(*6 zTVAN+4J?=x0?)7uXYd#k;(M8)C<&!DyNkFJQ(-D~qBZQ!oazuxZaGackcKy{cd24r zV6wJLGKD$Uk;tqG3>$v7*4CecI0=9kS~sxMiRxW>pGvwfrR5HFrMB<#a3S|NCuk^+@dOq^AiaCf=0p|;4)@OpoK zVkk?IksPRDRd+fv*o7Y*$O}>oab-V)*#}J$I7v=NE!+`LNupSp^945a-gA-Jqc;$> zim%O}Bd7>kv-LZt_!bgbvWCbmWf2de`IK$|eL|1$OQqdQLv$fqvt|=5vo(z~dM2|1 zt--;*XA~}AOkBM&7LV}b+2?sy*2En%DNJkaL?+%wY*AUcXGvIa^m<}WDP3dc+HseoJFIN| z`#$U$U5HEZAwPd~|mU`JPouLGwYz*?T@C#p`nk9DLrh zXGR@aqtnI3-e5!IJ3hIes)6}z9jjt=Lk3zNpWH-Zm{V|=V!zrTasAm950qGA&p(aK z`?676mXKFgTnZwR%3V4k9&(DB)pW&?>SN0t2F`P=L8?rg{fgsgNg1&LuV#iJG2LS3 zywRvZL?OeriaUa1_->6TuTu%2T2W-8G2>DyW~mrcaJ@c4s(3?X<*v^;vk3;WEggB5 z2fbqY@RYsLO*q;GM2vo(n7yNwf>K-7dHuZJ-0PyAv9<5fCk0RvoMU(+a)QMP4ls-; zF=H0Sa5BeHn!W#|iEw5CMiDK9aPkEaiJJ}qU*E)dqh@@g^{*BP*aTBP{Fn0WJM=2dd8f z*^ntTFp8}ehGBKjei~NyXg-V{=w}CmaH$u&S50>Z7jvAqX2SThcMJ$B+a2~C1J^lF z-T0v{xKVPa8JY1@{C>@zmkCFU%QWGTD5qh=k2i}9nPTtF6n9b)Sj#^dxB681% z?lWnG9)Ba#$a8GYZ%uJytVfNgQLEits1~_9TnjGSxu`yjEQK>Kn!FZL>G{2*259ZT z(GIAZE7D>Xfx;E4)6u6$K^y^?rJ!H07;0n&b=N3~VT!f*{ncYuMxWqn&GgZ27)yn0 zoiS2)*Ny|DJ9(&8h#N;X9hC_h{n#22Kw9#ouUZXJ zPcE|0*QmCCo6yg2*tWm$ldE`OYd2&t?YD*7yE~ONm>5G+*srRfxoQ)uFHOvHw6+OI zS2Sb_GPYjtZfvqVVak5fepf3&2_O^TuDCnRHEbd=e-CbYz!Bj^c#sJh9Urm|HYecy@>~> zs3dB7SigH#qczR$d(q{RZt=X=s?`+AN5)411^pECV$@H%TmUGp!{`cynwizua=?cS zj}h^@3@P2Z@jmo2^zp$B9$B=QrE=QrJbMGR^eHWbq1>&Bd=4E8y~42qs1! z_W2w}NE?Yj_O;>>7BVc?w{SIwxA%9bF7PvxAEL0=D^63idPvc`N9cr2-(c=}{uKfy zDMW`;h9<6OH*w6tKy#zUm?nq@TL!cacd}|yB%uVJ>cj*mZFzlq0ilm!6qf7NX?WpO zE-p@0G&S1BRHI@T9Lt7Y88uo8SQh0{VShh{Ibcg^C@yk8`w4pa5)Tg#80RA{&tAcu zis70#Fj z8iZE87cvE7D%xS|to!rCtSI#Wq2lzxJF_9TMHr<3tyGAT#iMBPp2+|gt9Jt9tqO?8 zXmMRpfL^-doIPop&5`(}csz*+bb90th3QwYGxw}cnI6@pI7f#HIic0)3AR>Fh?4gq zkmlksLpa_5Fy=h%-c<-h)!qF_vS%$3W7+ep3THYAxyZv%8Q1HBt;?;yW@~%GN(;(3 zIL%m6UU84G&rP7XyO;=K4kHZR9rq>*P|o>c7#`TEf3gv(g*Ia`M=Yr3*`ykM0gG8+ zUBb4w%f&rC?$Ke8KF@PAJ}=91&_!dsrrwhbL0pIm#~7%AKwfwUN>}h28k>51AM}Qc zZsmgRF6&j8%}F;X=QW_Bn-?E0yD?`f{LEgjHv{b`TK4AMd;UF@9G-`}gwnBO7u6|Z zX{}tcNx{5u<=BQknRV_B`ashohnSlkgq78j zC@9asV_n0~xMT)0YUOK0o(DegUqO{fRB?Ll{PN?aZD!N>#G132w~J#mH&(kvBT-vU zX3yq!4z6e$q-_n|7@*rwRudoe)Crx2M2XBd7dvbXv=4*?p^L7-{+Uk|a~$w`Ut@^w zlkP+{VRt%{IfJZeQ}cpgS;|qD9m4TUDg?G{*pg!<61Rh*H z3SBuY@XTY4DQO@%)d1y6d(=JML|S|h5$Lz)i^(b#D+e~P<5Sr7xSKTuSAx?M%(vbQ z#$qr)w8vf;2G;U~SKg@|_Hz-cRII_6?)KYtOaQ+1&O7+c-~5O8-tYZh{Pa)%^!q9t zdhNB>@Wn5F5kK?rBn-o!>L{lTroX9(JU8K1e);=BQ`mLC6Lz1g(7iiju8f)NKJ@dyN=ar$n50!33 zJhTA`cyT>wA;k@ID-fk@iY@oL;TTyr7jtp!cDik5#>XIrQTe*9aloW`Hd&L&)Vt|Q zrFmV z?pqFcQVOlb|LAyRPPz^P)gxh z5C_5rLR3t!=Ox&jlJ2F*p$)hA#P*)Ms5Jyb#gWKN%7|HGQDMXi}@PSz!Ii8~icMS)@Di6fJ6fLPIvYOxfUxUUyXDp0n( zLuGf+O?ZS=O)NNQMJO#HzB$?=&v%T8j)BVV`Ew!G^c-Gue>sgqEv^8?U144`$?RaU zy;bM1CZOX)i#P79S?p+2wK}MA2yp=-@i-1asTXrv3ZQy|W%~Q#XR?c47z{PzqeW&_ z8_c1&2qg+DyewLMbWaelR%es@DL`Nn=T$EQC@Tj-xpp z&m+@(A2bos)*mI#0eWlAC>f6Mua4GM7Z4hHeAqBB@XDoN_6~(pW42nO)S3ew0-?;| zLS3T}jWKb(Uct;ZM2*~9Hb>)>Ju*yeUkTEWQz%TN4|~37eFo}chGkgtcKEQ`e~!7L z=IoQdsd;vCX^8mCR?F_af$SCdAV$Q5nQ_j6katBQCru2a9H2QqIpP-Fz_s_3=bUIk zwsL3WqW;iLUot37%(@0CURzCfpKFvmI?Z(%$M@DFhR0UCWW{SAdWKJY>Qngqk9-!N z`^=BxM?Uq#_~=JIg1h4|A&nAVUSHxbzVYXH^UXiUn{Ry`@4R?{KDwjX{oGQv;f$l5 zISHVgnCKWD$1}{_JSxP7X*1$QEBpOxV4Nm!EA8-}66es?51))-B4%GlMly_h8^H$6 zV@?d|ZX~ey9g=0Xin_VNhdo3V3F9$RCJ+=T21Gk5nNx5WHUZPM&q+j`10(NLlGK!r zi6Wd1P!r9@dQhk~h>$tYv%gqwdjY!8KI(!a6K+rvuau2`p@pDhLc1ZkiR)JWiwWs` zyXT}K!fPLemT)x}t5sz}q-WPa=XwrI1m$-)QB17(T@$p0IM$*AFjjBcW*OuH>khyK zfqe|{dE)x`i1T{I{oS*iVI)m1&R!SLula}xw=UJ3#pHWgchaJ{M;X13+&AYQ8MN;M z?p{#Gwy!v^a5*qc|E{^W_1W!n@G~H0UPK`(vSFzG?B-q{bK<;?6q%->jTEt9iOd;H z67OfrJG~4OQdnj)AY|@bu${}S8wYyb_mF=1JJF0)qL0_~Vf&<+7gyz_@t~6p{^Y=pY zeTW`F2*t)!7a)3+&FDC%^|5PdW)M5O?`_4!Loo+1QWGYFSU_A*iCx@db#xG`T2NdB zF5HQp12E@lz4yW(v8b*i&vACLMu?&~&1|+O$&+?7CG{@^%oz?XiYX(bQ9}$?g65G# zz`hOTZH>-3QN(C)C`SGWx+|gO?~N!iBQ#8O)o8Efoyxwy&qgVtG&T2&8t;{g&-7OB z{;1VWK|U+>h!Iu-xZ=DH6c`BVBi8jXGrCZjAj4=GR$CVr|E{=^oVU8*Fru(( ztw!_Ndc!*z)yx4dwDP)4rflb*-OWPGqcm}zXVy6p-B=BUv44Z5xQqM$KFryNf#Eg7<6#qTwGDOE?4nwqu(4+a?|9y3BCUSjOg~+ z(2YAjkm~G;sdb2H<{>}L+Yr?o=i#lZ{&olvNU?pG6)Ln{s1eQYG2})Cs*22O2*=)E z{KcF2U;qB!$0tAeNqpriU&#i|U-mC%#-~61Y5c@b`~?2@-~5M(Yl(*0YUVDKSmd%s z^RSe-C=N%nl`T&f0QOwo_j7Hm0W&jYwqs$wp;7EeuCzIaidaJI<`@~3CvMPfsGSZO zMgiwQA!5sFJzTt^xmSoQPLZ{yY3L$$V8_K%ZphwniySP^?+VA@2c=ZV*oVc+F_aIL zrN~wr{AY7^qi7VTLM+rY@(_w9X<^GTu{nw?W!O&sNaX$s%)NDx299uD8X~hTia~5b zuPB(p9lM_&@B2G_lOC~hdJOYu7iUA|*&(k&8zOV{u%|omGbhpqg3;I!&kfwgX6n*bdpg$v!}jrhGO9UH!U-Ez>V)K3FS} z{VkTA_LSq2Ib8z^&g|HDokVPTh3*ioo)N5aZqKHm1&V4DEoL3WWl<%3*f<^k8Dxea zV8Bthy44Xmn4&c#ONVS=t6h{yyNllUmT+*X4(J@7iM(8XPqED5#U|MV9g+SKA{T$K zZv`Fz(aa&HI6BSltD0wH=A6RR&spy%phXkIPn(F2h|-l3SgBYdL9M_>qo~Evow^2? zf!2$h>EYOCY=d6p&n541kVmf9*}I{*nbQUK_;`IHbfWiIf-N2Ijp9u;=bYac? zlJ2B+=dfm&(sX6?LQ+#Gi9*M&lJ|u8Ju=M^mL!6B?&7YYeB-(uE^w_}Jd1uV^*=3# zBwW~ATx=%L%z(8=i*K8$iISFdby+iM#SE~EKte1)5X0s9b2Eky*rM6Y_Impq`Ie6{ z*ZC93h>fTNVidnmtZZ>zNXS_CgnXUxtanF8*47e*xd=&Yiuqv~Xtg$ge8B2>b9F(< zP|Xv)mg0@t3FbvRn=ar9QFCOJV-tQT8AT$RI+-=@(HqRg?u;^Buw_pAA>AFsoX;mS zS*|dfQa*m}bM#F#tm!Du^%hN*=wi4FyOx?wuIA1*%T0$nh*muuBAwVfi{sH%*HAKO z3q&O&6Q+naF`}wg$1ZA$L@F0|wU7luQ6phvEs0$dc0O_XB;`ss~TL!%as+CcqodK%He z#c?vMSs$onE({v`um~vztA&j-FwOl^xj^BL=Z#!L8MBh5U%42A$Z0pP`sXo_l`JnvenKW zuI93~bGCyzz~w-tf_a|MK0snr3h@Ys=?-s|=}tGx(Vh@M3=u3~)Vl+f2}1CFiu~?i z_xS2)%Ao>bL7yF6dWv*dDdTr4bH?Ssa~Nf6c3iXe4;PRS&htcRHaynZ@z_sm+`H?) zSfVgk2_3*BySs=Qp5JiS0;cKY8gUV@N1@%E_tQTkN4FwqWCE__G#i1s;|OH$OW>Eq z1?m?6Fl}u*{xt?hdDmjXz#yfr!3QutcWMu^PD0zhdKG2;$h8j%O0)V zP@5tDnG3k8$9lG;QO0>k9y=ytdCnz!gyI5n?=eL7sEY(hS4>v+MfXTaN4@eEt7(ET z_B)B?&t@IrM7$l9y!PRq_}W_sdI+kQ;MzXBThZe#UNongEN8n|ea9hcgkfo!$dJR~ z-s6JOfDgU?I)3m+egt3q(!YZ*e(nqSzBk^$>#uzeO0}4wah^EGiFe=m4!-gBH}Lki z-oiPq5cq2oMX8Kh4zy}iln@AVEsMkvQ3*hb;3A`1r=t7)GGeeu2^a!B2hc;@u!L_i z2SkQFyKIAECBk&uG=-f$w9gTSxiz8@3vG!i!oAi0maA}!*Lu*3Q-I^yBy$%z=~lR>7uZ~k=`L3 zYz3`FZD{9@Id#Pbbs{M3K&|XUcXkA}#a`)6Z!`$5C1YYp6_u@jHB>wk-EyT@L{Wa) zx&Hz4#zdHFIP1C~9XT0-2%<*YV2_A6&(jA^miJv7rxDW92Kb3lQEub6fb5wt7mvib zrFN;)_F8KzrVQ(xEk5|=h+y=ZRyne_?3`}ZB2wlU?&PnK&A>v$Xtm{_En?-?bH7Y* zV~ot4j($kSS_Yxle-*DiA_g)Bt?)X22C2mB`P!QA!UvD9{u$sn9nIhBcYukfmbX*?^dYA~SR1=`}X??TfIBo z5Tfo+a5jKniCJsxrxgtB5!c5D6LWLHW4HK_N{qY91*I1B zv!gVN>((t^HweXJ4%F!3Y-Xmc?e<=(_wbA|b0n!T#J1JxCP~8tZG@P)&0SYCV33Qi z9U(etc3_A@T4f#C_3eB|7%VYOycG@4T}Y>q&BOCIoM$DB`)H)V4;$xZ&ac=Kp? zmOVw~WFvM*NBV0gVw`7R!*ednf$7EBQhhH6#y0-+%@Q|?(UtX9H;jG!yIcG_Z4E(< zL7X=WWyjSfF1EY}Z~t^i@O}>LN~yS9F4n|j27CjKg&Mgj>V;v3cc^8hDjexXPu*cN z8?uoD3(rg(K4^;E>%hP6&24q8;u`MB4dyV=xzRXMRs7R`@=x$Pzw}NlVkA3W8 z@7w$M(T{!LxOJqjhFyqcEURrBq|rh(mQvAsP1)*M z9x0m8MAE3QLv{zqoCDq0GK=NbvS%KN<7O4_zmjDk<#}EDYXy060UxT7|6K82aXK>0 z6*c_u4ICrLhgG_U5|JM_r=~hyy}`8dxa~q@`7a|8-ENl4!4|<$gI=7S*VCK=#c(R! zg;5hgbConw1^NEJ)6pDKBFLDit$E`iXc6kj9o?3yV__Wg4FW1N9(y-oM|1SEe}>Ff zob0G-DkZb4Vh9w^K{dmYaMj{+GaQxxwT2ERl_@W_yro{Cy4# zYYfhGS14~T*_#VZiuEKB@ulqf=Vd#~N;;h_I>cPRwNeTVc?!M-l181X#_yyj7 zUfP`M>$1f+!yL;s!ZthxSht~2Dd{Q*Emid^D#&X6PCz_V;^Uo9>oAY$JW`!-aiM4|&Q2Q@6CjXbZC+#RwmP;n(Lc~MrF zv#eBxoRSwA@hrFH%D-(YP&!3i^{X+;@?0_>3g;!shgP(S0d`RVyYe^Im?_!qeH&df zJ4!wGvTe`Th&;Rf{Zzpm7V*+*_4VU*wrUQLLiiOw6Sn4dM1{aJXjd!-ZpZ|E8jiW} zEl$(a#M2$-_B~6fpkhse>DaU!Y?Dn8=2!#tQ~M@raRs(UPNnTtcbAJdmsdms5umKO z??fKCHKeT3JjW9L#$dE?0n57Il&#@xx&pn~BZ6oWF-Q@=;%%d(y+jjVBa_%K@iquq z?=8h%RVpS1?(XmHPR0eJOsgR_ae>tkHaMbb`Q0jt8tyBW%u2_GTP(~t&(rd#{W)8r zWu%~|ZvTG{8=R3hDnsxlqL@QK?pVT@xcZ(`Mo9!PwmS8w4SZi5Lu|t6Y?OxxiI#&P z2^5~C9ea+FkTbROt|I{B^{;YBn`mC5!3c3Y!NGw=gOtnz)*CJ)6{C6F$A+u z&;BdxIVW>+jfkuva)FEW2Ae12x$T`sn#4Uc%K%@Bra`%FCV5~8j^TtEXD*tD+FL*TsvMqUQ@7E zA|LUn;Df={K)U_3VY{sp;2bu#`5Gq}b=s0RdXQ!&F0%4&RT3ZOGe7-I}HL zJYCPzhEWwpz90b?#Zeip6&EcUHhy*iqoSbN`FOR=XD)<+6YAoo!0lSEb3nv|Gg=y^ zSRH@4G&Cj9uwjm109;Wn4Mi)22v-@Hy@Pb3VcP3~K+lQu#Y^<_w0)>mbRrj&07t1V z2Ai1!NrlkD)iNil|Np`k`%u_pwP0eDxNo$=IHluywanS09(aDax8a`)xLUR0z_pub zqa2J27tdHXA0X>8n_f(V<^o56I5J|ix0a2q2YL6dxiry(Mm-*%5I;q8d-wgVEbpQ z<`mR!(F|Nn1ZK}iMZ3G8UXHBef?lE`=E9%LSTh_!EYk#G=1ePoUIGsf4|ZpEqs#F1 z5^gT$YJ;yrxW7Extbw}nu`4iq-y|Obi8ooJM`mJm-pmB{WzK#=rl1~e_5QqWJ9)2DnIL1j zGmN=FNHN)5_u2}kXRAhjxl9)|c|6-)y}J>+WyE~lcc|#U5vOt)l zBs1wvv~g>Ch0c%0eA0!R@-+ifE`!QB8Do;VFN0zHdLDcPO*MdMFEq73m`5W zB5`34c_dQr5F$*U4WM#H&yWzBL`10II!;IxUz?0p?=kunI?O?Na6==(pouXp+M%DP zVbxu*z{lYtjfr;H+{5BN3W%Gzzgch`F`#?|bf6T0YIo72Q!La_^GpQgV#DoL!89>t z;GB!rrc=?+6Rp^OEn{E~K_wH;Xz>C2^!lS!jC6xqpS+^tD2Jo0&n3$AzNTP+r{!~3 zD!y%#W2N2L;PnWxktB#sXluf^ipGl8E;qegX2!(y!6N%U8iGl9+!VWMLUE}Vub=!z zJeO%O?now@sc4l!R55+u7P03n24Cc^)j1sz-WnPgyHoq%etJ}I39j4N5LP4q>&Z*!wR63__VR5#kv|q~vial0!rd${#a0NKq=7GBB?lQwdra1CI75 z$KUG&tDung3YY;ZwtmJ0u?rTMakK+qKRf)sTA0wvVFOLE;e2LyoY57qmmR zKpY7Who0`ezN*ahMINeF_dxQ6InxLP0F6L$zXCJez1R8-=fn(wCq<8r zh;Tb^bxH>j&VJ&4&FTSN^Ik+K??)0^J1ed)MH}8{u-f}Yr$;Vu#t2Y3+=-l?#c>{9 zeHX7SuWR7Cu39tZ9E*;(iSPyH&&~Y~z3$#03p1mq1hAv>(}6#N0y8Ei`MNbl{BuS> zP2%}&s+iY^8AqJqY*mzjYOZR+gVHba=6n#KtLdBz z`{p`-TP3&`X6f448*1Lro}Yl8=6BrJ>5glK{}B!H-|i2r`kWA`fEUr4Lzg&p>RA% zd&jX4$hZoB=oqeELw9CBFz!QlxaH<{WBMGChj$5{#%I4FeJGA)!TK>Wn(c;-hB3eytgFQgs zbFWI*@LtEfb8pi@n$N-R#t-34dss*99fZ6)bpm4?xmT%#&CKSE)ks7&s(#_MS8sn; zDrYmpN-95_aoAD#V+u4UEY=T35Gz*TN7?`=vJn&GSUIXDgB!9E;YT0U_ zrX$8efMnAOqqy**T%?vqXSY`7q<;(-q0Mbyrp<|#d$Q-ex0r*4`$pBB5xRt*yt%k@ zV1H}~tg2t%sRb-B-VRvH=QG`CoLT6RbGGUMul4p?a2GVVdpliPi9ufIennv7k|jWo zf>-9|A||ZCGllo^Xzo79?^7-eTJcMmfu}XAe86%TnLqzieSqu(!d9-X#L#MF?&b57 zd22I7fOUqM_ITcjEbm0WnYklyxxm*u&6K&Py~Hjhq6qc%j!mZ^NO>KtMG0uV7pl!` zanEhMf(Ee8I9vkS7Qx_cex@79*naT2K+5jw6tn=^oO`7w6XNXXPU74k4?! zu~g72t(t+h|oZ#;MINY{1l*2u;T5zO<`GoGKH(7UfU*L78dM($Mx;5-hD;SD9I zHv%=##?Q}BxINwKte=BU-_Ltsz`fyP3Q!CPdknW796{S~Qz2tUj_Ar#E`gXBY&>)!kYm6W0}@Ty=+@pZVR1 z*NA+m6zh~X{K+w?=DD04LSS$HH{6a^)P^~yW7V6x46h*wpB{!NCY!qfTSwE0aer~+ z1vlKdi0~!+v3Mzgp<)kQ669sL&ZUPR!o ze&#k*RFIo#W;7WY=k37pbb?yLH3d2Z;~E%2c_^ZgPME+O*-@iv#28dB%pPkI-f}C` zA=-M!)X1cdCTI>tEY|aMK|T^;A~#bN_c`6w9Q~{89kqtd;BiL3pu1r3=$la73Jm;7 zy^;N#QsT@o)$D{%5OBNQqJQW)wDsLIf>>)4{}g%Xcpw7peV4SL^}+3(E*-W+FA>@sGm6=p<`@Mv^P*lH>_BFNQ5v`nuf z_xyQ4UCbaRc=PfaKl%Aj@ckcrA3yxb5AgH9{~6xg-*`r~E7V{_xZkfu4vX)fq^cx1 zSw;r*Mf*CA=BQ|<5JrV?dI~TncnWTGz(}KxCLCwSb-!ThgZP#XUlq{lIBOD$XguE= z)FkrA9h=_ry(fdRc^yRF;|?1GG6zHldJLEw+~Fvs zl~bK@S~++^^sA2Jgc)O8)B9_deV7SAYd|-3;5<5x?gL{P89}+7WrG~1&=63@(Jam) zW>*==K!A*a$rMA`=43-LT#?TnfHOxmM<%$2u*Z86PNFamIQQWm_i&~LO~z3F^$xv& z8sj)Rh6wK0h1>b;!_uwyl$6Bda3OSq-{+V68{Dru%oOMCh7UgYEqwm{&*RlEe~p)U zuXAU{dZvg!4R3(N>>#Oag6o<=tD>R``WKFwRKrW!am@bj#x*c=cph%=B<&r?iI?l8$X*=hgSk;^ zokHmJsOx3mJkRKR2f0iIM83Xpb5n)H8gv}KSIV4D5p4_)Iq)cjiVSjp-PV`VdJbue zSG^s#5TBY05)9kf-Jnyz)Nme7ADb#@@bk12jw}-!T{O|VlT_6ERH8nSHY7c68IvQ8 z)kOj!AQ|(*6t73w{2aw0HZz+pvQUAx=n;%j_17YGx9a_NY%S>8;q(gEmr}za9$OY7S8aLeR1I zTTr!fuX-?hg|*H=9_AAoKc_$9L$SV;uB;u$(Ew_BL)L<}yF>h+V_{6+X^ba|M+!mG zHW!mcR$u2{%A{vcW{l9|`a+*gKSG?*90UkjtOt8Iz7zH2@M zTzM~{>`WA8;Nsu8C(+QP4Lf4L;d#*5KwE1#ZqN9a|MFkryWjoprK0{%XECOx^M$1M!{?J4eFPJJ;yb8=&t3lr77w`qhDJuY9V7oXR%V&n1JlOyE!bTGJv{ z#2FIwNCPcW!@}lM)r)FMl91`ELOe5ZrgH3Y;bXY`}fk0VO_r?bNeWq!ED>J^sooSpNoMa#SJVG zRSbnG@`}oJn8U1S;kf&48}K8QvxeJy@8MtltN$MV^q>9(zVxLpeQHtFvmKL7d8 zKSaLRmOo8fR=i=wnB-o(3-eM8qgzJ#+gSMh&n@9i4snA5KzI=G>;uYuc%SI)ebD+& zX8YD4cHvmxaORs($WJg!Nt#1h!)j1H;O7y8sYe`ix*mLR+RAmq`{0-GiM7JMHYhl}|1{}7LWKvL*|H7j))?t{UaVN56 z0>|$mC`cLFtkknP+$$9N!(!#)AnxuuojJ70>z9JiAm5~bQg!8UGOZY!JTT?HkXUuj z(Ab@9E>;d>Z}@ZM_W7$XGTn7-J_OxG9`^1Ix$a5e>Gu5XT!DWL`Np4%A{03F5nD276MnG{{pce-nlD-J>|T{<*z< zkrnL`&*nZW*$?@9Qjrsm6qjD^fUp(oLR)sQXDp^D*&>c8-*L~`ZN%Oji7fa$CsA~3 z^Ij<|a^aU~Lo^2LA@<1qnd8~YdME#^h&YBi8^h5|Y|W_?#Ga8VftIHZ%rV`ee{{4) zkP&rj(8$tlo{hH@(}Pg|?&y&f48m-LW?X`t103gppqYhm&R~%h+*VVQU7$kZ$a_`} z7wl>hiz<$A;Z0Q+G(^tc)6E4BjTv+_$je%HMSVC)+ybA=6-}p*5_EZ1v1jaApt)O; zyFw_;Aec<0Aa`P?zwM~bbY>3NAasg(ftrcInJ5TQEYt-)4j zwiGaUquvLOj!yUeH1`3N1K27q3XyfLiHl`#Ld9F-d7|Mu1{w?m)vJVbE-;zs%#knM zY8}@+PbZdET&x=H!?;(GY0nHMA3FEQL!LIk=GW|W+zRf~pY7wIXo&k7?D$gk0ivyQ z)k?OE9D2AgVQ9YKf%%_`6NJ_y(!?B{I%PtTLN+Vx_Lu{myjCFzae4D>2( zr>7?nH(YnYxZk02g>%PX+`~Ca4^8)-KACGynj$pT#q;Tw%7hZh!hFCwQ_vL|;VM>? zi0g`BRAAhbPIa^f$)Ww65es=#FE59$nJI7TLYd<@eVv~A&QLUm^9yaNzqv<=g&W=n z=my~R>(`F%P4Q5iktl{8VulQ1@`1XG5^EnJ#*pE;uI2=h^Ehyxx9GWPkPkcxCeOEd zW;fVFWR+%I0oJuYdk>#p_qUc5;Fmj2arXIx~%^$7^^<+wdoQaxH~> zUe9=4JR%||VwDWAIWS__eLD{rE7YdD;~9{MqUk>B_MwdlS`R8t4D4i1Or5dMxT&l# z)_J~-LAr%7Xifp~fzAhpWL|ij7u3M2AaSD&n-Aih9yTGkgUJb0d3LpoDn}Umm;mwf zPv`E@f{GG!)tfq3_tB?iLqz6X>-2`W?XFqk+`p zdCv3jcmV)2aP(~JU_HjFZFcinQhR7FGMPjy-^RMG=Xg=W8|ZKf(a{elJdoA<-B&}J zw#M<}P(87F98N`4?$XMIDBO4y!!7demQzX}@;yr>!7HD~^FSu(pm&ZInwdM9`Lp-?6@N~)jBEY` zH+D3R(8@LOnPo3WlV%q&RDmBEPl^6CQ;gvS(o`u|Zz>uWmUlzC8P zzJKBm^I5HIXRHllf7a6RbsPu&mw)q@_|cDk^yv-I&G6AjAK|0l{>X<5rVnbKcbemy zqsubGFY&uMKsK#+F^5y1)$n{Z^%rh>$6QszUsH+B^|{jp@-WbSYiOA-X*RtadEYi? zrXya7y|IyN1aG)!vkg-obc966*U%{ns?2y=jc>@22zei9<+~IP zIb7+B1hDYM6#2hBGSNoFmL#pE_m2PL-~W63hyU<@{0;lu|Nra52OoTZFMs(f zQ2nbV(5Q?#twC8mtGZ|KqDTa`Wfc+@e!AXY;6cQUL5`ovm!@7P+lSoN+udLN&`pp^4^OxdoSKj^nVHd(}eWO9?Ae z9c}5>ub0O&7n8KIh(&8)^)?0*wggn2`>J8XQJ#X%M1IdHaj^FKgJXE7l`+4Z_P&2` zL}#>W0vbF=uxtPCy+_e82;Z#fW?g@@m3)gD8Ubd6Z4ySbb@ zN=vxL+u`_uW|I5u);Qde?)mI`DZ3DSm6^OfTa?XKRnXRWv~V&}oB_O67PR)5V~Jgu z=J*C^e3tV#YQTta3~}PanX0kuZas}A#uB^2ENbYDPG!KDo+V0gE%$3&8D)Ded?ikA zL(q&YsQtIC!P^|=R!Ko^k)AtdYyz&UL8I>t`x~?Tk~PQDE#Jb4v5*m(LSzmiIPETx|pFPYHk&Q&sxSQrvq00#Il zoZNB12gnXt@HjS(Xb@Pq|C!Nm?nIy0RYMwgmIv_%>JdG$taBkmeX!Hp5$MGu_7RDG zPplOU7`_b)cwNG(fL*IuPJYgq2I!@@wF9^A_pFSO^AmVw#|zPHG@D z&tFyB>U{$r-XL`+JC(r1MA15d+ZnP<3zWMB>3~7!5n?@esBD(94Nrj^fSS(#8jFw_6By zCX~EU-TI1veESTQ=y*%fS=M!LH)f*lO>)~K65I#(*SJc|X;Hgy)OKPD8CQ|HysV-P zkx$U+*Qk)-m0cgW>xe$#5L#t+E#mv9h$lsfo~yn^Glc`PYW0|T9+5>&w$_Y%e{*fP zWE8#~wun>wKuhxV{dT*p=PPQN6sPsJQ0-ZtOq;7l+py$m{%Va1=PwcSp&R977tcL7 z#^Y>_LZRCOQ4!?M(>Ygk$R{^(mTAMH-zhMdH9S2%bmp{jwH?J_pONp*> zuV7BxyW*M?y&q98hD$fx$I(&ndW0AX^?lLq(a-N_>`wbR1=9@FJM?G}0!%%Re2xhc zhl<;D@w1AHQFJ)2xx)p0I{o=erdNyHU9}bUbWjp!1=sNBN1I`oU`CH5#alNJcwDgI z+2vp#4js1>+!-(P1;eKAC*-bNGDE=t*~OniPR;G)6kZoiG>J2*Y}-Qk9h0kEp4r?$g0yp_!BdD^H>=s;t4 z##)067j20NIIzyDo|`>n`1OX@a6AdD+11N22zk2%^TWu?Dt0v##Dx?}zt9;9^4AYECAnU?I*f#EytYxcX)4 zs&#eiMK@nJTmZ=Ndw|>FF)1%H{e4n@Hhc3uH^ojAbUHy$&=_mT%uXr+IBIHH#-FXH zWgO?Xtp}Ug=VJXYmcdaN0TEYgW|E!Go6nA?)G7R(Og8_B8W|0sg7czT4pmFwivbV2ACN05z;X6xp5Ws4ComuK!h6xb6i_7CebX z+>tuvRME)vR9~PyA1;UW{D}jEd^mrjYA}(GpvX~N3;IF`$(G^n2*SkqEf+s8++{jJ z(s8U?Q?by;%T4!LjL$1a)EK~Y9A?~qiF^XPfa5&;P@r3LDTbZtpp;Zu#dq^2D=#;g zdBenW8mt;f`FA}UZXex;W>yWwk+g;8d4FP=1!byiur2ShEdH%jpqrBYS56|G?d- zq2Y3X(;D0`MS;^DQ?+3^5`mnJ&1q6Yd=ORsZXP5p-q&=vw7~dssJ>@3H)$K#so7`4 zg4i-z^B_yx=HW$It2`Xla3rVB&^GL5u2IJU=816)Z_tPjVsoP@Q9)e4%(kO#Z6Ipv zzU?`fq2OA$b3Y`fupymIISgI7wo9j-!<|o`xUs!^sxV$I^G{NkXZG*Pb@MVQmFoGu z^Tqaju7!t@P`65=ju;#Im^Mel8p39leKy5uqkg=N4F)sDnE30z{%d^qyZ_`wg{YndWX7lZpYECe_SJwRsL&X=^aqjt__L)xJM0AzF$v-bNa7_hGQg zbjK4doZlmjm${`6rq6?4x$y%-&L}_G8v!xP!w@e4JC<^C{u|Vddqt#xOSyV;UNws)nhgbeF zP)M)LAV&!=XT`!~gDRV$rqTQl@1usB7m;na=s}LJCZL+FiTzEtNb4MN7O4EAbh^6J zSIhmmyWP_b=y-e|x_YC|50AY$nP~*xEr(N*8Dq`eTcZz*esC6#zT3$P@ zta>zt$g1Bn`+Vh?1|l+RV4@P=xQJnkd1#(zX5<;S5^KseJh!h9%f%T<&$#f&;))nps3B5Xui2Uks-_dHe3lj1uq8iH*IKZ`+s)(EYKn=97W8f3&e>+7&%>V91?BAn+9 z)O!rM{XQO<=U&)SdWT+;XaQ4&41+es4B>4H>~z-K`CN{`)4Ovb??t#I;;^0XhHXv@ z&Gj|n6ade_b&*0}NbC>;c)oTBkTlQXo`2|PF?Tm4zE5nr<5C23_;q1g?@~_`t*!M2 zaZY!K=HYHHoq^hPymUsCH6rlshT}MWa4|@I5GS;skFxx7NVDMOJu3 zcuU-D03ZNKL_t)1V&%wpR|WSD>K#Wv@%p;MRL~FLb~}IlA>cM%rd(R(~|Iz!Oq_)Z@_Ir_8p7+~N6HNx}Ld(feH z8F$RgH*5zQH-9c=Ky3JDXBUvUYh0ZSLXQ1(VMn-EvZ<&OI`5ESm~?#Z(iQ`;3@`1Iwp+05qil8q3el84M%)0ca;xZ zFohI(c z;v+Dp=^XNVsWaA%qeGZs2cfqE9PfmMc!anC)L}6|Er&c>4DH;hJR^SM=stuUV_=o5 zORjC5ki{1r4`alKqn(9%o zxf>dC;C>tjj^ikde%6X9Hp+Ui?yLBHz3x{Tsmu)56;9FKU98l&YOw5s*fz|_I(Wyx zXOH_lTjjpyHM*|L_lv^?Pb%T--Kb*N>P3zEQQ&A>ie7c=9bfwJOZbD|`!@dI5B><> z`GbFqKmOxC!3V$n5zf!Q2RRsOg6n$0%bN=?uRg|)e)t3Y_$NQaPyYVz@bh2)9Is!$ z!gaj?$;8=Dj44j$IS=&XSlRXwjp1jX1~W#B=%F!uPi(E@8a{v`b{DIkStdFw_N1;3BBJS(AuquyAfho;CO8gCPy4viZ4HXt@S;%V$ne?Nlid76&m$%s?`rocp0d z=jHn)9pK|Yr-nB#cNi1+=%AzF2H-v~7f-8#jnK@Od3R=c&N{%*vB;M`x47dto^YNA zS|iMP4J*+qLdDEYKRg#xq2$3<1p;M@++I3i{1!JHQFSG`&xi*yqE# z3ryA5A~08k62ro^E$FS``RU2mdRrOe4GqK!Lc@99aKFDqzeDSt^ZAMTU|O`$)FU#H z7ZEv0krZWcsFmA!dc1@T zCwuH|xXyy5|6T9JI8pPoGaWL#bsG0?=5 zT3h^mw26P`oW7UB*Ttvv1j6iS>iPCmLS;ZBC*0|Ak7ElX+X%@nNVlNAC7p|Nx)@}O zp@Nrj2h`7H6rcILbuc{ssr+QZrgcCv&H`WJKrCIxoL| z^JbASx4v9aO^NF~?X%GAJp?&3&P_?~nezf!L!*w{t)rcc`*p|5%N+)%+4vqLL6h>R zFaObgCiL3&fC%B`>@cqFQ^Zrs4GK3M9ZAHAL@Km>^7_p0#kKSEy5z!b#{;U#c zGjS+P8SU_MrPJ^XofvfV5D*WqHQ@dCy)Ue)=-H5VlnGTsG&8VsK+LqfvKE;jnfvN4 z1>Vr+e(*ld?kbbUAZrkk2X)Lo=}*UZ_T}uIMt3$?%OvS2U_)gor8+-R99{tP=7wC3 zcQ4T9_K+_p{&Iz95sU{Xwhw!?GEwuhC5AP{2brUkN=m|`(zl$Vwu1QTgL%f%2TcZ1EOGC2wwkZwl(~zey^FXj&UgLnBfhBxG%jmcVd}V zQ#f-fcWi!Q3soE=XR7$O|Mq{y_rCWpiVW}%{p&ameCIpg!R>Yn+=UhHhq+aA&Q!p0 z$SGuZYc;6MVMHQh)8YS_C@VI%XAKHsL&%|G9!xUdRV#C1d#_yT?b#lU>iu_hWx+*j z!BcXiA~rIGMw2I1LoSlrl7?NaTbvlg&hZ1-{9c(h#1~{n!gf# zV{xd?j8D$I+1vzj7#;31O4naHZ7Eg0nO(B-k}Vtz8f8xw|AjaXk%|T?Hw8r^6HK19 zsG;r-|I?Po;<=XDgvgCG#UUl8BzDAV4zTpof3_W^=I)Jh#xz<(jvZf*80y53jJKu$ z$6z8|pd2ESJ=-bwSndry{%q|(L=Uo|M?y(Bzj6RMM&w?Ga#a>W&_wV;gunW${|(>! z-oL=-KKHp#?V0_PKlx*KtV~(>#RUS7gV0eJoqe#8*XHf`7Gtjb_#Gu&4Xg)Zhc^bS z+=t6iiH_B%GJ8bh@41QF-=Cs~Ps%7)of~#HbMjnZ;f_0ctD&S@<}_8qXdmM3!~M7O z>vO1RTlNzg)v(Xei@TV^#YZ4=Hxg~m?EsNxMqdh`U>n*x#2HjB8r~vUmavQBJ(lT> z-PRh;+gTVigrklM0UysnsLa(|%V| z5&pCUN!duv+7Y(7IO9DW*W9QmF$7JYZ|p%b6%#=@XdBfeGP5%pDJe7M>NeXPtXONI ztr(<=K+^I_J5G5{9Oo_2|7+-*u>ls2lN=&@Et<|z^CnU>q;sI1jh~F|aiN3;s@JN~ z&CEEvJH-oqo+JiMfuyY_YzP=~uS&;zIsj4xlsGyQsh_h2Dy=ApBv};J9hF&Mg31sm zWPT-sU@h)%tn;4V+2RZl?lf*O1d73<2BtsXe_MmkYLbOx4~d_IH`-eB!|;>=2x_R- zS`X*Qihe2)nJ&Ureuvx}D)$+y&ZTW&O);RLKxX%J+Y?GyupCx|Arg`>#CK>V(sBVp ztV8Wl^h8^H11S7NF-Z2|vWs*$23(%&#*ZlYbV20vmG1GRbI}qkR2Cg=u^UPED92-u z+G59!#raaGoWh9;KX11Xr$~IpGG>H}q{V>3s{V3kt>g4kyw<}pji3XRBUd#B!W-El z-=L_2lqKp8Lx+Ota9V=6qm}}J&5;U{2+MA*oB=ihTWyc;W;!LW`yJOc(0lVHsfE)r zXkspoStJsPZ1^NV`STEnTjI*I?cEX6?21DdJTWk5(9~$T-;p(8G$fL)z>$+nArczw z$Yn%^V*yuzM-EtaA0IR4&3zuAB=vSjuhp? z-_Htv>c6`t$8Y`wh2`l>Q+qT*2+ z@w23aZWhzCIsRrHo(Kff*&9Wo6Kgg*U! zKCq~Ii6zw(zXf)`Cwf>7*SzCsjN2yQbEjDYwGLxPda4SCSFt}DVgYwvw%##hKq+#ZJL8KV z{1(3YwXfnE-~1N7`OV+Q*T41+eD!z!5kC6x%lPo4FQXp^On^p;DR;d7_*Z!K>tEvU ze)cnb|8KvKU;N_l@%qgxTyI_j*h0LS`fbdkR|b51}rbKBxN4L?r- zVD31nVUD0)1Wwm7rq3qiax%$rc9>3xF>nB#S_mOLLs^+Z0M{XN;66Qn+ycq$6b={4 z%N!6B+-`^WVwf=1aGa-;T|&s*d&5*GQM7(QnIJJN6(bCdnmK#Xbl@}t*??$Z%hie~ z<+W$jt%nPDTvT&F#|(nYz#JM5Oed3>dYuh6wDa&Y68kzOGGoo?KzBi8MiGr`LWTkw zS;h$vidf1#FJ)b7u@95E5XpQa@j9wGb|2#JO%H;Q%n5sW@v~7H0cO7TUJXIMic?vbniC2_u)xP=0u#f_nCQ*vYbD?veg-*ONACyjGNVS0KJ-jV zRfmkRqMFHT+FLu&Tlc|s3Y-hm@9$<_KW;%D)fgt61O;P=;(j0DxVIwlaGpn+)9>2h z#tqCFb(&Mr-n{Ystw(OT1f|4lX~HyvHHJ2Zr0}J4i1GdX12@>r{wSBp+2AoX96fj> z87%09BSdq7&aHWxNXE4xXbll_BH3GWl7*3BjQd8t^YcrZRR~U8SSBAqJ6rWsPr9LT z!<3*+@PvuSnKmLEF?+EV5hBf_wS?R_Jw(8~85WuR+6IBfud!cGCq1or6(Yi%0|Y}4 zA#WO_*P0qM@$TnM)97)s*EI}359RT!Q41no%s67UoY$vkGcTL9o*!(5ZcH_nm7N_A zYL#-kMDtRW7P3vXP>;Sa(&kpAZGb+bs0#Npx5o@pTTU$tlwmFkqE_zq$Ba~Z$l%Pz zC2ttIhbHuvY1>*W_rbfkcY9DFxN3|ZaO^e2eHi{P9PC03@Pn%#poNJ2tbT1-c(A!$ zBS&s6wW>Z0GqVAUO|7yH4y~G{g+<0=?rpi%QmIQBLer|*olRhO-n4Q7Stx***L`>7 z>OwjKz)yerQ~c`Jzs853VkYqW?|;G7%}k*n+vl*hsjpED{KV3{o!h&fT`8>jr;8L{ zxOvLqS2!Jr2)t!HXIg1u3fDkN9&pJyOcGtFm_+k)qb);Awy2185Y6``pFPI_hvGSh zn_B=CW#)H_j3o11lO3a%g9L#-eD+UY*s=!Xm8Db~7p~{Kh6;s`3q@I}=c(cmW)wiZ z^=bsU^8nSL_n|flgX}1It-qUzQl!5P5*Nmy zTca>$cTejhfq>R*pxm%tpF4ths-c;#EN|=rk!|gZhK$BOnQprW_d{X2s4S$Vz>Gn8W#=xznZ_Pj;vB_;uq_W- z`=Gn_V9Q)5Te(EoO@{O!SZk4OnM2PU$gVxxma975?7U&jH)q8@XwToT%5|^vJ9s~q zYq(BZ4%gdzJ#AvWx1Z6+0s6}AO43JW`f8F|NZ-=ETG1u;EO*^vd$4Dt1KZG!-*LlZ zcavnUoY@2Vnu**EU@In~-uZ24Z^3?LYJe=1S>=jzU|B2rAoH3y4o2ZnDvAq7!woBs z8C1B{dO*UhyY6Y`06*?}63sIT%ppSEx(hQk*TMbJ8W{}fQuTbU4HwmxJ3im_S_8KA zvg$|ZgUC`;!6H>lEJ4ab-e=ZfI&GYX8jdY$o|(4^D1D#NXle=%Bm7>7Anz0mikd^!2d6HIF&{+5 zyFej4<0v4i#%qpNOTmGq04;H>21uOeQgC2HV2u}=Fa~!VduNd*@@zrmPHUqFkp;Dc-h?Y&{6N1$7}FIZfdQIYSm=RIwFN1 z8o28zwoxmVXs$7B0ury`)C@Xw6JTJu_Bcpi;n&BLF5^;F$636hOhg+r+TEooPo)PyAeINFr3QjgNQt@^mara@2cTu zYm5%Y1bc36c-UDj#220^s*-}X`1v1k6DE#$MA8M~0hdGIJaqdbnUAYuMI%h?XTHthj0$f(5qH*CCOKvvuDyQ$W_(-7%{Nwonbm6TAn=KAmgM$ zfS01?dRIdfS+O#KkxqwV4+6pn=lhOo&od0LhS^D-N;e$kkmzV7OylY=Qk{`kZa4!m zJnF~skjIW~fA`3cg-K60_v({wDLQ$Uih5gNIElUKzBcrV%(U&i+ddWh zX>SccD}lKI4>ZMef)^nsd%&z{@#jn*#n%sKF?x&_yXJBI<6nsQo1fh;F#>Iz+kQbD#ele&?eP@zDprg|B_}EBMy$eGA|E z{cq!Izxxe*@%<0+-tj&f-@wO{$0W=FlM8QN{{lbz`H%6Fzxy$M^wXc>M?d~4?r&aT zGJ!eK#D^zjJ`g(E;j{}8P?K=ePCo~-n=M~uQ@r^bu@-VWC|fNbCY064B`pa6^ErM_S||VUU!D@98Q%2 z3_=_(T|b>o^BnTdLB@!Ewy{U$xhq^ZbDfsyK}FFbyZ7vwODsXAq>Ys3&lR6eWND#t zbSJd<;p1Sm^8hy&0A4aee3)k;iL(YOjs*Le2pq8wdmkj|1{QemsGXn+YF-!Fn7GSJ z%`wtN+PCwbL=>AgA7T%gkjo-&#=uWW<^)JGUZVxRT_P&Pdz5-jym|F8KK}K``2719 zKn>^Z7LN9Cg4S@~pmr4oUqyrH#3dX+2zlzv$gMEdDabFeXgt4Kf*3B`zF&+PbE$CQ z2bDP23h#x=s!iirNpjwpE^HRhuLK7g+t0uT?i3>RAT6nF=So}sjp)CmfL94%fuo_7 zozRuhq3U%o#d^sVp|v8-8Z(a8aSg4AE}L%JFa;(F8WXs6^cG@l+UnU5Nm}Gq%UH2h z8EF(Uz8Yp)E2}TiR*YEQj~0DjkHH}f6=*ooJ<7!*N=7~Qfq)~7L?RP3{o0?$nPCH~ zpH$Qfz(cqMJrL}siraC-ee=&&adebsTc>1^3cC6;O|> zNdxDtKg3<;^;%B&;_JakL60zCF!ky!s!7qa+7|i86<>rco|JL4!;N}#z$8SihW_ObFEnno8kaA23~*sF+Tc~ zGJ$=7{`ttw;|GlSp8K>P0umSO!(w?51QgOVnx&r&;2!`V;MVI|ufYm=ku%1GO)D%q z>V7Otuy3>>euy-rH7r}`)XH;>e9Cl!<}+6Cx5AsR!pb+F#ESSvZChhr#j}DavRz8Z zLJN0h{$hV3#`_=omrU7Q`;6ZAK5!!F^4X!vrBPX#qq(*Kh}=8JDec*wImj&Rs(RK` z&%sw{Rn*%?c60!;A_V-ewQJgM? zbX=@`!G#@|Qn;VS3#q2ju*|(a*R^yH`##zIzGftPW~fi0#<= zjP1z0zl9RE2N6LIvnWwphPR%tUPEio0YW_At)7o`Ux+xCkRMR^o3Icor#>4|oCEE2 zRjTj#u$6b&W8YFy9~Nh$qP4>JrAtmL519&&=?%Xa8mMEGVU zUy?XfaR7N#-v-Sq|C2W1iBy9?C6w^T5z!>>GUpVRjHtasIi6x9WGqI-Bm@RA$ODvQ zqo8W-&ydBsxo34|PGm*|6$Z6&3^-S==tEpXP;8Q1r8y{~B;IV|$jB2dp$KhjN4S5T zlB{cB5Lnk1&q4GqYrs8K3!ea>KwrOI`KQ$(x55cd5pP)9TX3B~xh_kEK7(K)oVb znEm@{l4?YQ1R^oeNQarigwc9L5~+s!I-Ij{uVhZhROs||^md-nL>f*d$S9)}XC%WY z8r5TJ5gknT%sj@?!!a@^=5Ty`k=IOu9LC|4nvcXeqebZ1@@E$bWf2w1@gMs>so^|s zg-Z7r5FdP6w{Vg>{X)#6cx3tj5#32gy&VxV;=@Q87h3mwR_OLPgUh&z{$OU1;jRiK z*&=dh1%@dDVu~Yb3QpR3cMn8^1jgRTnoJNO7IZV$a^n27Rd)+b3{_b7Z zRm2q#ySoX78RB0ucVrSb7krxGpoUIIG-x~e*}z@i8uf#JT5MmhNLJNUUk1R?8m>lP-;Sv$?{ibsRaf1b( z-AH|p$^b?ICUVHq7PU#mjYV-?JB6U88t#OCHb`^o2#G*#mYB&RdM5j3EhtnzSTH~o z$KkcFi8_w9aS`Su?jMD)HXYbn5%E~Dn%A)y1dGf9AdgWcc;s`HFwvxI0YMV#83`0L zBpq7&Uc(w*t%8$k-G4_!ZX312mHRP3U$H{@% zHJ7nSOgpJ;HI1Xr3=AoCMzhuD;iw6#TeCq?cA-xahq7i)v0o1|h}URw=C{XasLJzJ z-S%dx0e#jFIyEwB+lr+qMDAApnc^OU8z(1t?aT2QDTe+tNuy#|J!FOGjG+u7XWq|z zG6qzpuO)5mc}YPj;#0cE53T{$9KL=txXy7|=e>&FR>LC91mn4lf#=M&DS z&w+Z!?|kq+zVY?1;U9nJ+xYgkzJafP`78MFw|^V&fAB>-zxO_Fbby3#O~bScQwJ`2 zgEwz}i68y+Z}GQ3`hW1FpZ*xX_|+?X{P9cCD-I%$N3anh#>n@zaG#3rC0^^K0Lj;) zRzqd0-fEr^t0p$X^Z5kfpu27~9*x1uRL?z^I5)Q-%uE?*?LY&8#f6WJ4;O}5i}l}8 z!@e%~x%0f8AoAFwnbZ|kOxw<%Xz|Q@+yrxnYlft7!~PGPJ~55Jv3{`QpjKY5F3DOF z?7-%OaP_`S@2$vYjv$ZvZ%pVM9v`wr`K9Ca;O^%!70=I(S-}0}1-*6Ljsr{`A{1+o zZc&1P6hD05u%a+IS;y1|M7??J3qU1y)?mj$k zPS_aNC~;hhho*?{iMEN!knW^S;F|;Y<8&e`%;V_HBN1sg)aYhbg5PHslKaooa2jjQ zZ%#x+j7Mzwdo_y&*>Y}@1nBG;WFI)Ftu;7|UYJ*JYxaVo5=P%mq9?&r(RO(tbl0%d zIZlI^>F)McQGhZvw&T_3p`cmLAuG-jL5~XLy^8whoDzGiQ)gfX8PlEj(Ywl--V_0@ zQT>-AM2sMmz$K%t(#=0NJb1=x%c?c(i-^l6Yi0zj&NO$AzltBD~#~wnhO4XHl7zg9h-u3 zWgE7@%B7QUIWTm~KU|H#9FXt0-TY4JRC?EKMw|LiDhDVZ_D^!6eL9%#$D%a9XF7m; z@70WvPr!-quAY4moc2}`e}OS$=++y~GGuR63)%lAF7P!hL^MKlNYH z-0b19$8frmi2a`aafq3wQM|-@ZrJXptz7OXh^7i|=dCbN zbe@>QbIQCCc!UDdwkV6w!ik=up*8$^P_*wp-fVVz?Jft$0A)nL92daeC> zFSIZf;b6;1uYoE-#frK?mUwkqgGo4g~nF(+9n1)QeuU4 z2TKiexjiU_@@@2WE>zAt<>#?FrAmQG*LCL6scb0ARA0xzkI-U}zErzfaYW(=*@*gZ zJo*|`i%8{A1Hc>_E?Exz=DYD91<~B`{>fdWN1^b3fTpAf>`K_6lTc#qwnMFHM1Slx z{3hH>iUXEFzHpc@c*Ca1OPO5TQ%pXxs0LgqG#xFoWrYp`nLk+9-#X zYxZt2d{Fa@Uf$eP8TVu1z|6+-7{iAwq|p04r<j_g_tAyA@xvsE~2A>JsXqjE2tUdepO>DsYiL%vJekgV1g56XLDkxfaa`0ZVC}9 zLL&w-3ajUGIsdlCd*4K-i93gsBhSwQ3?k1>)o7@d>wjA%Y1_AD6C(Lq=X<9Ss!`Nh zFV|v;xg+;YObQ3v0wazRY##2Ch`qe`qY!|td#yFnJ<>gQH*=TM@xYPYJ`K2Q{;q81fgO1$rkF9{O|g*0I!{~V#_(w#s1eSn_eBDA8bZzc<(ctM z{RvzV7Q>wacEEbWP)9~8E0i2z4V`F4Avhwy8caOv(R1x4pbcz}V$VjM!NO&UiUe>} zWk)-^yFjKwhq$wh4eekIF~^T*<|&aovqk-LsX7uB7Vi26?u?^(UiZAjDMsBt54Y~` zn5pNlOSt-(@%-L<-sI89m5*nc;*8M3E!7Fo9_u^IQSR_8TJD5{4%oQL0d`Hpo684x z4WrKDoe)iX#~UMYu~`R&sJcA*=G zF0jneCG^wR)$4viWiA>?bC)L=MV}xrVC=&hgFkQT`01m2Zv1@=$6AKa_hrryM)*LP z8F;zB!BoN-2r9e zpriGEtC|<4AZQHR-i^TX{V&A_KqGUza6eddBnf8Rl^pJE+bwEx;a& zucA=eCj@>)U#i70x;H8c%Ng-QTJ*9c!cmE_X%nQqy+lttFXE%$ z`3k=B)vw{(-~0yt@Y~eEa3Ln4z7{7e= z3;ghh{}DggYGIt@7$2e#R$iOM&@OM?k@bYqp zP9Fxe=7P9(^euwUDI~{vLR!O{mzQ$KQe(%QGw^aIWB+RqabuKISKQ1a_E zWCBdMwbOf#2AEB>=6eESpvdI+H=WCB8t&I{H8m3rwh-(^>lw zd3~PrJ?|a6@JfT?>oFd!Vi6XB6RR$cLs@Ih@1X=`fEsiH_ZPvq8_v%ic<=f1cz*so zj`JA|j<_sF?;AbS6x=$_GAU@#inywHTDfz@$WW7Q)r_d9Fy5u}o0wojATq$_^+gXd zjMuMPnd&kJCT7ehtY!+?UqN91VNT!V2DI};YmV)f>{rB|Fz3X$t`L*@`)7ec?}z8! zLn2;H6i1NDR1}wbmV63fml;4G%sgWZ+~tn*=4+_m3#T)YB^l?4sBi(9Q<$8*5Oo8) z+r4o^yX9aMA@1|@%HAL9%(!G?4h0<{#K=8NLyi*hZ80VD+KyaA)uP6Ix$a^5aB-(b zF8cHH6PSTHMi4FN9XfQb<4Gdm4oAMXj_dUct~vZ?G6T)mw3dPi@fphOUKc4`TxKC~ z$^JkOYMZJ>ZGOPWaE%LN%!rWc)obur=oCsYL?~ve9zBsbcQ=nV-0xSBny)c&3o?d< zTBse}=U|+*`~<-xjWxbYYaKnr{6>n~Q%64zzxH7?QH2visK>jp1S>8O@pJxhoK>@U z!zC$nE{1Jri{cpbyWTpU&u3io!Zq)Bxxe6|f#>sv^St49x*(a`a=*_Yv%*~52AM%+ zSOn@ZM&0Y%abRAk{Y2EA{vN*@wP3ySGTxQY-R(p;&m)F&vW7Mr5}oWn;Wo~OQ#fY!T+f9xw}%0G{+w*I z)z8Ts?ZUgqOVX%ZEISsxMZ=*rS2u{dB1#dtg_}EhxvO<6pa=_NZ#AT3mT*3C<(#K; zC104^lCiihEWbsq+9nhGrd-`f5ZS+W79~76en6CoZb&M z!nZ{an^VjRukx7pxiAw}LpX1^&p0f2!+j1{uY#n8q=i4W^>Y?(SL@%Us_o6o3x4^_ zUw*3B^S$@p!#BVAO?>|cKk!_?%~_eB_x~mC?RqUuj_kY@k(uv4Ro%_zM~gEYk)x4> zkzp7x^#8AI{{&wc@Pz^CN*;1%y1VM^H!~u95g(bmNb63;0tgc9>T~vfKQbdD)_Rti z9ICi%OhuMr4b`|DIOqHHbv?RP>P=NCbOv)G+Y;U9`8sP!H1?&`<*i4Kn4XIAjcC>y z6i^g4tJG@kbk&`1^K3q%y)=QLiWLKbQ=~wJE44iwE#ieYBa9spvYml{4Zt{kF{Gm} zuv0i1&puQD`{t<8kjM=BL^mhPNiFi_VgSj;g<;_qP5nZ`x%zVF1)r$qO)p_Wxh&I7 zGnkZ8qR2SpW~ z8(@*?6Thb#&Uh93oCB}Qm5+lWW@M|Di!|NQgg!*o~praIeY_EhA+t`z8SgzgAWJ$-Uq&nVL2OA5^7m|5wntoRpzm# z%3d=Y?%2oHS_ks*6|tT}hwb37mmG7HbDLh>^mGam&;5}OcfM7|b9Q~IAz^@oaydV{ zBa)<^qoVVGYe1HVvW=K`WbY;q9i2LC!9(I2=_I`{y*LQ-!0l*2-UFGnDg!zX#^qWF z8qIcH2MVlmudRlP`R}GcPxUqC;9NEmAMOo^ErhVTN9VoZ5@V=pxV`AmS#ZS&r7Lo- zRX;Z!is>ffXqfXsCZaE7L5ZHLhI=)ab=Ry10$l<>n@#+zftmK;jj@M$r|^fd5uRi8 zTHiKt==FUognPbzMRvfk*XRG1m%+T_>-M|2QiS$G3&?>e6-~#_5Ap289;3^#wvJuY za7UzbcZ)h8o)Kqk=-i8FkxFQUW2%8l4EnN8*dg9J_FFXtsSgYq$DuL=Yg+Y-eL-H@ zXgo)IYBfVBhLiR4<2vRVx%EYnZ@5tP?pgwFo(XK_9P-c5k2S!1NpTK?l#?S5+Djz} zHS~gVwSbl8of|P&IZ>#4kFqU@JJ9#cj0aynEIkB{;fUmNh`=$Z2v>h%AhTJR4I)kvLI_{4Yv2lJ zjEFa4H4*k1Q!u60rE;0K2DOc@)ckBI#HPJpwrJ4o=26C@2}lWzx(_qfs`uW$j4!DS z%w0?5-;t={nK=fOz9uVW#K4X<@g}Zkf2LsNg|Z?7ilNyOkNa{liIvDG8&p}3w#*WZ z%)8o8swTI(*CyimdEBt(UE&5#OuZ@=0UwrZ3LPodyfKp2p}2{ z2=WDmxPtqRDq~RLh!efOqJ9Mv#?@l2i{_|pQBw&dLzI(lXjKJCLkn>vXEuE1{e}yr zM?A$`GuFOd_~#yoe^_J!JJS@NiV}je9wvjvp1rzcqb|+qOM1U!^bYDB+&g+?w0mA` z*t(O<1H$N|2up4B63v>3yPa+YUl-bNAxWnOC100>%rmINDLcct&+uUemj5g!MsF8B zeEjJ7!sPYBy{2biLPPKZO!KVH)*2eMm;0Wgh{R)44dwm0y&ex3J@9@J)!2AI4qct-zenqry4lmSUmvJd^K`!j}cbW&iAGd|GQ3*L2B zAbhzsj6Tq>0f2CSz9G?sChDN1=7@i9qjV>GZMy_umJq`<7&Y{aN{hTrF5y$stUTvC zg}6k=bg23@jhr0d!blhKy})OP(XGLT ziy8ggxg#zb*m;4`+k1?3_U|E^M^YF>{CUyk?$#`I#r7aP316d+7y|9acjH~3R1I;Q zsb7ZT$7wl9MQbh0KxWHY;X<_%UUCfOnJFkBj%AkEe|rcYGf@2T_JG=OB(yC2{OM;b zS}=a#!^aQ!?XQ1_AAb8={F~qXTm0_#e~;h){tx)Ozxe^b{q-;LoA1BJ#}B{2l7;ur zpRt0n0=WTw;=VuQpZ@eu`0?kT@W+4tBmV1u{V(|EfBqw6-JWmU2by{xuu*e55k-V3 zYf-A4QsM%vB1#1M_xXHAJetHi6{E6n`BLnqwj$rWIk{tvj(I=~5J#3YAu&ACjuCxb+V#SH-;gCmM`U&p3nLKRCmB%^#qDn5q)lxB*Y1^Z zkXPx5<4yBcl3Y{3MNv~#?H;wRECcn9E25XYKl${yCTcKtvHX-(1hC#Z#I|GGiY7uE zx1T*AwS(l`08ZM-?Y-l$+X)gMX`X|M+dtV-5#Bwrg=LU#BdrS{-=ZX_H3nK@I;R%k- z7XZ2zkR;MXzayeIvp071Ofyd0Yp6~8G6NnX;~W$^E%qC)N2ZC#MRu>t+I3;xGtRhv zw(LP3T5FYI5^9hX%9#P^RZnFfRaDTgUPRUGxAe6Z#z-~a8Iq0zU%qeR*#LgY20rsf zE6bHK0$Vkt&W1(=Skx;U+sV)?ax_8kjP9aqCey_V&y? zinmIsz)O=f4+V}|;84i5W8nFcDjfML;|n}DDjTMpXb0lm^tiv#==Oyw8swRy6@#$P zpFiP`fBfT%i|~K+pWpoEH~7`Beua5Y&_zgs%gaeE@mv*OAUjJFb_{pJ^=cNl6Z-1U z1`IDQ@5Brje&oosMjVLf7}{_&p>qiV#HO`r%T;3$0?dqRzo(cre&h9{UF<3n;GXY zlMv0u25p9Q4D3X5FKNdB*MINl_s{s#KmWYlg>lO`@Z?*wjHMu`(oR}sr>FR*O+^Q zjD6@9Az51csXL?!8ztB|jB$`swaSYu`)v$^5jeq35z-TKQ+Y%_JZdi#mLy_mWPmp! zKlHqa3yP%qg1`2L?EY_Ki<~o8+}C;rDz|mUO^8a>ugrAhfbC-6ap5`qrdW~bC8xgj z#r%Ecrl)B9;Sfyjrb1SHOg>o3;>y@cXp>lXM>cy*!Z}c-qZZG<&*4~fy349-lkWIU zSa7sxx~!~3r39yDQ4mhtMOgTG&_N^EgKCXjxE9aN#-oN?F%WG#>pX_1h@qTPkzx@2 z=gd=WQ4bgsNK1v_?-T&^jK5Ggh1Z{NgZ-HhX1|MpZeF`?*?HMk2h4QZv>{ao+H2!{KPG_oT3h>HH6IRS^h!WLWz%-nmzt z0|Fr|haiPgn3p69MKvagJl8FSB1D8`L62&!GL#eNT%?<7)*QmWFPvk3@IGA!T=#*D zYLBQ|hyootJYW6&`7D8?4?3M(kQ4(t^6+dOvQUd=Lq!3pJ9*6CRV4s{o6R8(vu6T3 zkRsfWC93e}mnlUARE^D^?&ctBWK@RxzPOb3nJ<{)Gt1}0C^92c2&r{O;Be9r0c|)I zP}ahlTZllppQH#aDQS8l0r%j?K!tp#WA99dR*4>L3(+L5nL7`MJ0h0Ue#^w59(mN< z;@qFzxg8f|vUZ$GG(E*!JV>KsbboFWC9lhKR5{ic69b_;a#LeJS{hlAKJbGPB!_1W z6<3rbh#V>;E$v=+oqsDbCI{!?(s9vCJR9-slI^oj4TS{Y6d{>H5;Yr{+DwE_du`1j zLmFmfPQNbE03%KU3xhea+bxjkM=ho9l4ka%dpewxPSd#IQUZy>NPIYv)Sq16GSo40 zwT&3J7^eBqbgt#Y*_O3RcNZ7|3x;JAM(z~!7!YrcAw;*HGq2&W9q{cxkeDk30*%qg z1%Tu_2G8sb$E}$+<6AULnS4;^xOf*4-&4?s4>LLs%xNIB5=6Z{E>QF5&P3f|$QeOJ z5Ey#YVQMbcQbdloxu8jw_mZG4V)B7i#4?$?wp_RJnvq>^eyshiIh8;&qg?zstYIVA z_f3OCubrvsH+(Iq0+ViVcVPx8%7H1OFYj}b#PaMYS#OFP8dl_?-*e&p{oRKdqd`_W z#u;jNTmuxLB4e@|GiHeCUx|>LP`TDDg5fqt*o#1vo4b*EP$M~F%(Ayy^^Un~3Q zzNdFzcRYHB%PIZEI0hr4XjNBbIU}QZc#BfAKbJoz2S%(eHtpg1)xd;10ad~5gpk1v zqhB83xdiv~20-}m_7UHG^Bq2X_<)~(`W!uCpmnPL(IbVq001BWNkl!sN!>GYAR>vldi6+w_p2jZqA1Tl2cdVqaZ>re-FPrim%mpwTfpd-QCa!+jWw5YscT zw0ab+cc%mzVYCsb>gZ{Zudh~-cyT_^=vk1#G>jx`VJ*QmhM#rR#p=dd#x|ML1&KMU z2;qu5>s#b>d+jvh{j!L~QdRVEfyARYdLM;AZ!Pw$aDgX<*w5Wt@Cd^ZEzAeS&c#wn z-aqhXBXY;Nd0P7NeXfN_4?W^qj`Ivki0A`!Fm1C2JQq7>qGm0gFT9vB6JHm*7G zcJw=i=C03fY`Df1gi(oz+sH`|!vi||9vLEyI$6`vSEGnWi!+esbxiZY8L1i3mjv&P zQSPzJYlnW~7VXHa(Q`N%3z8ng-aS;eLI$_Y!chU+Zph^@)eG94{dlS-%f+NS)c!2A zEERhPRy;FO?m6p4K67!husU(3m4lAB$&qF5g?AJRXn#R<@`|C)B87Qlsq;|WI~Q)Y z)C!vUMszfP>1d$shQdfPvt4gN&>&?uN$W2Wp(^`V}_xG>r-tMF0`(J+V zI6{dHpDS!MVl50pTE*0v{c2x0EM3JN8R=gcQSc>Vcz?!xqxLYiHAlAqTDifg2+Vth zhR7U@Ea&iQOj&>ckL!x(DO5?vFipbgM_KTMOE3!)m@ARU_PUT+nb}RHendR57j7U| z{^idH;c&@+-9Pz5&>uxkgZD-zb;Nt9P=x+z86}sOuX3y-?uPh8Hv$GYl^^`AF z0|TB-uX!Lj{>CXd;+Nr=U(@G(S0e!Dz83>w%4UVVl3jA2NL6`?8DN{l;W(d$B?4Ou zy?J)m3b%-T#cRsU_|30>16@z3e)u!T^^QqNipw54gLZbKuQ5la`AdGaz6`gSGWvyf z-WeNY88kAA&Kf3*(o)fqzY7-mL}xDRnU7s)x8vTQx#Q&)j_0F@H}RRy*cPu9+DrZA z#c!(yM>PR6?uHLq4;^l8!d5-U&<`+gtjF3~`+B+tu@Ogl2-fy@B`>yPFn(r~WwTyX z9WhBg`-9g&{mB=PGli=5y5+cu{V`4=3KKvlyp$VocfaP2!+rp@q*|%h~-Vis=+>Qms4gl zH_vEe-NNOik@qdA0dcDwX)PCPBHrn6@L3$5dz^nVXWIgoPX{$3U8FR^_18Lj-*sL# zCT(e;<3d1TS|VH@kl2oI$stY*=qS!{e$Lg(zZDTY!+CCrsTZ&9)gl@GfL4?Y8iHSG0=|y05U{(VOo9j;t+%p|Rq7>d5n~Pl82Vb{nkX{(pdeuM{LJ4jy zGCCD~JYYTkU4DQSQ23w@Q($vqy+2`7ylEE$#KPli!)Ogx?`SeG?`Mco8u;pdZg0y2!E|D-g=sMaV!|}>=5RDAGa_u> zg3j)GQ&HUS?^rVh_aQnZ!)Vveeq9Tz`(82E#Nf9QZdv4_iYY7xaL>7X@1%~m$b}^{ za3efEzCj_dHC^za3?A;-^jzB~mbpkz2|(|jU?B`zf@Ut%W<+e62r#Wgi~hcl3o~S) z5BB@aK@Q5Orw~8;5F>_v&2j6@-pJpsX&n273)RV7jG@mP4UFr0V95mHxd6Gl_;fMX zP%*?GPS&9irS|Gq-E-pO*@2pLG0_2i{%HHJil6X#yNmq3?do=ICR=hYXjIQ z25#Ata!QSbqkO9PUJ?BfgV%;x3uWvG@$Ma_AR+rxjT!S;o=EP^Y@o6p0PoMGm^UrwRpD^W#=kpWpPw)8r(N< zR*g*g6|Pi-F(6|Jsy|K)lt415E{$Bo|Rb#Bh#>yQC!o+&$O+B$((4D`Pt$EiAGN4S!<#V7ZS`66<82Q zvai8G+(|NpMRWtzlR!`+XhoH}$Rup^c>j}Ho!#!<= z|Bibv(G5Ezdj-BPQTN%f+0TZRT0WoGbe!ja=?FYR?;RgLe5}UYSAuZk`(OOhQGtP$ zkZAI|qRAW9E%Fsaw(~F>HiB1Y3~F%vS9mt;6%V%NDxpLk_Du~+IY4dkoW~Hxyx^5YNK!lg9t24j&RJ6%4_*7qwJrjz!hDz;dB!ATb zdZ3kaU3x**20AV@@HzPzzG8$Mie!Ddch)2|O#d>^l?9WT6*&2!EzHaRf+5;!&gU9ASJMGR`K)}#Dqj%oDa zP}a=t7<}%UEYV>Scs!@3Otlihsd-aL#Lz)#y`wdQF0Oq~0*|+rKpNw5U7PBW)Bw;S zw%7{n(FZ7MS*T)ay06>~lFzWF_yUaHH?69a=u>N0?g9xHetz@KHz6bt=oBmyAI3+s zeBBd+TVVjlxXLM~A$+LF(}VTDO;emdOGl&)h(Mhyf`D@P!-+eJXp$Us^3I=^ zxn4xPxt8Sbu5;0`cx%)cs)Fa!g|Yc;_#i+F#hqf6rJmnbx%G6M+u~=gHN6@BcpQR{ zQV7(ZoacjWbJ04uq#V!tf9-x$pxgu5F(UkI0o=<9v{VXae_WfbVq{ zV2tYm!3QGQGqA|K^UPnru4^rKU5D6MPnt_(Jl-CTqZLED0%4i1Dgy3#lU1g1WQlLO3fbst!1u9qCHMrBOB(YfKe zE?h8teumQ_X%7S+9P6rvsfh+*B+fDHj#eY`VLk60dv_eI5>O{5RMvD-K+y71IKG|{ z89@eRgHeN=<{R;0j54s6H`xF{rr`Ph#C$%z#<>RC+W?R5O{--UQG^i2TArZ-pE#QD z+4ub!@9*yrzR*U;XdSQ{)Z7^)rWoxy1p1lTOeMOoM3Dx1G0(zl-k73(y{`w*fXNN( ze#d;jA+{g{tk0io?`j9(CnHgG`P$jY5$QgJbqbi6U}0f}O(WkOC)&8v>(&WsKKRbH zwvi8MSS=i+j0KMofEqZ4+9y56NhSb?Sck~7h|7^PCq93E-#GU%e0XIHsQCAg1+8_{ zdsU-%T#pND8dOloe+vhWDHkE}x~|yYSM^~;yzAcLJsXb;A3l6QkF4~^8f0%zq5f^FB~e0PcI$yD;Z78q2=7rVt?!)KLHh3fLRx5<^mI zr*zyOI^WazmGTMQ?@gdo>7vRzHSF^=@%|2Lt|A| zHGI|!M3ET}kGES(@c8)V1G+#xyMvK~bm9WHHh|tP=-tuK@cplTf#3c8-{SB7;Sc!x z|M-vi+u#2?{OVV~#y8)*p#>7$){P~=ZBGa$=KDK-{Nq34r+@tu=K2i5#Lu68#QgNc zdSAHj<-LOJSucZw16(6-nX!({$kqdRTJ6!-lMN)IYJkQGHa^4ew|QCs2Kj$ys3qPGDs zaNiT}?-SpAd*K=bpy>-QX`QoMyz?vK%F^)Q5mVdH#SwFhBz z%N3uMy+sUxEYEO8^D`ZmfgkY>ft`RL21P^i^LMmWVxtGtBzmIyV%|U!)W9WJ$MpAi zaQ8SIk(Wr5KDx)?M9ie)^&{Gf8XSxy)zg`>LR>t87U}{p3Df3M7uSx*!=sQ?E7P4~ zJtaleAo<@!o+B>8vCafprxB*On1aE0>n;{pakiGgoww$64QBuBnJcc!+o&3Ip&0^s z4a|I=MNYxE6*Yu$-yXNHn)lJiHSp>A86e;q4~%QzxfbsGiTj>D#D04e-L}PZDq)=P zp}ECp^ykuJNDO0K(O+E=2e5JYsteDk!M!$bG5Ei6aSx}wc=YD*`eDsgNOgp>daVhg z=5)2W@PRLIoO?y@cvpf<%-*jWV+38QSN|>NmZ~8zgd_2v_dCWIUc*hRIGV@fihIP+ zxuA0u0ZvpPGI8s~xE}cS+mDXYzh@bfkaVBueLd$L!~#DzeRw=D=fpi{2;3gH#^rmz zEJxe7hA}cmLigU)T8Mah^p2#+K{TNHI_|I~=zNP~`g(8``>jR>V!gT}0R%%(O`BkG(uaLQ zOp&2kt}wC}bX&TrPsO-ahG;yS#}KD-S}gNi^4eKFGlf;jZN_#!y4cqr?51GiH8(jk z$qr!+ZG23MghZ{H)UWgpt$aI#E1Zlrn?D-I8X^safy53Rt2@*k-7BFG_kuZbtl7YI zj1d6pkwJ}UW+aN&qPXlk@9M~#`Kwsa&7BrYw|mhyWgqUG!%8F1F2aEvq{N8VfgKpF zL$Lf1I7SVN37c#{X0XVyG;E<*9)QeJnYl$(ozMK*P5CHCQ;<|XyuIO@j~`#My1&Ms z$Mx6)Z9ZI+*kS~CY93;RRI;WzKCoLF?!%pvgCG{{A-Emn0M1P7!kNDYWG7{Xtznb2 z0~=+pRDr}Z;UHa<`^WG?(XpT@5IatbC#cGl&us9F0x024INeeNc?uf}6<%)NKnouk(V5YOaHOsf zn|Lm;)w%)QP0@~@QXI#e#FIUsQ`jN;LJbQ`)SBhvT6JF}a z!5eLfgzMovO{IRzIwxvu6FcHzw%{b+z3aMm7G18>`Fq1<%SVR5IrQB%&Hk>kRtPG_ zzIV3I7||MsK_V}D->=bniFaW@4*^rD*~9skje7}XTdJ%xMoH}u55@NeS&ArM97wVrMLBl1a%*ZD$Bygb5TdQ}> zYu$z(8OK%3)mfXOc?%IhQLQ<{f8G-=e>V8GjK(v2Byr{hLpnga=64N=3+V@cFsjm^? zU=WSk*@`qHfrK7o_#Pr!*|>?C_9k02abnoX?89UiiG{;Ip0DS9lU=$!K0y%j@AgzDKK4dBT7df53KdXz1+Rb+&phR)loscW)*$s^0eImS5ND zSpXoBa5WG#1W(y`&&=nmcMx?SNc4uKgbuCqb2+kzVOZ`kREylx5UU%N_>V(uoAa!B zJN|IA4sg74AP4~zx$~^>;cMm9(Efs7$Wn9G13F@eceW zWV=h`pRcw2-Xk!c>P{gx#WIP8oqFD{YOL!%Xk1C+XdaP8>}#pvj-xJnIzwCX7re zU^{!Z8UhUcqHmL=B8`mi55fh)3)5N@Htief8+Oa>cmX$m&&$%KWKAPaVX&>Ae-JBj|LDk_fEFeT?j_4LN z8tCo9_~twO;rIW5fBc{R5&!N#{sF)F?GO0jcfZ5OU;HBIdlmzIiAWH`FhvXc#sh%% zj;9UWV))SB&{#1^LKFu)qvzXtgF?`zxCnFBpt8tp@v~0Bbv7h82wNtCwZg4Pn^ubebU=&0*gs(E0v%!~`GAioxg``U z{-(mV!5g=pXHoV~p%C=wg{lG&swlDE+;Q*qGDFS#kvbQaL@v4o1wmW&xf&RQM+Hk8*3fuFhPb#uju~np4(tO= z9U=yOKHWQS3hD%H(es55)u$}40fUG{YPHYg+D?%H-A7#Qpcl=#z~sZOJ_cB0^;~XV z>FksgQNt7ial~BqTsM6XNG+(u)+-W%+37&A1(6%7PmJq3eE9IdoYsW8TS`g&?Tr0R^9egw|pw(PFK%Df*h3mSauT%)Xs$+}rTtwCA-xFdetws19ZTR_O zE~imN{gDx6iOxp~Nz8?+>z+=yBabSq*;Q+i-99VU)hZ_Ni@D{oZ@PdhT-I`9&Lrh* zhc!j*ZMtWGMpC)=Yx&^c5$}gt2keM?Q%rGzanBh{^ya+o^1XLFqW_=m6Xme9Ft-+{090WYrrS zV|YYP5pm*NEfV*Jawr2Mr)@6r>yUFWCPu#+mblD5ygNQiX8xVcy3;Xt z=BKz?KWFKg!x|Y{;MZ({Y`&*3x3RA(8`8yzWInB ze)!?5U(ZjUKSv{OyIQ!rgJ>&xv^*{8#7`%2Ypz<7wE*PEa66|Ycpc^bUh+a<7Tn6)csU3%oL}tbN<1RFZ_~d)+2a|2hPqbOC z)RC|KezpuNNi2)VW51(M~p;akNyILB%ZgHXhQQwfJM{0me;%&vCcMj4D0z$Y9goDFv6t_&9#`f(i#~7 zb4EQ_VMI^LN;Mf0)lc|~0wrdK#*nR=$gr2cPoO~O)hiSCI2uNQ#7_5g3LN+pqcTHf zxx-V_IUaO{c&<9LBUMEqB_wkEnraNgBJ*&?86yYHBXh9g9Fmb1UOR=`D;n=PJkQ#s zrK9kOkWdwj*ncZ$E#85(rW0Zg_uxLa__g<8h@i#$;R9RS4!roR9M2qwu;e6dIQF%b zlf(|qt)5XtIY^Gi8er%_6UYb^`l5kvv;~DxUDdFZ10Bxc&>$Kitc!Ee@jd`jZrJRf(XHZL>8%Bx&>OBCc-f`?jJeY%s1qRq%V+Ll3M!R^7>}~2 zR1IwjG;@o!bX>#p^fu&*PRgUD)t<}=m?i*vqPQw{T;(Kz4H7*I!uDk*NA zxOK%qAB8Lxb>y?G=^1v(?=#apS%@orA7XOEKcYFR)S%QHw;vAt z%(^Ag5(cU!GLrFlTs{DZ{aj;#C8Kb9i94Td)%mA#53=`>RdYDlCGxk;+yyfl`#@${ zn4~;1Y{#?2gOEdNQiv{C3n9|gFy1b(xrm8lV5(*naj@3%K}4-27U+B+xaLqJOjVFX zN6FMzeh$RwA$jMB)Il^ar>qcJM$Y9Jp2^)qtU=ykwQ#^08@PL8lrry-nmaLbNER_F zY=ny&76H?ISRRaO|G6oitRa$T2U|G2u0C*QoQNt!rn?S9FqrXiZio;Uc=Hx5xvTj# z=Aa@q!gX)aT=w&FcQHWh5$nEzwS17$2gYbX2*3<3z*#ZiYOYs@l3}X2;4SM5WWQ^L z)10f{B?OQ-O-ttT|11|X^%l+dIYThv11TTWZU^$&2XNf)3}CU2Z_ACoU)vn z*&Qi8v(BJDE3itSaE^OhpiSrWq1ZV*&g+>J0N)3^DLi8Eoi)rkKz9+$%GbHJDek~hjFS9>q7g#O1!SHo{F!14|Cj$2|NcMx9^d}rTYU5Vcd*8|=VyQCU|0&TxsA~60;5A)!$%@KKU{d;Pdw+u z^ZCT*{;znBpKz}mpPujd>HQNv%Yt$DIxYlm9uMI0E6ej|ux!0JQxO<#wG?-EfBwyd zM}Gaao(+W9yk!iAVGs4p>b*#zNbB7lkm@lMy){s4z7AWd3B6`*9zOsJ0Tg5A7CPG}TcXh!H! zYbz0+^WBASF?`PVGW!F2fRID}wthvCla9yJeM0HrRh=U=W8Uu|e8jjK9*+^VhE#U_Ia|qd z4#j8A!8jBpl26JSvkM`axMI~bjhdRVLK#WoBj4;if*$Y%W?EZm?^T+0X>}2n6ZD5 zn?+UC#nmE#iw|*Qyh~!VW8v!iAgI?UfvL#yesr84wQ}RVuk8dY>{wrAte_Y;LDpkr z^7=0o@0)N?es%i!Cg?H!YDN436NEhaF|R8!g6<$qCfP815N4ZTqcUGiHaX8Dz+-ec zvd9qvGL?vV^Lsz_>2#myKlE`yOtEA-d%ps}eLTGl2}WjN7Mi`c_8V~Q9f=AEN%iVluFLp@H|oMI<&cyt7P zMq_r5?IJBxa8E>VIuuUiaSo+a^#yZmnXGhVe(r+S%6*i`wH{5cY^G`rJh?K#D?2n4 zl_x43s<9E#%Wxqb-(&Q8(XueDMo6j`Po$EaX!vaW9q#yYG!VF1sZjid#|ug|n-u3T ze9b!?F1<2NPccE}ovY#{+w~kSCua4phBUU_Am_||5UOI{5zN?4G}?+r!*<1{xrG^6 zD{<6E=4(%fkK@2g9d>lAeIscVGjJOBbCELJ|16))jiB`F`r*Sz{N~rc{_5BA=bwIh zS$JRE+(fVUz3{wNj=$D@C@0a}POL2c3d2S^)Ip*Wm~lEl3ZY!xnwmO@X*h)TI~WCg z4%*{gZ{dopXb7evUu6DUIx3GDR1qd}@NF9Ecjt*f$hP~u%w$x#gy}$5XynP{U`hTe zrs(zlME}tIph8?jdM4V3_WweY8x3`+8ibj^}`X!pd#WRFiIP9pF;r8uk?6~ z6f^9MXR3n@MV>0!aWC1OZ)zI>-;TranQxwTMUp`F0D)@gR&&?H%2q=#{1=8o-_{`f zY%Im!P25@K5!%j_KS$WnEXh#6jpmU=MTuTDD^-QaF^I7*1xcL`{qsmgKq` zt{^(dM0T$AhbSjeorPbH^(%)0r!a#8>wD50?s-?8d`1YoAWTCI%wNO~c*ELbRpwkp z`bjcVODq_02xbq_S2YBvkXT&J`Yo`^hUXN)l2wDfR3zsCifh=n3L}@z))ubXwY)*y z4k!1^c|`+E9b!3u4g=-qqtqCV$gA?aGS0Wyb{{NIu?_Vc$G`?r&!pFfj);kTHx2tb zB*uN?|8P8u{<9QX`CtoH0#u65lpQ3S{N1l&BnttL_-nFb7X2LpKpNTKYnH1x#at9w zu}eMEF9mfiL}V>hG3LU?ol)O*7Pq00hfa>Ti#~GJadke(#)WF-Z);%OQ*`S}a~GlX zJ|ct8;4zbqz;q(VCOnz##z)q=+2qM}gF*y)l0huRNx4QwLxp4bo8Nh3&1s7Z8$-x3 zqxj1bB5uDK{8@%7voa^F6?(-84ifplO7Mp5U;gd>cA1V7QzyXHL$gg zdEbt)wk<|ZVV1%jRP;stNa47)7~rDsvG!sq7`Q*Lkr+I4wzC|qxl zY|I4tr(dym`rRI_gD-cPi7~XBJG)|FUro6q1K2F+LT2dKn>Q9kidH}=`?kYeP>9nR zwMPuU`X~WNI)BByaXQ9@i`h}vt%27HaS{RC++p9MWhz>Er)nC*=?^~zDm1E%8o7ZD1?&{WXby)}&JodmHD@+Zt3=0#`g=Pk61e1jod9kHedUs;$hSbEovr5;^k6O9FBG|kJW+_DPf$+{c(^3RtRH$+)bA%5cnHrw! zSpy4+{!my+9S6Q7-u;6bhcB9=fuHAS$e+T=%+fBrYn%(18kic4HT2IrKFNo31Zs)L z_dR=s>k_6hz^B^BQ6jqCq(4nDX_ld))%dU=o5ZM~i|B`_RiwgAiOvyd~*2&A}4UNs&~n7=G6Tzf!N|}AxJ}TSM0~K~dB5YQPoK~p1N5nZFYlFKj{)ff zZUP4{5C#YjB9JNcn{RPH-#x-Z6rX52A0nsNcF?6FsU5ic!Nm)AWBJX|-aP+8spYtqjL`;jX2p8R?rRo_|kayS#8}WT)DTp;p z4h$3VoaN!94->^)E}AmK$PU-22{{GHa6y~~;U)&-rd9}IkGAHh6I|pp<1F7F{YC6RA!-xx+}}2a z3j!?$Y8Kp--qFVedQOjGiyBJAdjMA(xZ0?JwMFET10|elkU7+nbu2lRM~!@t99iNb z@0jb|#lx-P8W)Hu&Yc`Yg1%=wMTu%5q||*LXaA1ZcmQCJJq3a3ASB0LZ>CO00PuKR zCD>u!yG)%ggLVoyDX!%i$ZvA=PGawR-T)?RM6Q_*OG|s9)Ed#s{8v+`D@&0@QBA#*(5o~q{$)--Ao8IM5>EL)IixaaLc z?GOqj2@UGCSFo>&q+`7M2GknbF?ZPprl_f!*J2{x6Y6aoCR(jHp%ekGSg(i~ZH(CK zL(~~(A7)_msK7J`3fuslUONT(N9OdianuT;5~8P!Q;>)^bGl+hXaxaeEHfO3FT4tXFM6ESfjkLVaS zq!PV1&sxh243nMZL12nEhx!F~QR^t5>RC@YKagObIls2dxoB)N8~FHc5`6C&6_f7abdzmA~&Zs^gi}`nFIpvzVXK5llvz3 zzlvpATC^ALr-YcI&)#73w3bF@}2%N#Z?kvh;W9jYe-T; zgUk+Iu6!MjN8oulTx$AC8;Hi9niLTP;fT$~+xa;I0rO0JxQHIeL#_g_$PIyw zGTqo{m7V#={m5@GWL4V=vaA7bh+`)3t61>?@M3}k-NC3IgINlM-Jkpo^r5Glh@ew&N)QqE$FXBI_ z1b8W~N`yN_gh`S{w0QA!z*qL*wQ&z&n}61m4v|d{ian%o+*zq5;v1)s4J8~@+t>oH zo6h(FjaXN2V)xdaW)OtN{q8yrjhHa5E1IkVh~w&!j&9vaL==cpVqcG!c;?+Hh}oZU zJ8CFgFxjkfr0oc_zSiKFs%c{J8K|1fF0;}S;3U;*#vzZG(MR7RvmkePt>ObSP83_a zLP(Sus^%ELKo)c4kCh8sLLg%V7^Am_$J<-g402>vZ|vR*2d{eLvJWT+T}i3j9-`s{ zideUnYGr+tN~f%0pd%{Bv>V)Wev-{+j9 zf~;C^-MQ*m^l3M&_qaD&`MD|z!7BH32`bW6Xt{@k(7<9)j1i3VziYUNiOU0SdQHBLd4Nav0n(EV?k-z%@F?$R@IT<3}4s zJYZuy=X6)%<++mF!jUEJPU2kN)W@O?4V{`hdLp+E@GS6*lxR^)5|14xBvwO>B{RNT zI)Y*?n5*tnBdTbu);q525gC0P5pxss_J-Tg2d+MReQgT47f5}N5s>Fq_6Ejq=i?MK zi#%yn%=hU{_}Cr<-eB+7Re7rsgb0oIJYCsYfejvxmREwxjh;e9w-jQLK#597vOG%y zOdaT+DZ8dXr{8z6i4SiB z(DK@Yv(Asfsw3(N^Zni;8X~Z{6HFQ~D#jw3?agH(E1q+9m6@;OnE~BhES4g^-Uo=? z!8k>5-wPw6MS26;$B;o%gHgi-Lt2NipReRrTo`za3s(-F#p9A1rNd|U_2#^Bbw}my zKARINu$DK0TgPY@9^>I6GG@HJJ@EYe*#}}~;8+I;Ee58FwS17?8vMO3IKGBBmWpoj zxcuE;qTZCxh&xqGaa^f{xb7McZ=i;t)65&cjT^LeOt>(qg?k%lkToGPVNXHp-b3*I z8}PoK0D$LH!-@CmAou#IyD@DU3=-l(f9$W`oj?)7fjMVkT4x~8FMb>`hk%k}o0%F6 zgfXt@rEDQ1AMuA-(|P}qOITd4?>I+3pHG+?M!fI$AvUb&BF2jle1omB7E*Vt5o5Fl z?pMhR4S+Qc@eKPt3GA=j6V&Yx7al{b#(1>HaVAn9VA~d5630*>a^e=zJ|Mh?W zpZNLxU-19@m%qW^{Oxb?!{7cE-~IACeE9glci(=Cab4*B!gzQNH>-hzBnJb2@$k&` z_xp*fcYJ(%V6Lav`vknp#J@g2;ZHyR3x4|fXZ-k2f5h|0pDJ5?jE?@e&`j}pJ~8!n z%z0#-xAt&C#hg&_Az@>SVd&mNLx1Ss|LV|XfH9U#-1iERmSMrkVAr_NF<_#&pZ@$p zoOsvB-=&NlnyNq>zUK}fu)@41Zs@VM`&nYCK2-;<34MGgoA=o)cSj`VKK5EyO^9D44l2poDz8zVE<7L2-63rz65 zZx{hrW3T{Bz33RG2EAQ$YYVV81vk6l}S1$3(0)snafH27Krv_D$o9|;TI91%@ z0t>Zp%35LN+yQ@keR_?C>y2?e2yY+W@b>l%#^WQv4fhh52}Wo1X1MP=B0vdOWLIkp zV8^)pOk{pxdAx-noB`t!;HU80#ed@0J+R|Fh#8sXo`eZo1|B_x3vssY5oJa|e;d9> zk)Qe3Jst7h324I!E$re?hC8fX*yGfN6rO=ySXeY+C|aW;y*P2q9RGe84mfb)*{6Oy zKKOOdXxi*QsA0}DlbJ`I9>3GfdzpxHB{Sje?ST;@caK@7a5@9i6wmi(2+g8z7CqbQ zbBJP$5#m;bvIL>cMY7x&SL=@GUM^U3s7sK8y7yVs1gg9R@G4+r{8Iz-<0VF-&S8t7 zE$P(abyhqJkFf<-vZg;<=DjP@Ms|uKLc{->Ve( FgxkT{}}CC!f_ATS=| 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

+ + + + + + + + + + + + + + + + + + + + + +
${value.data.address}
Recieved${this.formatValue(value.data.stats.funded_txo_sum)}
Sent${this.formatValue(value.data.stats.spent_txo_sum)}
Balance${this.formatValue(value.data.stats.funded_txo_sum - value.data.stats.spent_txo_sum)}
Transaction count${value.data.stats.tx_count}
+ `; + } + }, + itemStyle: { + borderColor: 'black', + borderWidth: 1, + }, + breadcrumb: { + show: false, + } + } + ] + }; + } + + formatValue(sats: number): string { + if (sats > 100000000) { + return formatNumber(sats / 100000000, this.locale, '1.2-2') + ' BTC'; + } else { + return this.amountShortenerPipe.transform(sats, 2) + ' sats'; + } + } + + onChartInit(ec: any): void { + this.chartInstance = ec; + + this.chartInstance.on('click', (e) => { + //@ts-ignore + if (!e.data.address) { + return; + } + this.zone.run(() => { + //@ts-ignore + const url = new RelativeUrlPipe(this.stateService).transform(`/address/${e.data.address}`); + this.router.navigate([url]); + }); + }); + } +} \ No newline at end of file diff --git a/frontend/src/app/components/transactions-list/transactions-list.component.html b/frontend/src/app/components/transactions-list/transactions-list.component.html index 217eab7d7..bc38e0dd3 100644 --- a/frontend/src/app/components/transactions-list/transactions-list.component.html +++ b/frontend/src/app/components/transactions-list/transactions-list.component.html @@ -23,7 +23,7 @@ @@ -214,7 +214,7 @@ @@ -353,7 +353,7 @@ - + +
+ +
+ + + +
+
+
+ + + + + + + + + + + + +
+
+
+
+ +
+
+
+ +
+ + +
+ +
+ + + + Error loading wallet data. + + + + +
+ +
+ + + Confidential + + + +
+ +
+
diff --git a/frontend/src/app/components/wallet/wallet.component.scss b/frontend/src/app/components/wallet/wallet.component.scss new file mode 100644 index 000000000..6723cffbc --- /dev/null +++ b/frontend/src/app/components/wallet/wallet.component.scss @@ -0,0 +1,117 @@ +.qr-wrapper { + background-color: #FFF; + padding: 10px; + padding-bottom: 5px; + display: inline-block; +} + +.treemap-col { + width: 45%; + height: 300px; +} + +.fiat { + display: block; + @media (min-width: 992px){ + display: inline-block; + margin-left: 10px; + } +} + +.table { + tr td { + &:last-child { + text-align: right; + @media (min-width: 576px) { + text-align: left; + } + } + } +} + +.address-list { + width: 100%; + max-width: 200px; +} + +h1 { + margin: 0px; + padding: 0px; + margin-right: 10px; + font-size: 1.9rem; + @media (min-width: 576px) { + font-size: 2rem; + float: left; + } + @media (min-width: 768px) { + font-size: 2.5rem; + } +} + +.title-address { + align-items: baseline; +} + +.address-link { + line-height: 56px; + margin-left: 0px; + top: -2px; + position: relative; + @media (min-width: 768px) { + line-height: 69px; + } +} + +.row{ + flex-direction: column; + @media (min-width: 576px) { + flex-direction: row; + } +} + +@media (max-width: 767.98px) { + .mobile-bottomcol { + margin-top: 15px; + } + .details-table td:first-child { + white-space: pre-wrap; + } +} + +.tx-link { + display: block; + height: 100%; + top: 9px; + position: relative; + @media (min-width: 576px) { + top: 11px; + } + @media (min-width: 768px) { + max-width: calc(100% - 180px); + top: 17px; + } +} + +.title-tx { + h2 { + line-height: 1; + margin-bottom: 10px; + } +} + +.liquid-address { + .address-table { + table-layout: fixed; + + tr td:first-child { + width: 170px; + } + tr td:last-child { + width: 80%; + } + } + + .qrcode-col { + flex-grow: 0.5; + } +} diff --git a/frontend/src/app/components/wallet/wallet.component.ts b/frontend/src/app/components/wallet/wallet.component.ts new file mode 100644 index 000000000..e91def889 --- /dev/null +++ b/frontend/src/app/components/wallet/wallet.component.ts @@ -0,0 +1,360 @@ +import { Component, OnInit, OnDestroy } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; +import { ElectrsApiService } from '../../services/electrs-api.service'; +import { switchMap, filter, catchError, map, tap, share } from 'rxjs/operators'; +import { Address, Transaction } from '../../interfaces/electrs.interface'; +import { WebsocketService } from '../../services/websocket.service'; +import { StateService } from '../../services/state.service'; +import { AudioService } from '../../services/audio.service'; +import { ApiService } from '../../services/api.service'; +import { of, merge, Subscription, Observable, combineLatest, forkJoin } from 'rxjs'; +import { SeoService } from '../../services/seo.service'; +import { seoDescriptionNetwork } from '../../shared/common.utils'; + +@Component({ + selector: 'app-wallet', + templateUrl: './wallet.component.html', + styleUrls: ['./wallet.component.scss'] +}) +export class WalletComponent implements OnInit, OnDestroy { + network = ''; + + addresses: Address[]; + addressStrings: string[]; + isLoadingAddress = true; + transactions: Transaction[]; + isLoadingTransactions = true; + retryLoadMore = false; + error: any; + mainSubscription: Subscription; + wsSubscription: Subscription; + addressLoadingStatus$: Observable; + + collapseAddresses: boolean = true; + + fullyLoaded = false; + txCount = 0; + received = 0; + sent = 0; + chainBalance = 0; + + private tempTransactions: Transaction[]; + private timeTxIndexes: number[]; + private lastTransactionTxId: string; + + constructor( + private route: ActivatedRoute, + private electrsApiService: ElectrsApiService, + private websocketService: WebsocketService, + private stateService: StateService, + private audioService: AudioService, + private apiService: ApiService, + private seoService: SeoService, + ) { } + + ngOnInit(): void { + this.stateService.networkChanged$.subscribe((network) => this.network = network); + this.websocketService.want(['blocks']); + + const addresses$ = this.route.queryParamMap.pipe( + map((queryParams) => (queryParams.get('addresses') as string)?.split(',').map(this.normalizeAddress)), + tap(addresses => { + this.addressStrings = addresses; + this.error = undefined; + this.isLoadingAddress = true; + this.fullyLoaded = false; + this.addresses = []; + this.isLoadingTransactions = true; + this.transactions = null; + document.body.scrollTo(0, 0); + const titleLabel = addresses[0] + (addresses.length > 1 ? ` +${addresses.length - 1} addresses` : ''); + this.seoService.setTitle($localize`:@@address.component.browser-title:Address: ${titleLabel}}:INTERPOLATION:`); + this.seoService.setDescription($localize`:@@meta.description.bitcoin.address:See mempool transactions, confirmed transactions, balance, and more for ${this.stateService.network==='liquid'||this.stateService.network==='liquidtestnet'?'Liquid':'Bitcoin'}${seoDescriptionNetwork(this.stateService.network)} address ${titleLabel}:INTERPOLATION:.`); + }), + share() + ); + + this.addressLoadingStatus$ = addresses$ + .pipe( + switchMap(() => this.stateService.loadingIndicators$), + map((indicators) => indicators['address-' + this.addressStrings.join(',')] !== undefined ? indicators['address-' + this.addressStrings.join(',')] : 0) + ); + + this.mainSubscription = combineLatest([ + addresses$, + merge( + of(true), + this.stateService.connectionState$.pipe(filter((state) => state === 2 && this.transactions && this.transactions.length > 0)), + ), + ]).pipe( + switchMap(([addresses]) => { + return forkJoin( + addresses.map((address) => + address.match(/04[a-fA-F0-9]{128}|(02|03)[a-fA-F0-9]{64}/) + ? this.electrsApiService.getPubKeyAddress$(address) + : this.electrsApiService.getAddress$(address) + ) + ); + }), + tap((addresses: Address[]) => { + this.addresses = addresses; + this.updateChainStats(); + this.isLoadingAddress = false; + this.isLoadingTransactions = true; + this.websocketService.startTrackAddresses(addresses.map(address => address.address)); + }), + switchMap((addresses) => { + return addresses[0].is_pubkey + ? this.electrsApiService.getScriptHashesTransactions$(addresses.map(address => (address.address.length === 66 ? '21' : '41') + address.address + 'ac')) + : this.electrsApiService.getAddressesTransactions$(addresses.map(address => address.address)); + }), + switchMap((transactions) => { + this.tempTransactions = transactions; + if (transactions.length) { + this.lastTransactionTxId = transactions[transactions.length - 1].txid; + } + + const fetchTxs: string[] = []; + this.timeTxIndexes = []; + transactions.forEach((tx, index) => { + if (!tx.status.confirmed) { + fetchTxs.push(tx.txid); + this.timeTxIndexes.push(index); + } + }); + if (!fetchTxs.length) { + return of([]); + } + return this.apiService.getTransactionTimes$(fetchTxs).pipe( + catchError((err) => { + this.isLoadingAddress = false; + this.isLoadingTransactions = false; + this.error = err; + this.seoService.logSoft404(); + console.log(err); + return of([]); + }) + ); + }) + ) + .subscribe((times: number[] | null) => { + if (!times) { + return; + } + times.forEach((time, index) => { + this.tempTransactions[this.timeTxIndexes[index]].firstSeen = time; + }); + this.tempTransactions.sort((a, b) => { + if (b.status.confirmed) { + if (b.status.block_height === a.status.block_height) { + return b.status.block_time - a.status.block_time; + } + return b.status.block_height - a.status.block_height; + } + return b.firstSeen - a.firstSeen; + }); + + this.transactions = this.tempTransactions; + this.isLoadingTransactions = false; + }, + (error) => { + console.log(error); + this.error = error; + this.seoService.logSoft404(); + this.isLoadingAddress = false; + }); + + this.wsSubscription = this.stateService.multiAddressTransactions$.subscribe(update => { + for (const address of Object.keys(update)) { + for (const transaction of update[address].mempool) { + this.addTransaction(transaction); + } + for (const transaction of update[address].confirmed) { + const tx = this.transactions.find((t) => t.txid === transaction.txid); + if (tx) { + this.removeTransaction(tx); + tx.status = transaction.status; + this.transactions = this.transactions.slice(); + this.audioService.playSound('magic'); + } else { + if (this.addTransaction(transaction, false)) { + this.audioService.playSound('magic'); + } + } + } + for (const transaction of update[address].removed) { + this.removeTransaction(transaction); + } + } + }); + } + + addTransaction(transaction: Transaction, playSound: boolean = true): boolean { + if (this.transactions.some((t) => t.txid === transaction.txid)) { + return false; + } + + this.transactions.unshift(transaction); + this.transactions = this.transactions.slice(); + this.txCount++; + + if (playSound) { + if (transaction.vout.some((vout) => this.addressStrings.includes(vout?.scriptpubkey_address))) { + this.audioService.playSound('cha-ching'); + } else { + this.audioService.playSound('chime'); + } + } + + for (const address of this.addresses) { + let match = false; + transaction.vin.forEach((vin) => { + if (vin?.prevout?.scriptpubkey_address === address.address) { + match = true; + this.sent += vin.prevout.value; + if (transaction.status?.confirmed) { + address.chain_stats.funded_txo_count++; + address.chain_stats.funded_txo_sum += vin.prevout.value; + } else { + address.mempool_stats.funded_txo_count++; + address.mempool_stats.funded_txo_sum += vin.prevout.value; + } + } + }); + transaction.vout.forEach((vout) => { + match = true; + if (vout?.scriptpubkey_address === address.address) { + this.received += vout.value; + } + if (transaction.status?.confirmed) { + address.chain_stats.spent_txo_count++; + address.chain_stats.spent_txo_sum += vout.value; + } else { + address.mempool_stats.spent_txo_count++; + address.mempool_stats.spent_txo_sum += vout.value; + } + }); + if (match) { + if (transaction.status?.confirmed) { + address.chain_stats.tx_count++; + } else { + address.mempool_stats.tx_count++; + } + } + } + + return true; + } + + removeTransaction(transaction: Transaction): boolean { + const index = this.transactions.findIndex(((tx) => tx.txid === transaction.txid)); + if (index === -1) { + return false; + } + + this.transactions.splice(index, 1); + this.transactions = this.transactions.slice(); + this.txCount--; + + for (const address of this.addresses) { + let match = false; + transaction.vin.forEach((vin) => { + if (vin?.prevout?.scriptpubkey_address === address.address) { + match = true; + this.sent -= vin.prevout.value; + if (transaction.status?.confirmed) { + address.chain_stats.funded_txo_count--; + address.chain_stats.funded_txo_sum -= vin.prevout.value; + } else { + address.mempool_stats.funded_txo_count--; + address.mempool_stats.funded_txo_sum -= vin.prevout.value; + } + } + }); + transaction.vout.forEach((vout) => { + match = true; + if (vout?.scriptpubkey_address === address.address) { + this.received -= vout.value; + } + if (transaction.status?.confirmed) { + address.chain_stats.spent_txo_count--; + address.chain_stats.spent_txo_sum -= vout.value; + } else { + address.mempool_stats.spent_txo_count--; + address.mempool_stats.spent_txo_sum -= vout.value; + } + }); + if (match) { + if (transaction.status?.confirmed) { + address.chain_stats.tx_count--; + } else { + address.mempool_stats.tx_count--; + } + } + } + + return true; + } + + loadMore(): void { + if (this.isLoadingTransactions || this.fullyLoaded) { + return; + } + this.isLoadingTransactions = true; + this.retryLoadMore = false; + + (this.addresses[0].is_pubkey + ? this.electrsApiService.getScriptHashesTransactions$(this.addresses.map(address => (address.address.length === 66 ? '21' : '41') + address.address + 'ac'), this.lastTransactionTxId) + : this.electrsApiService.getAddressesTransactions$(this.addresses.map(address => address.address), this.lastTransactionTxId) + ).pipe( + catchError((error) => { + this.isLoadingTransactions = false; + this.retryLoadMore = true; + // In the unlikely event of the txid wasn't found in the mempool anymore and we must reload the page. + if (error.status === 422) { + window.location.reload(); + } + return of([]); + }) + ).subscribe((transactions: Transaction[]) => { + if (transactions && transactions.length) { + this.lastTransactionTxId = transactions[transactions.length - 1].txid; + this.transactions = this.transactions.concat(transactions); + } else { + this.fullyLoaded = true; + } + this.isLoadingTransactions = false; + }); + } + + normalizeAddress(address: string): string { + if (/^[A-Z]{2,5}1[AC-HJ-NP-Z02-9]{8,100}|04[a-fA-F0-9]{128}|(02|03)[a-fA-F0-9]{64}$/.test(address)) { + return address.toLowerCase(); + } else { + return address; + } + } + + updateChainStats(): void { + let received = 0; + let sent = 0; + let txCount = 0; + let chainBalance = 0; + for (const address of this.addresses) { + received += address.chain_stats.funded_txo_sum + address.mempool_stats.funded_txo_sum; + sent += address.chain_stats.spent_txo_sum + address.mempool_stats.spent_txo_sum; + txCount += address.chain_stats.tx_count + address.mempool_stats.tx_count; + chainBalance += (address.chain_stats.funded_txo_sum - address.chain_stats.spent_txo_sum); + } + this.received = received; + this.sent = sent; + this.txCount = txCount; + this.chainBalance = chainBalance; + } + + ngOnDestroy(): void { + this.mainSubscription.unsubscribe(); + this.websocketService.stopTrackingAddresses(); + this.wsSubscription.unsubscribe(); + } +} diff --git a/frontend/src/app/graphs/graphs.module.ts b/frontend/src/app/graphs/graphs.module.ts index ee51069c5..10f0b4d6c 100644 --- a/frontend/src/app/graphs/graphs.module.ts +++ b/frontend/src/app/graphs/graphs.module.ts @@ -35,9 +35,11 @@ import { HashrateChartComponent } from '../components/hashrate-chart/hashrate-ch import { HashrateChartPoolsComponent } from '../components/hashrates-chart-pools/hashrate-chart-pools.component'; import { BlockHealthGraphComponent } from '../components/block-health-graph/block-health-graph.component'; import { AddressComponent } from '../components/address/address.component'; +import { WalletComponent } from '../components/wallet/wallet.component'; import { AddressGraphComponent } from '../components/address-graph/address-graph.component'; import { UtxoGraphComponent } from '../components/utxo-graph/utxo-graph.component'; import { ActiveAccelerationBox } from '../components/acceleration/active-acceleration-box/active-acceleration-box.component'; +import { AddressesTreemap } from '../components/addresses-treemap/addresses-treemap.component'; import { CommonModule } from '@angular/common'; @NgModule({ @@ -46,6 +48,7 @@ import { CommonModule } from '@angular/common'; CustomDashboardComponent, MempoolBlockComponent, AddressComponent, + WalletComponent, MiningDashboardComponent, AcceleratorDashboardComponent, @@ -79,6 +82,7 @@ import { CommonModule } from '@angular/common'; AddressGraphComponent, UtxoGraphComponent, ActiveAccelerationBox, + AddressesTreemap, ], imports: [ CommonModule, diff --git a/frontend/src/app/graphs/graphs.routing.module.ts b/frontend/src/app/graphs/graphs.routing.module.ts index 40bf64144..5e7707a89 100644 --- a/frontend/src/app/graphs/graphs.routing.module.ts +++ b/frontend/src/app/graphs/graphs.routing.module.ts @@ -22,6 +22,7 @@ import { CustomDashboardComponent } from '../components/custom-dashboard/custom- import { AccelerationFeesGraphComponent } from '../components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component'; import { AccelerationsListComponent } from '../components/acceleration/accelerations-list/accelerations-list.component'; import { AddressComponent } from '../components/address/address.component'; +import { WalletComponent } from '../components/wallet/wallet.component'; const browserWindow = window || {}; // @ts-ignore @@ -88,6 +89,15 @@ const routes: Routes = [ networkSpecific: true, } }, + { + path: 'wallet', + children: [], + component: WalletComponent, + data: { + ogImage: true, + networkSpecific: true, + } + }, { path: 'graphs', data: { networks: ['bitcoin', 'liquid'] }, diff --git a/frontend/src/app/services/electrs-api.service.ts b/frontend/src/app/services/electrs-api.service.ts index f1468f8aa..2ae9138b3 100644 --- a/frontend/src/app/services/electrs-api.service.ts +++ b/frontend/src/app/services/electrs-api.service.ts @@ -142,6 +142,14 @@ export class ElectrsApiService { return this.httpClient.get(this.apiBaseUrl + this.apiBasePath + '/api/address/' + address + '/txs', { params }); } + getAddressesTransactions$(addresses: string[], txid?: string): Observable { + let params = new HttpParams(); + if (txid) { + params = params.append('after_txid', txid); + } + return this.httpClient.get(this.apiBaseUrl + this.apiBasePath + `/api/addresses/txs?addresses=${addresses.join(',')}`, { params }); + } + getAddressSummary$(address: string, txid?: string): Observable { let params = new HttpParams(); if (txid) { @@ -150,6 +158,14 @@ export class ElectrsApiService { return this.httpClient.get(this.apiBaseUrl + this.apiBasePath + '/api/address/' + address + '/txs/summary', { params }); } + getAddressesSummary$(addresses: string[], txid?: string): Observable { + let params = new HttpParams(); + if (txid) { + params = params.append('after_txid', txid); + } + return this.httpClient.get(this.apiBaseUrl + this.apiBasePath + `/api/addresses/txs/summary?addresses=${addresses.join(',')}`, { params }); + } + getScriptHashTransactions$(script: string, txid?: string): Observable { let params = new HttpParams(); if (txid) { @@ -160,6 +176,16 @@ export class ElectrsApiService { ); } + getScriptHashesTransactions$(scripts: string[], txid?: string): Observable { + let params = new HttpParams(); + if (txid) { + params = params.append('after_txid', txid); + } + return from(Promise.all(scripts.map(script => calcScriptHash$(script)))).pipe( + switchMap(scriptHashes => this.httpClient.get(this.apiBaseUrl + this.apiBasePath + `/api/scripthashes/txs?scripthashes=${scriptHashes.join(',')}`, { params })), + ); + } + getScriptHashSummary$(script: string, txid?: string): Observable { let params = new HttpParams(); if (txid) { @@ -180,6 +206,16 @@ export class ElectrsApiService { ); } + getScriptHashesSummary$(scripts: string[], txid?: string): Observable { + let params = new HttpParams(); + if (txid) { + params = params.append('after_txid', txid); + } + return from(Promise.all(scripts.map(script => calcScriptHash$(script)))).pipe( + switchMap(scriptHashes => this.httpClient.get(this.apiBaseUrl + this.apiBasePath + `/api/scripthashes/txs/summary?scripthashes=${scriptHashes.join(',')}`, { params })), + ); + } + getAsset$(assetId: string): Observable { return this.httpClient.get(this.apiBaseUrl + this.apiBasePath + '/api/asset/' + assetId); } From 9c303e8c23391162c38d9eaf6ea83eb7ff7fe365 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Sun, 29 Sep 2024 09:11:40 +0000 Subject: [PATCH 126/147] address wallet page by name --- .../addresses-treemap.component.ts | 23 +- .../custom-dashboard.component.ts | 52 +- .../components/wallet/wallet.component.html | 92 +-- .../app/components/wallet/wallet.component.ts | 543 ++++++++---------- .../src/app/graphs/graphs.routing.module.ts | 2 +- .../src/app/interfaces/node-api.interface.ts | 5 +- frontend/src/app/services/state.service.ts | 2 +- 7 files changed, 319 insertions(+), 400 deletions(-) diff --git a/frontend/src/app/components/addresses-treemap/addresses-treemap.component.ts b/frontend/src/app/components/addresses-treemap/addresses-treemap.component.ts index 705941caf..f78b4e2e1 100644 --- a/frontend/src/app/components/addresses-treemap/addresses-treemap.component.ts +++ b/frontend/src/app/components/addresses-treemap/addresses-treemap.component.ts @@ -39,14 +39,19 @@ export class AddressesTreemap implements OnChanges { } prepareChartOptions(): void { - const maxTxs = this.addresses.reduce((max, address) => Math.max(max, address.chain_stats.tx_count), 0); const data = this.addresses.map(address => ({ - address: address.address, - value: address.chain_stats.funded_txo_sum - address.chain_stats.spent_txo_sum, - stats: address.chain_stats, - itemStyle: { - color: lerpColor('#1E88E5', '#D81B60', address.chain_stats.tx_count / maxTxs), - } + address: address.address, + value: address.chain_stats.funded_txo_sum - address.chain_stats.spent_txo_sum, + stats: address.chain_stats, + })); + // only consider visible items for the color gradient + const totalValue = data.reduce((acc, address) => acc + address.value, 0); + const maxTxs = data.filter(address => address.value > (totalValue / 2000)).reduce((max, address) => Math.max(max, address.stats.tx_count), 0); + const dataItems = data.map(address => ({ + ...address, + itemStyle: { + color: lerpColor('#1E88E5', '#D81B60', address.stats.tx_count / maxTxs), + } })); this.chartOptions = { tooltip: { @@ -64,7 +69,7 @@ export class AddressesTreemap implements OnChanges { top: 0, roam: false, type: 'treemap', - data: data, + data: dataItems, nodeClick: 'link', progressive: 100, tooltip: { @@ -87,7 +92,7 @@ export class AddressesTreemap implements OnChanges { ${value.data.address} - Recieved + Received ${this.formatValue(value.data.stats.funded_txo_sum)} diff --git a/frontend/src/app/components/custom-dashboard/custom-dashboard.component.ts b/frontend/src/app/components/custom-dashboard/custom-dashboard.component.ts index 622e6cf3a..eb9818632 100644 --- a/frontend/src/app/components/custom-dashboard/custom-dashboard.component.ts +++ b/frontend/src/app/components/custom-dashboard/custom-dashboard.component.ts @@ -370,23 +370,47 @@ export class CustomDashboardComponent implements OnInit, OnDestroy, AfterViewIni const walletName = this.stateService.env.customize.dashboard.widgets.find(w => w.props?.wallet).props.wallet; this.websocketService.startTrackingWallet(walletName); - this.walletSummary$ = this.apiService.getWallet$(walletName).pipe( + this.walletSummary$ = this.apiService.getWallet$(walletName).pipe( catchError(e => { - return of(null); + return of({}); }), - map((walletTransactions) => { - const transactions = Object.values(walletTransactions).flatMap(wallet => wallet.transactions); - return this.deduplicateWalletTransactions(transactions); - }), - switchMap(initial => this.stateService.walletTransactions$.pipe( - startWith(null), - scan((summary, walletTransactions) => { - if (walletTransactions) { - const transactions: AddressTxSummary[] = [...summary, ...Object.values(walletTransactions).flat()]; - return this.deduplicateWalletTransactions(transactions); + switchMap(wallet => this.stateService.walletTransactions$.pipe( + startWith([]), + scan((summaries, newTransactions) => { + const newSummaries: AddressTxSummary[] = []; + for (const tx of newTransactions) { + const funded: Record = {}; + const spent: Record = {}; + const fundedCount: Record = {}; + const spentCount: Record = {}; + for (const vin of tx.vin) { + const address = vin.prevout?.scriptpubkey_address; + if (address && wallet[address]) { + spent[address] = (spent[address] ?? 0) + (vin.prevout?.value ?? 0); + spentCount[address] = (spentCount[address] ?? 0) + 1; + } + } + for (const vout of tx.vout) { + const address = vout.scriptpubkey_address; + if (address && wallet[address]) { + funded[address] = (funded[address] ?? 0) + (vout.value ?? 0); + fundedCount[address] = (fundedCount[address] ?? 0) + 1; + } + } + for (const address of Object.keys({ ...funded, ...spent })) { + // add tx to summary + const txSummary: AddressTxSummary = { + txid: tx.txid, + value: (funded[address] ?? 0) - (spent[address] ?? 0), + height: tx.status.block_height, + time: tx.status.block_time, + }; + wallet[address].transactions?.push(txSummary); + newSummaries.push(txSummary); + } } - return summary; - }, initial) + return [...summaries, ...this.deduplicateWalletTransactions(newSummaries)]; + }, this.deduplicateWalletTransactions(Object.values(wallet).flatMap(address => address.transactions))) )), share(), ); diff --git a/frontend/src/app/components/wallet/wallet.component.html b/frontend/src/app/components/wallet/wallet.component.html index 60cc4e264..52b7b02a5 100644 --- a/frontend/src/app/components/wallet/wallet.component.html +++ b/frontend/src/app/components/wallet/wallet.component.html @@ -5,7 +5,7 @@
- +
@@ -35,31 +35,31 @@
- + + + Confirmed balance + + + + Confirmed UTXOs + {{ walletStats.utxos }} + Total received - + - - Total sent - - - - - Balance - - +
- +
- +

Balance History

@@ -67,56 +67,16 @@
- +
+ -
-
-

- Transactions -

-
+ - - -
- - - -
-
-
-
-
-
- -
-
-
- -
-
- -
-
-
- -
- - -
- -
-
- -
- - - -
+
@@ -142,21 +102,11 @@ - +
Error loading wallet data. -
- - There many transactions in this wallet, more than your backend can handle. See more on setting up a stronger backend. -

- Consider viewing this wallet on the official Mempool website instead: -
-
- https://mempool.space/wallet?addresses={{ addressStrings.join(',') }} -
- http://mempoolhqx4isw62xs7abwphsq7ldayuidyx2v2oethdhhj6mlo2r6ad.onion/wallet?addresses={{ addressStrings.join(',') }}

({{ error | httpErrorMsg }})
@@ -172,10 +122,6 @@
- -
- -
diff --git a/frontend/src/app/components/wallet/wallet.component.ts b/frontend/src/app/components/wallet/wallet.component.ts index e91def889..be04e1760 100644 --- a/frontend/src/app/components/wallet/wallet.component.ts +++ b/frontend/src/app/components/wallet/wallet.component.ts @@ -1,15 +1,101 @@ import { Component, OnInit, OnDestroy } from '@angular/core'; -import { ActivatedRoute } from '@angular/router'; -import { ElectrsApiService } from '../../services/electrs-api.service'; -import { switchMap, filter, catchError, map, tap, share } from 'rxjs/operators'; -import { Address, Transaction } from '../../interfaces/electrs.interface'; +import { ActivatedRoute, ParamMap } from '@angular/router'; +import { switchMap, catchError, map, tap, shareReplay, startWith, scan } from 'rxjs/operators'; +import { Address, AddressTxSummary, ChainStats, Transaction } from '../../interfaces/electrs.interface'; import { WebsocketService } from '../../services/websocket.service'; import { StateService } from '../../services/state.service'; -import { AudioService } from '../../services/audio.service'; import { ApiService } from '../../services/api.service'; -import { of, merge, Subscription, Observable, combineLatest, forkJoin } from 'rxjs'; +import { of, Observable, Subscription } from 'rxjs'; import { SeoService } from '../../services/seo.service'; import { seoDescriptionNetwork } from '../../shared/common.utils'; +import { WalletAddress } from '../../interfaces/node-api.interface'; + +class WalletStats implements ChainStats { + addresses: string[]; + funded_txo_count: number; + funded_txo_sum: number; + spent_txo_count: number; + spent_txo_sum: number; + tx_count: number; + + constructor (stats: ChainStats[], addresses: string[]) { + Object.assign(this, stats.reduce((acc, stat) => { + acc.funded_txo_count += stat.funded_txo_count; + acc.funded_txo_sum += stat.funded_txo_sum; + acc.spent_txo_count += stat.spent_txo_count; + acc.spent_txo_sum += stat.spent_txo_sum; + return acc; + }, { + funded_txo_count: 0, + funded_txo_sum: 0, + spent_txo_count: 0, + spent_txo_sum: 0, + tx_count: 0, + }) + ); + this.addresses = addresses; + } + + public addTx(tx: Transaction): void { + for (const vin of tx.vin) { + if (this.addresses.includes(vin.prevout?.scriptpubkey_address)) { + this.spendTxo(vin.prevout.value); + } + } + for (const vout of tx.vout) { + if (this.addresses.includes(vout.scriptpubkey_address)) { + this.fundTxo(vout.value); + } + } + this.tx_count++; + } + + public removeTx(tx: Transaction): void { + for (const vin of tx.vin) { + if (this.addresses.includes(vin.prevout?.scriptpubkey_address)) { + this.unspendTxo(vin.prevout.value); + } + } + for (const vout of tx.vout) { + if (this.addresses.includes(vout.scriptpubkey_address)) { + this.unfundTxo(vout.value); + } + } + this.tx_count--; + } + + private fundTxo(value: number): void { + this.funded_txo_sum += value; + this.funded_txo_count++; + } + + private unfundTxo(value: number): void { + this.funded_txo_sum -= value; + this.funded_txo_count--; + } + + private spendTxo(value: number): void { + this.spent_txo_sum += value; + this.spent_txo_count++; + } + + private unspendTxo(value: number): void { + this.spent_txo_sum -= value; + this.spent_txo_count--; + } + + get balance(): number { + return this.funded_txo_sum - this.spent_txo_sum; + } + + get totalReceived(): number { + return this.funded_txo_sum; + } + + get utxos(): number { + return this.funded_txo_count - this.spent_txo_count; + } +} @Component({ selector: 'app-wallet', @@ -19,16 +105,16 @@ import { seoDescriptionNetwork } from '../../shared/common.utils'; export class WalletComponent implements OnInit, OnDestroy { network = ''; - addresses: Address[]; - addressStrings: string[]; - isLoadingAddress = true; - transactions: Transaction[]; - isLoadingTransactions = true; - retryLoadMore = false; + addresses: Address[] = []; + addressStrings: string[] = []; + walletName: string; + isLoadingWallet = true; + wallet$: Observable>; + walletAddresses$: Observable>; + walletSummary$: Observable; + walletStats$: Observable; error: any; - mainSubscription: Subscription; - wsSubscription: Subscription; - addressLoadingStatus$: Observable; + walletSubscription: Subscription; collapseAddresses: boolean = true; @@ -38,16 +124,10 @@ export class WalletComponent implements OnInit, OnDestroy { sent = 0; chainBalance = 0; - private tempTransactions: Transaction[]; - private timeTxIndexes: number[]; - private lastTransactionTxId: string; - constructor( private route: ActivatedRoute, - private electrsApiService: ElectrsApiService, private websocketService: WebsocketService, private stateService: StateService, - private audioService: AudioService, private apiService: ApiService, private seoService: SeoService, ) { } @@ -55,275 +135,156 @@ export class WalletComponent implements OnInit, OnDestroy { ngOnInit(): void { this.stateService.networkChanged$.subscribe((network) => this.network = network); this.websocketService.want(['blocks']); - - const addresses$ = this.route.queryParamMap.pipe( - map((queryParams) => (queryParams.get('addresses') as string)?.split(',').map(this.normalizeAddress)), - tap(addresses => { - this.addressStrings = addresses; - this.error = undefined; - this.isLoadingAddress = true; - this.fullyLoaded = false; - this.addresses = []; - this.isLoadingTransactions = true; - this.transactions = null; - document.body.scrollTo(0, 0); - const titleLabel = addresses[0] + (addresses.length > 1 ? ` +${addresses.length - 1} addresses` : ''); - this.seoService.setTitle($localize`:@@address.component.browser-title:Address: ${titleLabel}}:INTERPOLATION:`); - this.seoService.setDescription($localize`:@@meta.description.bitcoin.address:See mempool transactions, confirmed transactions, balance, and more for ${this.stateService.network==='liquid'||this.stateService.network==='liquidtestnet'?'Liquid':'Bitcoin'}${seoDescriptionNetwork(this.stateService.network)} address ${titleLabel}:INTERPOLATION:.`); + this.wallet$ = this.route.paramMap.pipe( + map((params: ParamMap) => params.get('wallet') as string), + tap((walletName: string) => { + this.walletName = walletName; + this.websocketService.startTrackingWallet(walletName); + this.seoService.setTitle($localize`:@@wallet.component.browser-title:Wallet: ${walletName}:INTERPOLATION:`); + this.seoService.setDescription($localize`:@@meta.description.bitcoin.wallet:See mempool transactions, confirmed transactions, balance, and more for ${this.stateService.network==='liquid'||this.stateService.network==='liquidtestnet'?'Liquid':'Bitcoin'}${seoDescriptionNetwork(this.stateService.network)} wallet ${walletName}:INTERPOLATION:.`); }), - share() + switchMap((walletName: string) => this.apiService.getWallet$(walletName).pipe( + catchError((err) => { + this.error = err; + this.seoService.logSoft404(); + console.log(err); + return of({}); + }) + )), + shareReplay(1), ); - this.addressLoadingStatus$ = addresses$ - .pipe( - switchMap(() => this.stateService.loadingIndicators$), - map((indicators) => indicators['address-' + this.addressStrings.join(',')] !== undefined ? indicators['address-' + this.addressStrings.join(',')] : 0) - ); - - this.mainSubscription = combineLatest([ - addresses$, - merge( - of(true), - this.stateService.connectionState$.pipe(filter((state) => state === 2 && this.transactions && this.transactions.length > 0)), - ), - ]).pipe( - switchMap(([addresses]) => { - return forkJoin( - addresses.map((address) => - address.match(/04[a-fA-F0-9]{128}|(02|03)[a-fA-F0-9]{64}/) - ? this.electrsApiService.getPubKeyAddress$(address) - : this.electrsApiService.getAddress$(address) - ) - ); - }), - tap((addresses: Address[]) => { - this.addresses = addresses; - this.updateChainStats(); - this.isLoadingAddress = false; - this.isLoadingTransactions = true; - this.websocketService.startTrackAddresses(addresses.map(address => address.address)); - }), - switchMap((addresses) => { - return addresses[0].is_pubkey - ? this.electrsApiService.getScriptHashesTransactions$(addresses.map(address => (address.address.length === 66 ? '21' : '41') + address.address + 'ac')) - : this.electrsApiService.getAddressesTransactions$(addresses.map(address => address.address)); - }), - switchMap((transactions) => { - this.tempTransactions = transactions; - if (transactions.length) { - this.lastTransactionTxId = transactions[transactions.length - 1].txid; - } - - const fetchTxs: string[] = []; - this.timeTxIndexes = []; - transactions.forEach((tx, index) => { - if (!tx.status.confirmed) { - fetchTxs.push(tx.txid); - this.timeTxIndexes.push(index); - } - }); - if (!fetchTxs.length) { - return of([]); - } - return this.apiService.getTransactionTimes$(fetchTxs).pipe( - catchError((err) => { - this.isLoadingAddress = false; - this.isLoadingTransactions = false; - this.error = err; - this.seoService.logSoft404(); - console.log(err); - return of([]); - }) - ); - }) - ) - .subscribe((times: number[] | null) => { - if (!times) { - return; + this.walletAddresses$ = this.wallet$.pipe( + map(wallet => { + const walletInfo: Record = {}; + for (const address of Object.keys(wallet)) { + walletInfo[address] = { + address, + chain_stats: wallet[address].stats, + mempool_stats: { + funded_txo_count: 0, + funded_txo_sum: 0, + spent_txo_count: 0, spent_txo_sum: 0, tx_count: 0 + }, + }; } - times.forEach((time, index) => { - this.tempTransactions[this.timeTxIndexes[index]].firstSeen = time; - }); - this.tempTransactions.sort((a, b) => { - if (b.status.confirmed) { - if (b.status.block_height === a.status.block_height) { - return b.status.block_time - a.status.block_time; + return walletInfo; + }), + switchMap(initial => this.stateService.walletTransactions$.pipe( + startWith(null), + scan((wallet, walletTransactions) => { + for (const tx of (walletTransactions || [])) { + const funded: Record = {}; + const spent: Record = {}; + const fundedCount: Record = {}; + const spentCount: Record = {}; + for (const vin of tx.vin) { + const address = vin.prevout?.scriptpubkey_address; + if (address && wallet[address]) { + spent[address] = (spent[address] ?? 0) + (vin.prevout?.value ?? 0); + spentCount[address] = (spentCount[address] ?? 0) + 1; + } } - return b.status.block_height - a.status.block_height; - } - return b.firstSeen - a.firstSeen; - }); - - this.transactions = this.tempTransactions; - this.isLoadingTransactions = false; - }, - (error) => { - console.log(error); - this.error = error; - this.seoService.logSoft404(); - this.isLoadingAddress = false; - }); - - this.wsSubscription = this.stateService.multiAddressTransactions$.subscribe(update => { - for (const address of Object.keys(update)) { - for (const transaction of update[address].mempool) { - this.addTransaction(transaction); - } - for (const transaction of update[address].confirmed) { - const tx = this.transactions.find((t) => t.txid === transaction.txid); - if (tx) { - this.removeTransaction(tx); - tx.status = transaction.status; - this.transactions = this.transactions.slice(); - this.audioService.playSound('magic'); - } else { - if (this.addTransaction(transaction, false)) { - this.audioService.playSound('magic'); + for (const vout of tx.vout) { + const address = vout.scriptpubkey_address; + if (address && wallet[address]) { + funded[address] = (funded[address] ?? 0) + (vout.value ?? 0); + fundedCount[address] = (fundedCount[address] ?? 0) + 1; + } + } + for (const address of Object.keys({ ...funded, ...spent })) { + // update address stats + wallet[address].chain_stats.tx_count++; + wallet[address].chain_stats.funded_txo_count += fundedCount[address] || 0; + wallet[address].chain_stats.spent_txo_count += spentCount[address] || 0; + wallet[address].chain_stats.funded_txo_sum += funded[address] || 0; + wallet[address].chain_stats.spent_txo_sum += spent[address] || 0; } } - } - for (const transaction of update[address].removed) { - this.removeTransaction(transaction); - } - } - }); - } - - addTransaction(transaction: Transaction, playSound: boolean = true): boolean { - if (this.transactions.some((t) => t.txid === transaction.txid)) { - return false; - } - - this.transactions.unshift(transaction); - this.transactions = this.transactions.slice(); - this.txCount++; - - if (playSound) { - if (transaction.vout.some((vout) => this.addressStrings.includes(vout?.scriptpubkey_address))) { - this.audioService.playSound('cha-ching'); - } else { - this.audioService.playSound('chime'); - } - } - - for (const address of this.addresses) { - let match = false; - transaction.vin.forEach((vin) => { - if (vin?.prevout?.scriptpubkey_address === address.address) { - match = true; - this.sent += vin.prevout.value; - if (transaction.status?.confirmed) { - address.chain_stats.funded_txo_count++; - address.chain_stats.funded_txo_sum += vin.prevout.value; - } else { - address.mempool_stats.funded_txo_count++; - address.mempool_stats.funded_txo_sum += vin.prevout.value; - } - } - }); - transaction.vout.forEach((vout) => { - match = true; - if (vout?.scriptpubkey_address === address.address) { - this.received += vout.value; - } - if (transaction.status?.confirmed) { - address.chain_stats.spent_txo_count++; - address.chain_stats.spent_txo_sum += vout.value; - } else { - address.mempool_stats.spent_txo_count++; - address.mempool_stats.spent_txo_sum += vout.value; - } - }); - if (match) { - if (transaction.status?.confirmed) { - address.chain_stats.tx_count++; - } else { - address.mempool_stats.tx_count++; - } - } - } - - return true; - } - - removeTransaction(transaction: Transaction): boolean { - const index = this.transactions.findIndex(((tx) => tx.txid === transaction.txid)); - if (index === -1) { - return false; - } - - this.transactions.splice(index, 1); - this.transactions = this.transactions.slice(); - this.txCount--; - - for (const address of this.addresses) { - let match = false; - transaction.vin.forEach((vin) => { - if (vin?.prevout?.scriptpubkey_address === address.address) { - match = true; - this.sent -= vin.prevout.value; - if (transaction.status?.confirmed) { - address.chain_stats.funded_txo_count--; - address.chain_stats.funded_txo_sum -= vin.prevout.value; - } else { - address.mempool_stats.funded_txo_count--; - address.mempool_stats.funded_txo_sum -= vin.prevout.value; - } - } - }); - transaction.vout.forEach((vout) => { - match = true; - if (vout?.scriptpubkey_address === address.address) { - this.received -= vout.value; - } - if (transaction.status?.confirmed) { - address.chain_stats.spent_txo_count--; - address.chain_stats.spent_txo_sum -= vout.value; - } else { - address.mempool_stats.spent_txo_count--; - address.mempool_stats.spent_txo_sum -= vout.value; - } - }); - if (match) { - if (transaction.status?.confirmed) { - address.chain_stats.tx_count--; - } else { - address.mempool_stats.tx_count--; - } - } - } - - return true; - } - - loadMore(): void { - if (this.isLoadingTransactions || this.fullyLoaded) { - return; - } - this.isLoadingTransactions = true; - this.retryLoadMore = false; - - (this.addresses[0].is_pubkey - ? this.electrsApiService.getScriptHashesTransactions$(this.addresses.map(address => (address.address.length === 66 ? '21' : '41') + address.address + 'ac'), this.lastTransactionTxId) - : this.electrsApiService.getAddressesTransactions$(this.addresses.map(address => address.address), this.lastTransactionTxId) - ).pipe( - catchError((error) => { - this.isLoadingTransactions = false; - this.retryLoadMore = true; - // In the unlikely event of the txid wasn't found in the mempool anymore and we must reload the page. - if (error.status === 422) { - window.location.reload(); - } - return of([]); + return wallet; + }, initial) + )), + tap(() => { + this.isLoadingWallet = false; }) - ).subscribe((transactions: Transaction[]) => { - if (transactions && transactions.length) { - this.lastTransactionTxId = transactions[transactions.length - 1].txid; - this.transactions = this.transactions.concat(transactions); + ); + + this.walletSubscription = this.walletAddresses$.subscribe(wallet => { + this.addressStrings = Object.keys(wallet); + this.addresses = Object.values(wallet); + }); + + this.walletSummary$ = this.wallet$.pipe( + switchMap(wallet => this.stateService.walletTransactions$.pipe( + startWith([]), + scan((summaries, newTransactions) => { + const newSummaries: AddressTxSummary[] = []; + for (const tx of newTransactions) { + const funded: Record = {}; + const spent: Record = {}; + const fundedCount: Record = {}; + const spentCount: Record = {}; + for (const vin of tx.vin) { + const address = vin.prevout?.scriptpubkey_address; + if (address && wallet[address]) { + spent[address] = (spent[address] ?? 0) + (vin.prevout?.value ?? 0); + spentCount[address] = (spentCount[address] ?? 0) + 1; + } + } + for (const vout of tx.vout) { + const address = vout.scriptpubkey_address; + if (address && wallet[address]) { + funded[address] = (funded[address] ?? 0) + (vout.value ?? 0); + fundedCount[address] = (fundedCount[address] ?? 0) + 1; + } + } + for (const address of Object.keys({ ...funded, ...spent })) { + // add tx to summary + const txSummary: AddressTxSummary = { + txid: tx.txid, + value: (funded[address] ?? 0) - (spent[address] ?? 0), + height: tx.status.block_height, + time: tx.status.block_time, + }; + wallet[address].transactions?.push(txSummary); + newSummaries.push(txSummary); + } + } + return [...summaries, ...this.deduplicateWalletTransactions(newSummaries)]; + }, this.deduplicateWalletTransactions(Object.values(wallet).flatMap(address => address.transactions))) + )), + ); + + this.walletStats$ = this.wallet$.pipe( + switchMap(wallet => { + const walletStats = new WalletStats(Object.values(wallet).map(w => w.stats), Object.keys(wallet)); + return this.stateService.walletTransactions$.pipe( + startWith([]), + scan((stats, newTransactions) => { + for (const tx of newTransactions) { + stats.addTx(tx); + } + return stats; + }, walletStats), + ); + }), + ); + } + + deduplicateWalletTransactions(walletTransactions: AddressTxSummary[]): AddressTxSummary[] { + const transactions = new Map(); + for (const tx of walletTransactions) { + if (transactions.has(tx.txid)) { + transactions.get(tx.txid).value += tx.value; } else { - this.fullyLoaded = true; + transactions.set(tx.txid, tx); } - this.isLoadingTransactions = false; + } + return Array.from(transactions.values()).sort((a, b) => { + if (a.height === b.height) { + return b.tx_position - a.tx_position; + } + return b.height - a.height; }); } @@ -335,26 +296,8 @@ export class WalletComponent implements OnInit, OnDestroy { } } - updateChainStats(): void { - let received = 0; - let sent = 0; - let txCount = 0; - let chainBalance = 0; - for (const address of this.addresses) { - received += address.chain_stats.funded_txo_sum + address.mempool_stats.funded_txo_sum; - sent += address.chain_stats.spent_txo_sum + address.mempool_stats.spent_txo_sum; - txCount += address.chain_stats.tx_count + address.mempool_stats.tx_count; - chainBalance += (address.chain_stats.funded_txo_sum - address.chain_stats.spent_txo_sum); - } - this.received = received; - this.sent = sent; - this.txCount = txCount; - this.chainBalance = chainBalance; - } - ngOnDestroy(): void { - this.mainSubscription.unsubscribe(); - this.websocketService.stopTrackingAddresses(); - this.wsSubscription.unsubscribe(); + this.websocketService.stopTrackingWallet(); + this.walletSubscription.unsubscribe(); } } diff --git a/frontend/src/app/graphs/graphs.routing.module.ts b/frontend/src/app/graphs/graphs.routing.module.ts index 5e7707a89..b9940fc84 100644 --- a/frontend/src/app/graphs/graphs.routing.module.ts +++ b/frontend/src/app/graphs/graphs.routing.module.ts @@ -90,7 +90,7 @@ const routes: Routes = [ } }, { - path: 'wallet', + path: 'wallet/:wallet', children: [], component: WalletComponent, data: { diff --git a/frontend/src/app/interfaces/node-api.interface.ts b/frontend/src/app/interfaces/node-api.interface.ts index 315ba9b20..0091262e1 100644 --- a/frontend/src/app/interfaces/node-api.interface.ts +++ b/frontend/src/app/interfaces/node-api.interface.ts @@ -1,4 +1,4 @@ -import { AddressTxSummary, Block, Transaction } from "./electrs.interface"; +import { AddressTxSummary, Block, ChainStats, Transaction } from "./electrs.interface"; export interface OptimizedMempoolStats { added: number; @@ -474,5 +474,6 @@ export interface TxResult { export interface WalletAddress { address: string; active: boolean; - transactions?: AddressTxSummary[]; + stats: ChainStats; + transactions: AddressTxSummary[]; } diff --git a/frontend/src/app/services/state.service.ts b/frontend/src/app/services/state.service.ts index 059f3d45c..5e4075a52 100644 --- a/frontend/src/app/services/state.service.ts +++ b/frontend/src/app/services/state.service.ts @@ -159,7 +159,7 @@ export class StateService { mempoolRemovedTransactions$ = new Subject(); multiAddressTransactions$ = new Subject<{ [address: string]: { mempool: Transaction[], confirmed: Transaction[], removed: Transaction[] }}>(); blockTransactions$ = new Subject(); - walletTransactions$ = new Subject>(); + walletTransactions$ = new Subject(); isLoadingWebSocket$ = new ReplaySubject(1); isLoadingMempool$ = new BehaviorSubject(true); vbytesPerSecond$ = new ReplaySubject(1); From 756e4356a5bc4e94dfe6bf65e18bb41127b4ad49 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Mon, 30 Sep 2024 21:01:10 +0000 Subject: [PATCH 127/147] named wallet sync track txo stats --- backend/src/api/bitcoin/esplora-api.ts | 2 +- backend/src/api/services/wallets.ts | 47 ++++++++++++++++++++------ 2 files changed, 37 insertions(+), 12 deletions(-) diff --git a/backend/src/api/bitcoin/esplora-api.ts b/backend/src/api/bitcoin/esplora-api.ts index b701aa8a5..9a4b7706a 100644 --- a/backend/src/api/bitcoin/esplora-api.ts +++ b/backend/src/api/bitcoin/esplora-api.ts @@ -305,7 +305,7 @@ class ElectrsApi implements AbstractBitcoinApi { } $getAddress(address: string): Promise { - throw new Error('Method getAddress not implemented.'); + return this.failoverRouter.$get('/address/' + address); } $getAddressTransactions(address: string, txId?: string): Promise { diff --git a/backend/src/api/services/wallets.ts b/backend/src/api/services/wallets.ts index eea4ee129..dd4d7ebc9 100644 --- a/backend/src/api/services/wallets.ts +++ b/backend/src/api/services/wallets.ts @@ -8,7 +8,14 @@ import { TransactionExtended } from '../../mempool.interfaces'; interface WalletAddress { address: string; active: boolean; - transactions?: IEsploraApi.AddressTxSummary[]; + stats: { + funded_txo_count: number; + funded_txo_sum: number; + spent_txo_count: number; + spent_txo_sum: number; + tx_count: number; + }; + transactions: IEsploraApi.AddressTxSummary[]; lastSync: number; } @@ -37,7 +44,7 @@ class WalletApi { // resync wallet addresses from the services backend async $syncWallets(): Promise { - if (!config.WALLETS.ENABLED) { + if (!config.WALLETS.ENABLED || this.syncing) { return; } this.syncing = true; @@ -74,10 +81,13 @@ class WalletApi { const refreshTransactions = !wallet.addresses[address.address] || (address.active && (Date.now() - wallet.addresses[address.address].lastSync) > 60 * 60 * 1000); if (refreshTransactions) { try { + const summary = await bitcoinApi.$getAddressTransactionSummary(address.address); + const addressInfo = await bitcoinApi.$getAddress(address.address); const walletAddress: WalletAddress = { address: address.address, active: address.active, - transactions: await bitcoinApi.$getAddressTransactionSummary(address.address), + transactions: summary, + stats: addressInfo.chain_stats, lastSync: Date.now(), }; wallet.addresses[address.address] = walletAddress; @@ -88,36 +98,51 @@ class WalletApi { } // check a new block for transactions that affect wallet address balances, and add relevant transactions to wallets - processBlock(block: IEsploraApi.Block, blockTxs: TransactionExtended[]): Record> { - const walletTransactions: Record> = {}; + processBlock(block: IEsploraApi.Block, blockTxs: TransactionExtended[]): Record { + const walletTransactions: Record = {}; for (const walletKey of Object.keys(this.wallets)) { const wallet = this.wallets[walletKey]; - walletTransactions[walletKey] = {}; + walletTransactions[walletKey] = []; for (const tx of blockTxs) { const funded: Record = {}; const spent: Record = {}; + const fundedCount: Record = {}; + const spentCount: Record = {}; + let anyMatch = false; for (const vin of tx.vin) { const address = vin.prevout?.scriptpubkey_address; if (address && wallet.addresses[address]) { + anyMatch = true; spent[address] = (spent[address] ?? 0) + (vin.prevout?.value ?? 0); + spentCount[address] = (spentCount[address] ?? 0) + 1; } } for (const vout of tx.vout) { const address = vout.scriptpubkey_address; if (address && wallet.addresses[address]) { + anyMatch = true; funded[address] = (funded[address] ?? 0) + (vout.value ?? 0); + fundedCount[address] = (fundedCount[address] ?? 0) + 1; } } for (const address of Object.keys({ ...funded, ...spent })) { - if (!walletTransactions[walletKey][address]) { - walletTransactions[walletKey][address] = []; - } - walletTransactions[walletKey][address].push({ + // update address stats + wallet.addresses[address].stats.tx_count++; + wallet.addresses[address].stats.funded_txo_count += fundedCount[address] || 0; + wallet.addresses[address].stats.spent_txo_count += spentCount[address] || 0; + wallet.addresses[address].stats.funded_txo_sum += funded[address] || 0; + wallet.addresses[address].stats.spent_txo_sum += spent[address] || 0; + // add tx to summary + const txSummary: IEsploraApi.AddressTxSummary = { txid: tx.txid, value: (funded[address] ?? 0) - (spent[address] ?? 0), height: block.height, time: block.timestamp, - }); + }; + wallet.addresses[address].transactions?.push(txSummary); + } + if (anyMatch) { + walletTransactions[walletKey].push(tx); } } } From f0e207dff2d7c1184f57346662bc254fd554c85c Mon Sep 17 00:00:00 2001 From: Mononaut Date: Fri, 4 Oct 2024 22:32:25 +0000 Subject: [PATCH 128/147] fix wallet balance graph bug --- .../components/custom-dashboard/custom-dashboard.component.ts | 2 +- frontend/src/app/components/wallet/wallet.component.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/frontend/src/app/components/custom-dashboard/custom-dashboard.component.ts b/frontend/src/app/components/custom-dashboard/custom-dashboard.component.ts index eb9818632..efbd9e19c 100644 --- a/frontend/src/app/components/custom-dashboard/custom-dashboard.component.ts +++ b/frontend/src/app/components/custom-dashboard/custom-dashboard.component.ts @@ -409,7 +409,7 @@ export class CustomDashboardComponent implements OnInit, OnDestroy, AfterViewIni newSummaries.push(txSummary); } } - return [...summaries, ...this.deduplicateWalletTransactions(newSummaries)]; + return this.deduplicateWalletTransactions([...summaries, ...newSummaries]); }, this.deduplicateWalletTransactions(Object.values(wallet).flatMap(address => address.transactions))) )), share(), diff --git a/frontend/src/app/components/wallet/wallet.component.ts b/frontend/src/app/components/wallet/wallet.component.ts index be04e1760..8ace95694 100644 --- a/frontend/src/app/components/wallet/wallet.component.ts +++ b/frontend/src/app/components/wallet/wallet.component.ts @@ -250,9 +250,9 @@ export class WalletComponent implements OnInit, OnDestroy { newSummaries.push(txSummary); } } - return [...summaries, ...this.deduplicateWalletTransactions(newSummaries)]; + return this.deduplicateWalletTransactions([...summaries, ...newSummaries]); }, this.deduplicateWalletTransactions(Object.values(wallet).flatMap(address => address.transactions))) - )), + )) ); this.walletStats$ = this.wallet$.pipe( From 2d2c55ce0ec0bd8a5d4b09459749e6957d063a8f Mon Sep 17 00:00:00 2001 From: Mononaut Date: Fri, 4 Oct 2024 22:42:02 +0000 Subject: [PATCH 129/147] Add link to wallet page from custom dashboard widget --- .../custom-dashboard/custom-dashboard.component.html | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/frontend/src/app/components/custom-dashboard/custom-dashboard.component.html b/frontend/src/app/components/custom-dashboard/custom-dashboard.component.html index 65f0dc0ab..13f49c5df 100644 --- a/frontend/src/app/components/custom-dashboard/custom-dashboard.component.html +++ b/frontend/src/app/components/custom-dashboard/custom-dashboard.component.html @@ -267,9 +267,11 @@
From 602aa4f948143ac10d1d08fea2f510c0ba0d7ca8 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Fri, 18 Oct 2024 03:02:30 +0000 Subject: [PATCH 130/147] fix wallet merge conflicts --- .../transactions-list/transactions-list.component.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/app/components/transactions-list/transactions-list.component.html b/frontend/src/app/components/transactions-list/transactions-list.component.html index bc38e0dd3..5ad1c798c 100644 --- a/frontend/src/app/components/transactions-list/transactions-list.component.html +++ b/frontend/src/app/components/transactions-list/transactions-list.component.html @@ -99,7 +99,7 @@
+ + + + } @else { + + } + + + + @if (!isLoadingTx) { + @if (transactionTime > 0) { + + + + + } + } @else { + + } + + + + @if (isLoadingTx) { + + } @else if (transactionTime > 0) { + + + + + } @else if (isLoadingFirstSeen) { + + + + + } + + + + @if (network !== 'liquid' && network !== 'liquidtestnet') { + @if (!isLoadingTx) { + @if (featuresEnabled) { + + + + + } + } @else { + + } + } + + + + @if (network === '') { + @if (!isLoadingTx) { + @if (auditStatus) { + + + + + } + } @else { + + } + } + + + + @if (!isLoadingTx) { + @if (!replaced && !isCached) { + + + + + } + } @else { + + } + + + + @if (!isLoadingTx) { + @if (isAcceleration || filters.length) { + + + + + } + } + + + + @if (!isLoadingTx) { + + + + + } @else { + + } + + + + @if (!isLoadingTx) { + + + + + } @else { + + } + + + + @if (!isLoadingTx) { + @if ((cpfpInfo && hasEffectiveFeeRate) || accelerationInfo) { + + @if (isAcceleration) { + + } @else { + + } + + + } + } @else { + + } + + + + + + + + + + + @if (network === '') { + @if (!isLoadingTx) { + + + @if (pool) { + + } @else { + + } + + } @else { + + } + } + + + + + + + \ No newline at end of file diff --git a/frontend/src/app/components/transaction/transaction-details/transaction-details.component.scss b/frontend/src/app/components/transaction/transaction-details/transaction-details.component.scss new file mode 100644 index 000000000..9bb32ba4a --- /dev/null +++ b/frontend/src/app/components/transaction/transaction-details/transaction-details.component.scss @@ -0,0 +1,183 @@ +.title-block { + flex-wrap: wrap; + align-items: baseline; + @media (min-width: 650px) { + flex-direction: row; + } + h1 { + margin: 0rem; + margin-right: 15px; + line-height: 1; + } +} + +.td-width { + width: 150px; + + @media (max-width: 768px) { + width: 175px; + } +} + +.badge { + position: relative; + top: -1px; +} + +.miner-name { + margin-right: 4px; + vertical-align: top; +} + +.pool-logo { + width: 25px; + height: 25px; + position: relative; + top: -1px; + margin-right: 2px; +} + +.badge.badge-accelerated { + background-color: var(--tertiary); + color: white; +} + +.btn-small-height { + line-height: 1; +} + +.row{ + flex-direction: column; + @media (min-width: 850px) { + flex-direction: row; + } +} + +.box.hidden { + visibility: hidden; + height: 0px; + padding-top: 0px; + padding-bottom: 0px; + margin-top: 0px; + margin-bottom: 0px; +} + +@media (max-width: 767.98px) { + .mobile-bottomcol { + margin-top: 15px; + } + + .details-table td:first-child { + white-space: pre-wrap; + } +} + +.fiat { + display: block; + @media (min-width: 768px){ + display: inline-block; + margin-left: 15px; + text-align: left; + } +} + +.table { + tr td { + padding: 0.75rem 0.5rem; + @media (min-width: 576px) { + padding: 0.75rem 0.75rem; + } + &:last-child { + text-align: right; + @media (min-width: 850px) { + text-align: left; + } + } + .btn { + display: block; + } + + &.wrap-cell { + white-space: normal; + } + } +} + +.effective-fee-container { + display: block; + @media (min-width: 768px){ + display: inline-block; + } + @media (max-width: 425px){ + display: flex; + flex-direction: column; + } +} + +@media (max-width: 767px){ + .hide-on-mobile { + display: none; + } +} + +.effective-fee-rating { + @media (max-width: 767px){ + margin-right: 0px !important; + } +} + +.btn-outline-info { + margin-top: 5px; + @media (min-width: 768px){ + margin-top: 0px; + } +} + +.eta { + display: flex; + flex-wrap: wrap; + align-content: center; + @media (min-width: 850px) { + justify-content: left !important; + } +} + +.accelerate { + @media (min-width: 850px) { + margin-left: auto; + } +} + +.etaDeepMempool { + flex-wrap: wrap; + @media (max-width: 849px) { + justify-content: right !important; + } +} + +.accelerateDeepMempool { + background-color: var(--tertiary); + margin-left: 5px; +} + +.goggles-icon { + display: block; + width: 2.7em; +} + +.pool-logo { + width: 15px; + height: 15px; + position: relative; + top: -1px; + margin-right: 2px; +} + +.oobFees { + color: #905cf4; +} + +.disabled { + opacity: 0.5; + pointer-events: none; +} diff --git a/frontend/src/app/components/transaction/transaction-details/transaction-details.component.ts b/frontend/src/app/components/transaction/transaction-details/transaction-details.component.ts new file mode 100644 index 000000000..59770d97e --- /dev/null +++ b/frontend/src/app/components/transaction/transaction-details/transaction-details.component.ts @@ -0,0 +1,52 @@ +import { Component, OnInit, Input, ChangeDetectionStrategy, Output, EventEmitter } from '@angular/core'; +import { Transaction } from '@interfaces/electrs.interface'; +import { Acceleration, CpfpInfo } from '@interfaces/node-api.interface'; +import { Pool, TxAuditStatus } from '@components/transaction/transaction.component'; +import { Observable } from 'rxjs'; +import { ETA } from '@app/services/eta.service'; +import { MiningStats } from '@app/services/mining.service'; +import { Filter } from '@app/shared/filters.utils'; + +@Component({ + selector: 'app-transaction-details', + templateUrl: './transaction-details.component.html', + styleUrls: ['./transaction-details.component.scss'], + changeDetection: ChangeDetectionStrategy.OnPush +}) +export class TransactionDetailsComponent implements OnInit { + @Input() network: string; + @Input() tx: Transaction; + @Input() isLoadingTx: boolean; + @Input() isMobile: boolean; + @Input() transactionTime: number; + @Input() isLoadingFirstSeen: boolean; + @Input() featuresEnabled: boolean; + @Input() auditStatus: TxAuditStatus; + @Input() filters: Filter[]; + @Input() miningStats: MiningStats; + @Input() pool: Pool | null; + @Input() isAcceleration: boolean; + @Input() hasEffectiveFeeRate: boolean; + @Input() cpfpInfo: CpfpInfo; + @Input() hasCpfp: boolean; + @Input() showCpfpDetails: boolean; + @Input() accelerationInfo: Acceleration; + @Input() acceleratorAvailable: boolean; + @Input() accelerateCtaType: string; + @Input() notAcceleratedOnLoad: boolean; + @Input() showAccelerationSummary: boolean; + @Input() eligibleForAcceleration: boolean; + @Input() replaced: boolean; + @Input() isCached: boolean; + @Input() ETA$: Observable; + + @Output() accelerateClicked = new EventEmitter(); + + constructor() {} + + ngOnInit(): void {} + + onAccelerateClicked(): void { + this.accelerateClicked.emit(true); + } +} diff --git a/frontend/src/app/components/transaction/transaction-extras.module.ts b/frontend/src/app/components/transaction/transaction-extras.module.ts new file mode 100644 index 000000000..ddfff51a5 --- /dev/null +++ b/frontend/src/app/components/transaction/transaction-extras.module.ts @@ -0,0 +1,11 @@ +import { NgModule } from '@angular/core'; + +@NgModule({ + declarations: [ + ], + imports: [ + ], + exports: [ + ] +}) +export class TransactionExtrasModule { } diff --git a/frontend/src/app/components/transaction/transaction.component.html b/frontend/src/app/components/transaction/transaction.component.html index 056b27fc5..ecd98d979 100644 --- a/frontend/src/app/components/transaction/transaction.component.html +++ b/frontend/src/app/components/transaction/transaction.component.html @@ -31,35 +31,35 @@
@if (!error) { -
-
- @if (isMobile) { -
-
Confidential
@@ -294,7 +294,7 @@
From 9ffcf2eca5902b66f33bc602b98c3b7b691d432d Mon Sep 17 00:00:00 2001 From: wiz Date: Fri, 18 Oct 2024 12:32:42 +0900 Subject: [PATCH 131/147] ops: Enable wallets in prod mempool backend config --- production/mempool-config.mainnet.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/production/mempool-config.mainnet.json b/production/mempool-config.mainnet.json index b6ee68da1..f57978043 100644 --- a/production/mempool-config.mainnet.json +++ b/production/mempool-config.mainnet.json @@ -150,5 +150,9 @@ "MEMPOOL_SERVICES": { "API": "https://mempool.space/api/v1/services", "ACCELERATIONS": true + }, + "WALLETS": { + "ENABLED": true, + "WALLETS": ["BITB"] } } From f0c76c13496bbc8b483fdc56924cd9e224c2c6b7 Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Sat, 19 Oct 2024 16:07:09 +0900 Subject: [PATCH 132/147] implement very simple demo mode --- .../app/components/start/start.component.ts | 23 +++++++++++++++++++ frontend/src/app/shared/common.utils.ts | 8 +++++++ 2 files changed, 31 insertions(+) diff --git a/frontend/src/app/components/start/start.component.ts b/frontend/src/app/components/start/start.component.ts index 78c31cde5..b4ef99462 100644 --- a/frontend/src/app/components/start/start.component.ts +++ b/frontend/src/app/components/start/start.component.ts @@ -3,6 +3,8 @@ import { Subscription } from 'rxjs'; import { MarkBlockState, StateService } from '../../services/state.service'; import { specialBlocks } from '../../app.constants'; import { BlockExtended } from '../../interfaces/node-api.interface'; +import { Router } from '@angular/router'; +import { sleep$ } from '../../shared/common.utils'; @Component({ selector: 'app-start', @@ -61,6 +63,7 @@ export class StartComponent implements OnInit, AfterViewChecked, OnDestroy { constructor( public stateService: StateService, private cd: ChangeDetectorRef, + private router: Router ) { this.isiOS = ['iPhone','iPod','iPad'].includes((navigator as any)?.userAgentData?.platform || navigator.platform); if (this.stateService.network === '') { @@ -68,7 +71,27 @@ export class StartComponent implements OnInit, AfterViewChecked, OnDestroy { } } + async demoMode() { + // @ts-ignore + if (!window.demoMode) { + // @ts-ignore + window.demoMode = true; + const paths = ['', 'acceleration', 'mining', 'graphs']; + let i = 0; + while ('Bitcoin is still alive') { + i = (i + 1) % paths.length; + this.router.navigateByUrl(paths[i]); + await sleep$(30000); + } + } + } + ngOnInit() { + // @ts-ignore + if (window.location.search === '?demo=1') { + this.demoMode(); + } + this.firstPageWidth = 40 + (this.blockWidth * this.dynamicBlocksAmount); this.blockCounterSubscription = this.stateService.blocks$.subscribe((blocks) => { this.blockCount = blocks.length; diff --git a/frontend/src/app/shared/common.utils.ts b/frontend/src/app/shared/common.utils.ts index 5ccb369f6..080ef5663 100644 --- a/frontend/src/app/shared/common.utils.ts +++ b/frontend/src/app/shared/common.utils.ts @@ -226,6 +226,14 @@ export function insecureRandomUUID(): string { return uuid.slice(0, -1); } +export function sleep$(ms: number): Promise { + return new Promise((resolve) => { + setTimeout(() => { + resolve(); + }, ms); + }); +} + // https://stackoverflow.com/a/60467595 export function md5(inputString): string { var hc="0123456789abcdef"; From 90ca77a46a59fbbfb18eda888f9d387b911fe939 Mon Sep 17 00:00:00 2001 From: wiz Date: Tue, 22 Oct 2024 15:08:57 +0900 Subject: [PATCH 133/147] Tweak demo mode to use all dashboards --- frontend/src/app/components/start/start.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/app/components/start/start.component.ts b/frontend/src/app/components/start/start.component.ts index b4ef99462..18578adea 100644 --- a/frontend/src/app/components/start/start.component.ts +++ b/frontend/src/app/components/start/start.component.ts @@ -76,7 +76,7 @@ export class StartComponent implements OnInit, AfterViewChecked, OnDestroy { if (!window.demoMode) { // @ts-ignore window.demoMode = true; - const paths = ['', 'acceleration', 'mining', 'graphs']; + const paths = ['', 'acceleration', 'mining', 'lightning']; let i = 0; while ('Bitcoin is still alive') { i = (i + 1) % paths.length; From 133df2e4bef4352c9a1cb4573e924cd27800d9e7 Mon Sep 17 00:00:00 2001 From: wiz Date: Tue, 22 Oct 2024 21:05:01 +0900 Subject: [PATCH 134/147] Use typescript path aliases for build time import path resolution --- frontend/src/app/app-routing.module.ts | 28 +-- frontend/src/app/app.module.server.ts | 12 +- frontend/src/app/app.module.ts | 54 ++--- frontend/src/app/bitcoin-graphs.module.ts | 2 +- frontend/src/app/bitcoin.utils.ts | 6 +- .../about/about-sponsors.component.ts | 2 +- .../app/components/about/about.component.ts | 16 +- .../src/app/components/about/about.module.ts | 6 +- .../accelerate-checkout.component.ts | 20 +- .../accelerate-fee-graph.component.ts | 4 +- .../acceleration-timeline.component.ts | 8 +- .../acceleration-fees-graph.component.ts | 18 +- .../acceleration-stats.component.ts | 2 +- .../accelerations-list.component.ts | 14 +- .../accelerator-dashboard.component.ts | 26 +-- .../active-acceleration-box.component.ts | 10 +- .../pending-stats/pending-stats.component.ts | 6 +- .../address-graph/address-graph.component.ts | 18 +- .../address-group/address-group.component.ts | 16 +- .../address-labels.component.ts | 6 +- .../address-transactions-widget.component.ts | 8 +- .../address/address-preview.component.ts | 18 +- .../components/address/address.component.ts | 20 +- .../addresses-treemap.component.ts | 16 +- .../amount-selector.component.ts | 4 +- .../app/components/amount/amount.component.ts | 4 +- .../src/app/components/app/app.component.ts | 8 +- .../asset-circulation.component.ts | 8 +- .../app/components/asset/asset.component.ts | 20 +- .../asset-group/asset-group.component.ts | 4 +- .../assets-featured.component.ts | 4 +- .../assets/assets-nav/assets-nav.component.ts | 12 +- .../app/components/assets/assets.component.ts | 10 +- .../balance-widget.component.ts | 6 +- .../bitcoin-invoice.component.ts | 2 +- .../block-fee-rates-graph.component.ts | 18 +- .../block-fees-graph.component.ts | 18 +- .../block-fees-subsidy-graph.component.ts | 20 +- .../block-filters/block-filters.component.ts | 6 +- .../block-health-graph.component.ts | 14 +- .../block-overview-graph.component.ts | 14 +- .../block-overview-graph/block-scene.ts | 6 +- .../block-overview-graph/tx-view.ts | 4 +- .../components/block-overview-graph/utils.ts | 2 +- .../block-overview-tooltip.component.ts | 10 +- .../block-rewards-graph.component.ts | 18 +- .../block-sizes-weights-graph.component.ts | 14 +- .../block-view/block-view.component.ts | 16 +- .../block/block-preview.component.ts | 18 +- .../block/block-transactions.component.ts | 8 +- .../app/components/block/block.component.ts | 32 +-- .../src/app/components/block/block.module.ts | 6 +- .../blockchain-blocks.component.ts | 8 +- .../blockchain/blockchain.component.ts | 4 +- .../blocks-list/blocks-list.component.ts | 14 +- .../calculator/calculator.component.ts | 4 +- .../clock-face/clock-face.component.ts | 2 +- .../app/components/clock/clock.component.ts | 10 +- .../clockchain/clockchain.component.ts | 2 +- .../custom-dashboard.component.ts | 20 +- ...difficulty-adjustments-table.components.ts | 6 +- .../difficulty-mining.component.ts | 2 +- .../difficulty/difficulty.component.ts | 4 +- .../eight-blocks/eight-blocks.component.ts | 16 +- .../app/components/faucet/faucet.component.ts | 18 +- .../fee-distribution-graph.component.ts | 8 +- .../components/fees-box/fees-box.component.ts | 8 +- .../fiat-selector/fiat-selector.component.ts | 6 +- .../app/components/footer/footer.component.ts | 4 +- .../app/components/graphs/graphs.component.ts | 4 +- .../hashrate-chart.component.ts | 18 +- .../hashrate-chart-pools.component.ts | 16 +- .../incoming-transactions-graph.component.ts | 8 +- .../language-selector.component.ts | 4 +- .../lbtc-pegs-graph.component.ts | 4 +- .../liquid-master-page.component.ts | 8 +- .../expired-utxos-stats.component.ts | 2 +- .../federation-addresses-list.component.ts | 8 +- .../federation-utxos-list.component.ts | 8 +- .../federation-wallet.component.ts | 2 +- .../recent-pegs-list.component.ts | 10 +- .../recent-pegs-stats.component.ts | 2 +- .../reserves-ratio.component.ts | 4 +- .../reserves-supply-stats.component.ts | 4 +- .../loading-indicator.component.ts | 4 +- .../master-page-preview.component.ts | 6 +- .../preview-title.component.ts | 2 +- .../master-page/master-page.component.ts | 12 +- .../mempool-block-overview.component.ts | 18 +- .../mempool-block-view.component.ts | 4 +- .../mempool-block/mempool-block.component.ts | 14 +- .../mempool-blocks.component.ts | 18 +- .../mempool-graph/mempool-graph.component.ts | 18 +- .../src/app/components/menu/menu.component.ts | 10 +- .../mining-dashboard.component.ts | 8 +- .../components/ord-data/ord-data.component.ts | 4 +- .../pool-ranking/pool-ranking.component.ts | 18 +- .../components/pool/pool-preview.component.ts | 12 +- .../src/app/components/pool/pool.component.ts | 12 +- .../privacy-policy.component.ts | 6 +- .../privacy-policy/privacy-policy.module.ts | 4 +- .../push-transaction.component.ts | 14 +- .../app/components/qrcode/qrcode.component.ts | 2 +- .../rate-unit-selector.component.ts | 4 +- .../components/rbf-list/rbf-list.component.ts | 14 +- .../rbf-timeline-tooltip.component.ts | 2 +- .../rbf-timeline/rbf-timeline.component.ts | 6 +- .../reward-stats/reward-stats.component.ts | 4 +- .../search-form/search-form.component.ts | 14 +- .../search-results.component.ts | 2 +- .../server-health/server-health.component.ts | 6 +- .../server-health/server-status.component.ts | 6 +- .../app/components/start/start.component.ts | 8 +- .../statistics/statistics.component.ts | 18 +- .../status-view/status-view.component.ts | 2 +- .../television/television.component.ts | 10 +- .../terms-of-service.component.ts | 6 +- .../terms-of-service.module.ts | 4 +- .../test-transactions.component.ts | 10 +- .../theme-selector.component.ts | 2 +- .../src/app/components/time/time.component.ts | 4 +- .../components/tracker/tracker.component.ts | 40 ++-- .../app/components/tracker/tracker.module.ts | 12 +- .../trademark-policy.component.ts | 6 +- .../trademark-policy.module.ts | 4 +- .../transaction/liquid-ublinding.ts | 4 +- .../transaction-preview.component.ts | 18 +- .../transaction/transaction.component.ts | 44 ++-- .../transaction/transaction.module.ts | 12 +- .../transactions-list.component.ts | 26 +-- .../twitter-widget.component.ts | 4 +- .../tx-bowtie-graph-tooltip.component.ts | 8 +- .../tx-bowtie-graph.component.ts | 14 +- .../tx-bowtie-graph/tx-bowtie.module.ts | 6 +- .../tx-features/tx-features.component.ts | 6 +- .../tx-fee-rating/tx-fee-rating.component.ts | 8 +- .../utxo-graph/utxo-graph.component.ts | 14 +- .../app/components/wallet/wallet.component.ts | 14 +- .../src/app/dashboard/dashboard.component.ts | 16 +- frontend/src/app/data-cy.directive.ts | 2 +- .../docs/api-docs/api-docs-nav.component.ts | 2 +- .../app/docs/api-docs/api-docs.component.ts | 6 +- .../code-template/code-template.component.ts | 2 +- frontend/src/app/docs/docs.module.ts | 14 +- frontend/src/app/docs/docs.routing.module.ts | 2 +- frontend/src/app/docs/docs/docs.component.ts | 8 +- frontend/src/app/fiat/fiat.component.ts | 4 +- frontend/src/app/graphs/graphs.module.ts | 76 +++--- .../src/app/graphs/graphs.routing.module.ts | 46 ++-- .../src/app/graphs/lightning-graphs.module.ts | 14 +- .../src/app/interfaces/electrs.interface.ts | 6 +- .../src/app/interfaces/websocket.interface.ts | 6 +- .../channel-box/channel-box.component.spec.ts | 2 +- .../channel-close-box.component.spec.ts | 2 +- .../channel/channel-preview.component.ts | 6 +- .../lightning/channel/channel.component.ts | 8 +- .../channels-list/channels-list.component.ts | 4 +- .../channels-statistics.component.ts | 2 +- .../group/group-preview.component.ts | 8 +- .../app/lightning/group/group.component.ts | 6 +- .../justice-list/justice-list.component.ts | 8 +- .../app/lightning/lightning-api.service.ts | 4 +- .../lightning-dashboard.component.ts | 10 +- .../lightning/lightning-previews.module.ts | 18 +- .../lightning-previews.routing.module.ts | 8 +- .../lightning-wrapper.component.ts | 2 +- .../src/app/lightning/lightning.module.ts | 66 +++--- .../app/lightning/lightning.routing.module.ts | 20 +- .../node-fee-chart.component.ts | 10 +- .../node-statistics-chart.component.ts | 10 +- .../node-statistics.component.ts | 2 +- .../lightning/node/node-preview.component.ts | 10 +- .../src/app/lightning/node/node.component.ts | 14 +- .../nodes-channels-map.component.ts | 20 +- .../nodes-channels/node-channels.component.ts | 14 +- .../nodes-map/nodes-map.component.ts | 18 +- .../nodes-networks-chart.component.ts | 18 +- .../nodes-per-country-chart.component.ts | 18 +- .../nodes-per-country.component.ts | 8 +- .../nodes-per-isp-chart.component.ts | 18 +- .../nodes-per-isp-preview.component.ts | 10 +- .../nodes-per-isp/nodes-per-isp.component.ts | 8 +- .../nodes-ranking/nodes-ranking.component.ts | 4 +- .../oldest-nodes/oldest-nodes.component.ts | 8 +- .../top-nodes-per-capacity.component.ts | 10 +- .../top-nodes-per-channels.component.ts | 10 +- .../nodes-rankings-dashboard.component.ts | 6 +- .../lightning-statistics-chart.component.ts | 18 +- .../src/app/liquid/liquid-graphs.module.ts | 2 +- .../app/liquid/liquid-master-page.module.ts | 46 ++-- frontend/src/app/master-page.module.ts | 32 +-- frontend/src/app/previews.module.ts | 12 +- frontend/src/app/previews.routing.module.ts | 10 +- frontend/src/app/services/api.service.ts | 12 +- frontend/src/app/services/assets.service.ts | 6 +- frontend/src/app/services/cache.service.ts | 10 +- .../src/app/services/electrs-api.service.ts | 6 +- frontend/src/app/services/eta.service.ts | 14 +- frontend/src/app/services/language.service.ts | 2 +- frontend/src/app/services/mining.service.ts | 8 +- .../src/app/services/navigation.service.ts | 4 +- frontend/src/app/services/ord-api.service.ts | 8 +- frontend/src/app/services/preload.service.ts | 2 +- .../src/app/services/services-api.service.ts | 12 +- frontend/src/app/services/state.service.ts | 10 +- frontend/src/app/services/theme.service.ts | 6 +- frontend/src/app/services/time.service.ts | 2 +- .../src/app/services/websocket.service.ts | 8 +- frontend/src/app/shared/address-utils.ts | 8 +- frontend/src/app/shared/common.utils.ts | 4 +- .../address-type/address-type.component.ts | 2 +- .../shared/components/btc/btc.component.ts | 2 +- .../components/fee-rate/fee-rate.component.ts | 2 +- .../geolocation/geolocation.component.ts | 2 +- .../global-footer/global-footer.component.ts | 14 +- .../shared/components/sats/sats.component.ts | 2 +- .../testnet-alert/testnet-alert.component.ts | 4 +- .../weight-directives/weight-directives.ts | 4 +- frontend/src/app/shared/ord/rune.utils.ts | 2 +- .../app/shared/pipes/fiat-currency.pipe.ts | 4 +- .../app/shared/pipes/fiat-shortener.pipe.ts | 4 +- .../pipes/relative-url/relative-url.pipe.ts | 2 +- frontend/src/app/shared/regex.utils.ts | 2 +- frontend/src/app/shared/shared.module.ts | 218 +++++++++--------- frontend/src/app/shared/transaction.utils.ts | 8 +- frontend/tsconfig.app.json | 7 +- 226 files changed, 1274 insertions(+), 1269 deletions(-) diff --git a/frontend/src/app/app-routing.module.ts b/frontend/src/app/app-routing.module.ts index f385b7c20..b4c9ed1ac 100644 --- a/frontend/src/app/app-routing.module.ts +++ b/frontend/src/app/app-routing.module.ts @@ -1,15 +1,15 @@ import { NgModule } from '@angular/core'; import { Routes, RouterModule } from '@angular/router'; -import { AppPreloadingStrategy } from './app.preloading-strategy' -import { BlockViewComponent } from './components/block-view/block-view.component'; -import { EightBlocksComponent } from './components/eight-blocks/eight-blocks.component'; -import { MempoolBlockViewComponent } from './components/mempool-block-view/mempool-block-view.component'; -import { ClockComponent } from './components/clock/clock.component'; -import { StatusViewComponent } from './components/status-view/status-view.component'; -import { AddressGroupComponent } from './components/address-group/address-group.component'; -import { TrackerComponent } from './components/tracker/tracker.component'; -import { AccelerateCheckout } from './components/accelerate-checkout/accelerate-checkout.component'; -import { TrackerGuard } from './route-guards'; +import { AppPreloadingStrategy } from '@app/app.preloading-strategy' +import { BlockViewComponent } from '@components/block-view/block-view.component'; +import { EightBlocksComponent } from '@components/eight-blocks/eight-blocks.component'; +import { MempoolBlockViewComponent } from '@components/mempool-block-view/mempool-block-view.component'; +import { ClockComponent } from '@components/clock/clock.component'; +import { StatusViewComponent } from '@components/status-view/status-view.component'; +import { AddressGroupComponent } from '@components/address-group/address-group.component'; +import { TrackerComponent } from '@components/tracker/tracker.component'; +import { AccelerateCheckout } from '@components/accelerate-checkout/accelerate-checkout.component'; +import { TrackerGuard } from '@app/route-guards'; const browserWindow = window || {}; // @ts-ignore @@ -22,12 +22,12 @@ let routes: Routes = [ { path: '', pathMatch: 'full', - loadChildren: () => import('./bitcoin-graphs.module').then(m => m.BitcoinGraphsModule), + loadChildren: () => import('@app/bitcoin-graphs.module').then(m => m.BitcoinGraphsModule), data: { preload: true }, }, { path: '', - loadChildren: () => import('./master-page.module').then(m => m.MasterPageModule), + loadChildren: () => import('@app/master-page.module').then(m => m.MasterPageModule), data: { preload: true }, }, { @@ -45,7 +45,7 @@ let routes: Routes = [ }, { path: '', - loadChildren: () => import('./bitcoin-graphs.module').then(m => m.BitcoinGraphsModule), + loadChildren: () => import('@app/bitcoin-graphs.module').then(m => m.BitcoinGraphsModule), data: { preload: true }, }, { @@ -145,7 +145,7 @@ let routes: Routes = [ path: 'tx', canMatch: [TrackerGuard], runGuardsAndResolvers: 'always', - loadChildren: () => import('./components/tracker/tracker.module').then(m => m.TrackerModule), + loadChildren: () => import('@components/tracker/tracker.module').then(m => m.TrackerModule), }, { path: '', diff --git a/frontend/src/app/app.module.server.ts b/frontend/src/app/app.module.server.ts index 4149fa593..44cfe674d 100644 --- a/frontend/src/app/app.module.server.ts +++ b/frontend/src/app/app.module.server.ts @@ -2,11 +2,11 @@ import { HTTP_INTERCEPTORS } from '@angular/common/http'; import { NgModule } from '@angular/core'; import { ServerModule } from '@angular/platform-server'; -import { ZONE_SERVICE } from './injection-tokens'; -import { AppModule } from './app.module'; -import { AppComponent } from './components/app/app.component'; -import { HttpCacheInterceptor } from './services/http-cache.interceptor'; -import { ZoneService } from './services/zone.service'; +import { ZONE_SERVICE } from '@app/injection-tokens'; +import { AppModule } from '@app/app.module'; +import { AppComponent } from '@components/app/app.component'; +import { HttpCacheInterceptor } from '@app/services/http-cache.interceptor'; +import { ZoneService } from '@app/services/zone.service'; @NgModule({ @@ -20,4 +20,4 @@ import { ZoneService } from './services/zone.service'; ], bootstrap: [AppComponent], }) -export class AppServerModule {} \ No newline at end of file +export class AppServerModule {} diff --git a/frontend/src/app/app.module.ts b/frontend/src/app/app.module.ts index 52fbc9f87..7a97c27e3 100644 --- a/frontend/src/app/app.module.ts +++ b/frontend/src/app/app.module.ts @@ -2,33 +2,33 @@ import { BrowserModule } from '@angular/platform-browser'; import { ModuleWithProviders, NgModule } from '@angular/core'; import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; -import { ZONE_SERVICE } from './injection-tokens'; -import { AppRoutingModule } from './app-routing.module'; -import { AppComponent } from './components/app/app.component'; -import { ElectrsApiService } from './services/electrs-api.service'; -import { OrdApiService } from './services/ord-api.service'; -import { StateService } from './services/state.service'; -import { CacheService } from './services/cache.service'; -import { PriceService } from './services/price.service'; -import { EnterpriseService } from './services/enterprise.service'; -import { WebsocketService } from './services/websocket.service'; -import { AudioService } from './services/audio.service'; -import { PreloadService } from './services/preload.service'; -import { SeoService } from './services/seo.service'; -import { OpenGraphService } from './services/opengraph.service'; -import { ZoneService } from './services/zone-shim.service'; -import { SharedModule } from './shared/shared.module'; -import { StorageService } from './services/storage.service'; -import { HttpCacheInterceptor } from './services/http-cache.interceptor'; -import { LanguageService } from './services/language.service'; -import { ThemeService } from './services/theme.service'; -import { TimeService } from './services/time.service'; -import { FiatShortenerPipe } from './shared/pipes/fiat-shortener.pipe'; -import { FiatCurrencyPipe } from './shared/pipes/fiat-currency.pipe'; -import { ShortenStringPipe } from './shared/pipes/shorten-string-pipe/shorten-string.pipe'; -import { CapAddressPipe } from './shared/pipes/cap-address-pipe/cap-address-pipe'; -import { AppPreloadingStrategy } from './app.preloading-strategy'; -import { ServicesApiServices } from './services/services-api.service'; +import { ZONE_SERVICE } from '@app/injection-tokens'; +import { AppRoutingModule } from '@app/app-routing.module'; +import { AppComponent } from '@components/app/app.component'; +import { ElectrsApiService } from '@app/services/electrs-api.service'; +import { OrdApiService } from '@app/services/ord-api.service'; +import { StateService } from '@app/services/state.service'; +import { CacheService } from '@app/services/cache.service'; +import { PriceService } from '@app/services/price.service'; +import { EnterpriseService } from '@app/services/enterprise.service'; +import { WebsocketService } from '@app/services/websocket.service'; +import { AudioService } from '@app/services/audio.service'; +import { PreloadService } from '@app/services/preload.service'; +import { SeoService } from '@app/services/seo.service'; +import { OpenGraphService } from '@app/services/opengraph.service'; +import { ZoneService } from '@app/services/zone-shim.service'; +import { SharedModule } from '@app/shared/shared.module'; +import { StorageService } from '@app/services/storage.service'; +import { HttpCacheInterceptor } from '@app/services/http-cache.interceptor'; +import { LanguageService } from '@app/services/language.service'; +import { ThemeService } from '@app/services/theme.service'; +import { TimeService } from '@app/services/time.service'; +import { FiatShortenerPipe } from '@app/shared/pipes/fiat-shortener.pipe'; +import { FiatCurrencyPipe } from '@app/shared/pipes/fiat-currency.pipe'; +import { ShortenStringPipe } from '@app/shared/pipes/shorten-string-pipe/shorten-string.pipe'; +import { CapAddressPipe } from '@app/shared/pipes/cap-address-pipe/cap-address-pipe'; +import { AppPreloadingStrategy } from '@app/app.preloading-strategy'; +import { ServicesApiServices } from '@app/services/services-api.service'; import { DatePipe } from '@angular/common'; const providers = [ diff --git a/frontend/src/app/bitcoin-graphs.module.ts b/frontend/src/app/bitcoin-graphs.module.ts index 710743245..f161c8531 100644 --- a/frontend/src/app/bitcoin-graphs.module.ts +++ b/frontend/src/app/bitcoin-graphs.module.ts @@ -1,7 +1,7 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { Routes, RouterModule } from '@angular/router'; -import { MasterPageComponent } from './components/master-page/master-page.component'; +import { MasterPageComponent } from '@components/master-page/master-page.component'; const routes: Routes = [ { diff --git a/frontend/src/app/bitcoin.utils.ts b/frontend/src/app/bitcoin.utils.ts index ae522121c..57f952301 100644 --- a/frontend/src/app/bitcoin.utils.ts +++ b/frontend/src/app/bitcoin.utils.ts @@ -1,5 +1,5 @@ -import { Transaction, Vin } from './interfaces/electrs.interface'; -import { Hash } from './shared/sha256'; +import { Transaction, Vin } from '@app/interfaces/electrs.interface'; +import { Hash } from '@app/shared/sha256'; const P2SH_P2WPKH_COST = 21 * 4; // the WU cost for the non-witness part of P2SH-P2WPKH const P2SH_P2WSH_COST = 35 * 4; // the WU cost for the non-witness part of P2SH-P2WSH @@ -303,4 +303,4 @@ export async function calcScriptHash$(script: string): Promise { return hashArray .map((bytes) => bytes.toString(16).padStart(2, '0')) .join(''); -} \ No newline at end of file +} diff --git a/frontend/src/app/components/about/about-sponsors.component.ts b/frontend/src/app/components/about/about-sponsors.component.ts index 6a47c3bd4..f42944173 100644 --- a/frontend/src/app/components/about/about-sponsors.component.ts +++ b/frontend/src/app/components/about/about-sponsors.component.ts @@ -1,5 +1,5 @@ import { Component, Input } from '@angular/core'; -import { EnterpriseService } from '../../services/enterprise.service'; +import { EnterpriseService } from '@app/services/enterprise.service'; @Component({ selector: 'app-about-sponsors', diff --git a/frontend/src/app/components/about/about.component.ts b/frontend/src/app/components/about/about.component.ts index 44bee5828..d07535708 100644 --- a/frontend/src/app/components/about/about.component.ts +++ b/frontend/src/app/components/about/about.component.ts @@ -1,16 +1,16 @@ import { ChangeDetectionStrategy, Component, ElementRef, Inject, LOCALE_ID, OnInit, ViewChild } from '@angular/core'; -import { WebsocketService } from '../../services/websocket.service'; -import { SeoService } from '../../services/seo.service'; -import { OpenGraphService } from '../../services/opengraph.service'; -import { StateService } from '../../services/state.service'; +import { WebsocketService } from '@app/services/websocket.service'; +import { SeoService } from '@app/services/seo.service'; +import { OpenGraphService } from '@app/services/opengraph.service'; +import { StateService } from '@app/services/state.service'; import { Observable } from 'rxjs'; -import { ApiService } from '../../services/api.service'; -import { IBackendInfo } from '../../interfaces/websocket.interface'; +import { ApiService } from '@app/services/api.service'; +import { IBackendInfo } from '@app/interfaces/websocket.interface'; import { Router, ActivatedRoute } from '@angular/router'; import { map, share, tap } from 'rxjs/operators'; -import { ITranslators } from '../../interfaces/node-api.interface'; +import { ITranslators } from '@app/interfaces/node-api.interface'; import { DOCUMENT } from '@angular/common'; -import { EnterpriseService } from '../../services/enterprise.service'; +import { EnterpriseService } from '@app/services/enterprise.service'; @Component({ selector: 'app-about', diff --git a/frontend/src/app/components/about/about.module.ts b/frontend/src/app/components/about/about.module.ts index 7e8ed42d0..8324876b1 100644 --- a/frontend/src/app/components/about/about.module.ts +++ b/frontend/src/app/components/about/about.module.ts @@ -1,9 +1,9 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { Routes, RouterModule } from '@angular/router'; -import { AboutComponent } from './about.component'; -import { AboutSponsorsComponent } from './about-sponsors.component'; -import { SharedModule } from '../../shared/shared.module'; +import { AboutComponent } from '@components/about/about.component'; +import { AboutSponsorsComponent } from '@components/about/about-sponsors.component'; +import { SharedModule } from '@app/shared/shared.module'; const routes: Routes = [ { diff --git a/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts b/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts index e9888f58b..ad76ee8ae 100644 --- a/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts +++ b/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts @@ -1,16 +1,16 @@ /* eslint-disable no-console */ import { Component, OnInit, OnDestroy, Output, EventEmitter, Input, ChangeDetectorRef, SimpleChanges, HostListener } from '@angular/core'; import { Subscription, tap, of, catchError, Observable, switchMap } from 'rxjs'; -import { ServicesApiServices } from '../../services/services-api.service'; -import { md5, insecureRandomUUID } from '../../shared/common.utils'; -import { StateService } from '../../services/state.service'; -import { AudioService } from '../../services/audio.service'; -import { ETA, EtaService } from '../../services/eta.service'; -import { Transaction } from '../../interfaces/electrs.interface'; -import { MiningStats } from '../../services/mining.service'; -import { IAuth, AuthServiceMempool } from '../../services/auth.service'; -import { EnterpriseService } from '../../services/enterprise.service'; -import { ApiService } from '../../services/api.service'; +import { ServicesApiServices } from '@app/services/services-api.service'; +import { md5, insecureRandomUUID } from '@app/shared/common.utils'; +import { StateService } from '@app/services/state.service'; +import { AudioService } from '@app/services/audio.service'; +import { ETA, EtaService } from '@app/services/eta.service'; +import { Transaction } from '@app/interfaces/electrs.interface'; +import { MiningStats } from '@app/services/mining.service'; +import { IAuth, AuthServiceMempool } from '@app/services/auth.service'; +import { EnterpriseService } from '@app/services/enterprise.service'; +import { ApiService } from '@app/services/api.service'; import { isDevMode } from '@angular/core'; export type PaymentMethod = 'balance' | 'bitcoin' | 'cashapp' | 'applePay' | 'googlePay'; diff --git a/frontend/src/app/components/accelerate-checkout/accelerate-fee-graph.component.ts b/frontend/src/app/components/accelerate-checkout/accelerate-fee-graph.component.ts index 393add6ca..16c1a3aa8 100644 --- a/frontend/src/app/components/accelerate-checkout/accelerate-fee-graph.component.ts +++ b/frontend/src/app/components/accelerate-checkout/accelerate-fee-graph.component.ts @@ -1,6 +1,6 @@ import { Component, Input, Output, OnChanges, EventEmitter, HostListener, OnInit, ViewChild, ElementRef, AfterViewInit, OnDestroy, ChangeDetectorRef } from '@angular/core'; -import { Transaction } from '../../interfaces/electrs.interface'; -import { AccelerationEstimate, RateOption } from './accelerate-checkout.component'; +import { Transaction } from '@app/interfaces/electrs.interface'; +import { AccelerationEstimate, RateOption } from '@components/accelerate-checkout/accelerate-checkout.component'; interface GraphBar { rate: number; diff --git a/frontend/src/app/components/acceleration-timeline/acceleration-timeline.component.ts b/frontend/src/app/components/acceleration-timeline/acceleration-timeline.component.ts index b0cf98d86..26ddaf260 100644 --- a/frontend/src/app/components/acceleration-timeline/acceleration-timeline.component.ts +++ b/frontend/src/app/components/acceleration-timeline/acceleration-timeline.component.ts @@ -1,8 +1,8 @@ import { Component, Input, OnInit, OnChanges, HostListener } from '@angular/core'; -import { ETA } from '../../services/eta.service'; -import { Transaction } from '../../interfaces/electrs.interface'; -import { Acceleration, SinglePoolStats } from '../../interfaces/node-api.interface'; -import { MiningService } from '../../services/mining.service'; +import { ETA } from '@app/services/eta.service'; +import { Transaction } from '@app/interfaces/electrs.interface'; +import { Acceleration, SinglePoolStats } from '@app/interfaces/node-api.interface'; +import { MiningService } from '@app/services/mining.service'; @Component({ selector: 'app-acceleration-timeline', diff --git a/frontend/src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts b/frontend/src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts index 68a2bdd52..cc60de95c 100644 --- a/frontend/src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts +++ b/frontend/src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts @@ -1,18 +1,18 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, Input, LOCALE_ID, NgZone, OnChanges, OnDestroy, OnInit, SimpleChanges } from '@angular/core'; -import { EChartsOption } from '../../../graphs/echarts'; +import { EChartsOption } from '@app/graphs/echarts'; import { Observable, Subject, Subscription, combineLatest, fromEvent, merge, share } from 'rxjs'; import { startWith, switchMap, tap } from 'rxjs/operators'; -import { SeoService } from '../../../services/seo.service'; +import { SeoService } from '@app/services/seo.service'; import { formatNumber } from '@angular/common'; import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; -import { download, formatterXAxis, formatterXAxisLabel, formatterXAxisTimeCategory } from '../../../shared/graphs.utils'; -import { StorageService } from '../../../services/storage.service'; -import { MiningService } from '../../../services/mining.service'; +import { download, formatterXAxis, formatterXAxisLabel, formatterXAxisTimeCategory } from '@app/shared/graphs.utils'; +import { StorageService } from '@app/services/storage.service'; +import { MiningService } from '@app/services/mining.service'; import { ActivatedRoute, Router } from '@angular/router'; -import { Acceleration } from '../../../interfaces/node-api.interface'; -import { ServicesApiServices } from '../../../services/services-api.service'; -import { StateService } from '../../../services/state.service'; -import { RelativeUrlPipe } from '../../../shared/pipes/relative-url/relative-url.pipe'; +import { Acceleration } from '@app/interfaces/node-api.interface'; +import { ServicesApiServices } from '@app/services/services-api.service'; +import { StateService } from '@app/services/state.service'; +import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; @Component({ selector: 'app-acceleration-fees-graph', diff --git a/frontend/src/app/components/acceleration/acceleration-stats/acceleration-stats.component.ts b/frontend/src/app/components/acceleration/acceleration-stats/acceleration-stats.component.ts index 392f1392b..65a1e4eb5 100644 --- a/frontend/src/app/components/acceleration/acceleration-stats/acceleration-stats.component.ts +++ b/frontend/src/app/components/acceleration/acceleration-stats/acceleration-stats.component.ts @@ -1,6 +1,6 @@ import { ChangeDetectionStrategy, Component, Input, OnChanges, OnInit } from '@angular/core'; import { Observable } from 'rxjs'; -import { ServicesApiServices } from '../../../services/services-api.service'; +import { ServicesApiServices } from '@app/services/services-api.service'; export type AccelerationStats = { totalRequested: number; diff --git a/frontend/src/app/components/acceleration/accelerations-list/accelerations-list.component.ts b/frontend/src/app/components/acceleration/accelerations-list/accelerations-list.component.ts index a334f096a..67146051d 100644 --- a/frontend/src/app/components/acceleration/accelerations-list/accelerations-list.component.ts +++ b/frontend/src/app/components/acceleration/accelerations-list/accelerations-list.component.ts @@ -1,12 +1,12 @@ import { Component, OnInit, ChangeDetectionStrategy, Input, ChangeDetectorRef, OnDestroy, Inject, LOCALE_ID } from '@angular/core'; import { BehaviorSubject, Observable, Subscription, catchError, combineLatest, filter, of, switchMap, tap, throttleTime, timer } from 'rxjs'; -import { Acceleration, BlockExtended, SinglePoolStats } from '../../../interfaces/node-api.interface'; -import { StateService } from '../../../services/state.service'; -import { WebsocketService } from '../../../services/websocket.service'; -import { ServicesApiServices } from '../../../services/services-api.service'; -import { SeoService } from '../../../services/seo.service'; +import { Acceleration, BlockExtended, SinglePoolStats } from '@app/interfaces/node-api.interface'; +import { StateService } from '@app/services/state.service'; +import { WebsocketService } from '@app/services/websocket.service'; +import { ServicesApiServices } from '@app/services/services-api.service'; +import { SeoService } from '@app/services/seo.service'; import { ActivatedRoute, Router } from '@angular/router'; -import { MiningService } from '../../../services/mining.service'; +import { MiningService } from '@app/services/mining.service'; @Component({ selector: 'app-accelerations-list', @@ -151,4 +151,4 @@ export class AccelerationsListComponent implements OnInit, OnDestroy { this.paramSubscription?.unsubscribe(); this.keyNavigationSubscription?.unsubscribe(); } -} \ No newline at end of file +} diff --git a/frontend/src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.ts b/frontend/src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.ts index d84c6e97c..2977ab04d 100644 --- a/frontend/src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.ts +++ b/frontend/src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.ts @@ -1,18 +1,18 @@ import { ChangeDetectionStrategy, Component, HostListener, Inject, OnDestroy, OnInit, PLATFORM_ID } from '@angular/core'; -import { SeoService } from '../../../services/seo.service'; -import { OpenGraphService } from '../../../services/opengraph.service'; -import { WebsocketService } from '../../../services/websocket.service'; -import { Acceleration, BlockExtended } from '../../../interfaces/node-api.interface'; -import { StateService } from '../../../services/state.service'; +import { SeoService } from '@app/services/seo.service'; +import { OpenGraphService } from '@app/services/opengraph.service'; +import { WebsocketService } from '@app/services/websocket.service'; +import { Acceleration, BlockExtended } from '@app/interfaces/node-api.interface'; +import { StateService } from '@app/services/state.service'; import { Observable, Subscription, catchError, combineLatest, distinctUntilChanged, map, of, share, switchMap, tap } from 'rxjs'; -import { Color } from '../../block-overview-graph/sprite-types'; -import { hexToColor } from '../../block-overview-graph/utils'; -import TxView from '../../block-overview-graph/tx-view'; -import { feeLevels, defaultMempoolFeeColors, contrastMempoolFeeColors } from '../../../app.constants'; -import { ServicesApiServices } from '../../../services/services-api.service'; -import { detectWebGL } from '../../../shared/graphs.utils'; -import { AudioService } from '../../../services/audio.service'; -import { ThemeService } from '../../../services/theme.service'; +import { Color } from '@components/block-overview-graph/sprite-types'; +import { hexToColor } from '@components/block-overview-graph/utils'; +import TxView from '@components/block-overview-graph/tx-view'; +import { feeLevels, defaultMempoolFeeColors, contrastMempoolFeeColors } from '@app/app.constants'; +import { ServicesApiServices } from '@app/services/services-api.service'; +import { detectWebGL } from '@app/shared/graphs.utils'; +import { AudioService } from '@app/services/audio.service'; +import { ThemeService } from '@app/services/theme.service'; const acceleratedColor: Color = hexToColor('8F5FF6'); const normalColors = defaultMempoolFeeColors.map(hex => hexToColor(hex + '5F')); diff --git a/frontend/src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.ts b/frontend/src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.ts index fb727c1a4..cd45a0d94 100644 --- a/frontend/src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.ts +++ b/frontend/src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.ts @@ -1,8 +1,8 @@ import { Component, ChangeDetectionStrategy, Input, Output, OnChanges, SimpleChanges, EventEmitter, ChangeDetectorRef } from '@angular/core'; -import { Transaction } from '../../../interfaces/electrs.interface'; -import { Acceleration, SinglePoolStats } from '../../../interfaces/node-api.interface'; -import { EChartsOption, PieSeriesOption } from '../../../graphs/echarts'; -import { MiningStats } from '../../../services/mining.service'; +import { Transaction } from '@app/interfaces/electrs.interface'; +import { Acceleration, SinglePoolStats } from '@app/interfaces/node-api.interface'; +import { EChartsOption, PieSeriesOption } from '@app/graphs/echarts'; +import { MiningStats } from '@app/services/mining.service'; function lighten(color, p): { r, g, b } { return { @@ -148,4 +148,4 @@ export class ActiveAccelerationBox implements OnChanges { onToggleCpfp(): void { this.toggleCpfp.emit(); } -} \ No newline at end of file +} diff --git a/frontend/src/app/components/acceleration/pending-stats/pending-stats.component.ts b/frontend/src/app/components/acceleration/pending-stats/pending-stats.component.ts index 568e60d7e..a7ffb51da 100644 --- a/frontend/src/app/components/acceleration/pending-stats/pending-stats.component.ts +++ b/frontend/src/app/components/acceleration/pending-stats/pending-stats.component.ts @@ -1,9 +1,9 @@ import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core'; import { Observable, of } from 'rxjs'; import { switchMap } from 'rxjs/operators'; -import { Acceleration } from '../../../interfaces/node-api.interface'; -import { StateService } from '../../../services/state.service'; -import { WebsocketService } from '../../../services/websocket.service'; +import { Acceleration } from '@app/interfaces/node-api.interface'; +import { StateService } from '@app/services/state.service'; +import { WebsocketService } from '@app/services/websocket.service'; @Component({ selector: 'app-pending-stats', diff --git a/frontend/src/app/components/address-graph/address-graph.component.ts b/frontend/src/app/components/address-graph/address-graph.component.ts index 229199aa2..76a4a2836 100644 --- a/frontend/src/app/components/address-graph/address-graph.component.ts +++ b/frontend/src/app/components/address-graph/address-graph.component.ts @@ -1,16 +1,16 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, Input, LOCALE_ID, NgZone, OnChanges, OnDestroy, SimpleChanges } from '@angular/core'; -import { echarts, EChartsOption } from '../../graphs/echarts'; +import { echarts, EChartsOption } from '@app/graphs/echarts'; import { BehaviorSubject, Observable, Subscription, combineLatest, of } from 'rxjs'; import { catchError, map, switchMap, tap } from 'rxjs/operators'; -import { AddressTxSummary, ChainStats } from '../../interfaces/electrs.interface'; -import { ElectrsApiService } from '../../services/electrs-api.service'; -import { AmountShortenerPipe } from '../../shared/pipes/amount-shortener.pipe'; +import { AddressTxSummary, ChainStats } from '@app/interfaces/electrs.interface'; +import { ElectrsApiService } from '@app/services/electrs-api.service'; +import { AmountShortenerPipe } from '@app/shared/pipes/amount-shortener.pipe'; import { Router } from '@angular/router'; -import { RelativeUrlPipe } from '../../shared/pipes/relative-url/relative-url.pipe'; -import { StateService } from '../../services/state.service'; -import { PriceService } from '../../services/price.service'; -import { FiatCurrencyPipe } from '../../shared/pipes/fiat-currency.pipe'; -import { FiatShortenerPipe } from '../../shared/pipes/fiat-shortener.pipe'; +import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; +import { StateService } from '@app/services/state.service'; +import { PriceService } from '@app/services/price.service'; +import { FiatCurrencyPipe } from '@app/shared/pipes/fiat-currency.pipe'; +import { FiatShortenerPipe } from '@app/shared/pipes/fiat-shortener.pipe'; const periodSeconds = { '1d': (60 * 60 * 24), diff --git a/frontend/src/app/components/address-group/address-group.component.ts b/frontend/src/app/components/address-group/address-group.component.ts index 30bee7543..a65fc7d16 100644 --- a/frontend/src/app/components/address-group/address-group.component.ts +++ b/frontend/src/app/components/address-group/address-group.component.ts @@ -1,15 +1,15 @@ import { Component, OnInit, OnDestroy, ChangeDetectorRef, HostListener } from '@angular/core'; import { ActivatedRoute, ParamMap } from '@angular/router'; -import { ElectrsApiService } from '../../services/electrs-api.service'; +import { ElectrsApiService } from '@app/services/electrs-api.service'; import { switchMap, catchError } from 'rxjs/operators'; -import { Address, Transaction } from '../../interfaces/electrs.interface'; -import { WebsocketService } from '../../services/websocket.service'; -import { StateService } from '../../services/state.service'; -import { AudioService } from '../../services/audio.service'; -import { ApiService } from '../../services/api.service'; +import { Address, Transaction } from '@app/interfaces/electrs.interface'; +import { WebsocketService } from '@app/services/websocket.service'; +import { StateService } from '@app/services/state.service'; +import { AudioService } from '@app/services/audio.service'; +import { ApiService } from '@app/services/api.service'; import { of, Subscription, forkJoin } from 'rxjs'; -import { SeoService } from '../../services/seo.service'; -import { AddressInformation } from '../../interfaces/node-api.interface'; +import { SeoService } from '@app/services/seo.service'; +import { AddressInformation } from '@app/interfaces/node-api.interface'; @Component({ selector: 'app-address-group', diff --git a/frontend/src/app/components/address-labels/address-labels.component.ts b/frontend/src/app/components/address-labels/address-labels.component.ts index ff3c27240..5e1655841 100644 --- a/frontend/src/app/components/address-labels/address-labels.component.ts +++ b/frontend/src/app/components/address-labels/address-labels.component.ts @@ -1,7 +1,7 @@ import { Component, ChangeDetectionStrategy, Input, OnChanges } from '@angular/core'; -import { Vin, Vout } from '../../interfaces/electrs.interface'; -import { StateService } from '../../services/state.service'; -import { AddressType, AddressTypeInfo } from '../../shared/address-utils'; +import { Vin, Vout } from '@app/interfaces/electrs.interface'; +import { StateService } from '@app/services/state.service'; +import { AddressType, AddressTypeInfo } from '@app/shared/address-utils'; @Component({ selector: 'app-address-labels', diff --git a/frontend/src/app/components/address-transactions-widget/address-transactions-widget.component.ts b/frontend/src/app/components/address-transactions-widget/address-transactions-widget.component.ts index 83424791b..bde817b8e 100644 --- a/frontend/src/app/components/address-transactions-widget/address-transactions-widget.component.ts +++ b/frontend/src/app/components/address-transactions-widget/address-transactions-widget.component.ts @@ -1,9 +1,9 @@ import { Component, Input, OnChanges, OnDestroy, OnInit, SimpleChanges } from '@angular/core'; -import { StateService } from '../../services/state.service'; -import { Address, AddressTxSummary } from '../../interfaces/electrs.interface'; -import { ElectrsApiService } from '../../services/electrs-api.service'; +import { StateService } from '@app/services/state.service'; +import { Address, AddressTxSummary } from '@app/interfaces/electrs.interface'; +import { ElectrsApiService } from '@app/services/electrs-api.service'; import { Observable, Subscription, catchError, map, of, switchMap, zip } from 'rxjs'; -import { PriceService } from '../../services/price.service'; +import { PriceService } from '@app/services/price.service'; @Component({ selector: 'app-address-transactions-widget', diff --git a/frontend/src/app/components/address/address-preview.component.ts b/frontend/src/app/components/address/address-preview.component.ts index 9bc6e967f..df08ffa48 100644 --- a/frontend/src/app/components/address/address-preview.component.ts +++ b/frontend/src/app/components/address/address-preview.component.ts @@ -1,16 +1,16 @@ import { Component, OnInit, OnDestroy } from '@angular/core'; import { ActivatedRoute, ParamMap } from '@angular/router'; -import { ElectrsApiService } from '../../services/electrs-api.service'; +import { ElectrsApiService } from '@app/services/electrs-api.service'; import { switchMap, filter, catchError, map, tap } from 'rxjs/operators'; -import { Address, Transaction } from '../../interfaces/electrs.interface'; -import { StateService } from '../../services/state.service'; -import { OpenGraphService } from '../../services/opengraph.service'; -import { AudioService } from '../../services/audio.service'; -import { ApiService } from '../../services/api.service'; +import { Address, Transaction } from '@app/interfaces/electrs.interface'; +import { StateService } from '@app/services/state.service'; +import { OpenGraphService } from '@app/services/opengraph.service'; +import { AudioService } from '@app/services/audio.service'; +import { ApiService } from '@app/services/api.service'; import { of, merge, Subscription, Observable } from 'rxjs'; -import { SeoService } from '../../services/seo.service'; -import { seoDescriptionNetwork } from '../../shared/common.utils'; -import { AddressInformation } from '../../interfaces/node-api.interface'; +import { SeoService } from '@app/services/seo.service'; +import { seoDescriptionNetwork } from '@app/shared/common.utils'; +import { AddressInformation } from '@app/interfaces/node-api.interface'; @Component({ selector: 'app-address-preview', diff --git a/frontend/src/app/components/address/address.component.ts b/frontend/src/app/components/address/address.component.ts index 57818ea33..2245e75e8 100644 --- a/frontend/src/app/components/address/address.component.ts +++ b/frontend/src/app/components/address/address.component.ts @@ -1,17 +1,17 @@ import { Component, OnInit, OnDestroy, HostListener } from '@angular/core'; import { ActivatedRoute, ParamMap } from '@angular/router'; -import { ElectrsApiService } from '../../services/electrs-api.service'; +import { ElectrsApiService } from '@app/services/electrs-api.service'; import { switchMap, filter, catchError, map, tap } from 'rxjs/operators'; -import { Address, ChainStats, Transaction, Utxo, Vin } from '../../interfaces/electrs.interface'; -import { WebsocketService } from '../../services/websocket.service'; -import { StateService } from '../../services/state.service'; -import { AudioService } from '../../services/audio.service'; -import { ApiService } from '../../services/api.service'; +import { Address, ChainStats, Transaction, Utxo, Vin } from '@app/interfaces/electrs.interface'; +import { WebsocketService } from '@app/services/websocket.service'; +import { StateService } from '@app/services/state.service'; +import { AudioService } from '@app/services/audio.service'; +import { ApiService } from '@app/services/api.service'; import { of, merge, Subscription, Observable, forkJoin } from 'rxjs'; -import { SeoService } from '../../services/seo.service'; -import { seoDescriptionNetwork } from '../../shared/common.utils'; -import { AddressInformation } from '../../interfaces/node-api.interface'; -import { AddressTypeInfo } from '../../shared/address-utils'; +import { SeoService } from '@app/services/seo.service'; +import { seoDescriptionNetwork } from '@app/shared/common.utils'; +import { AddressInformation } from '@app/interfaces/node-api.interface'; +import { AddressTypeInfo } from '@app/shared/address-utils'; class AddressStats implements ChainStats { address: string; diff --git a/frontend/src/app/components/addresses-treemap/addresses-treemap.component.ts b/frontend/src/app/components/addresses-treemap/addresses-treemap.component.ts index f78b4e2e1..8595a8acc 100644 --- a/frontend/src/app/components/addresses-treemap/addresses-treemap.component.ts +++ b/frontend/src/app/components/addresses-treemap/addresses-treemap.component.ts @@ -1,12 +1,12 @@ import { ChangeDetectionStrategy, Component, Inject, Input, LOCALE_ID, NgZone, OnChanges } from '@angular/core'; import { Router } from '@angular/router'; -import { EChartsOption, TreemapSeriesOption } from '../../graphs/echarts'; -import { lerpColor } from '../../shared/graphs.utils'; -import { AmountShortenerPipe } from '../../shared/pipes/amount-shortener.pipe'; -import { LightningApiService } from '../../lightning/lightning-api.service'; -import { RelativeUrlPipe } from '../../shared/pipes/relative-url/relative-url.pipe'; -import { StateService } from '../../services/state.service'; -import { Address } from '../../interfaces/electrs.interface'; +import { EChartsOption, TreemapSeriesOption } from '@app/graphs/echarts'; +import { lerpColor } from '@app/shared/graphs.utils'; +import { AmountShortenerPipe } from '@app/shared/pipes/amount-shortener.pipe'; +import { LightningApiService } from '@app/lightning/lightning-api.service'; +import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; +import { StateService } from '@app/services/state.service'; +import { Address } from '@app/interfaces/electrs.interface'; import { formatNumber } from '@angular/common'; @Component({ @@ -147,4 +147,4 @@ export class AddressesTreemap implements OnChanges { }); }); } -} \ No newline at end of file +} diff --git a/frontend/src/app/components/amount-selector/amount-selector.component.ts b/frontend/src/app/components/amount-selector/amount-selector.component.ts index 144b0f1db..e22542eb3 100644 --- a/frontend/src/app/components/amount-selector/amount-selector.component.ts +++ b/frontend/src/app/components/amount-selector/amount-selector.component.ts @@ -1,7 +1,7 @@ import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; -import { StorageService } from '../../services/storage.service'; -import { StateService } from '../../services/state.service'; +import { StorageService } from '@app/services/storage.service'; +import { StateService } from '@app/services/state.service'; @Component({ selector: 'app-amount-selector', diff --git a/frontend/src/app/components/amount/amount.component.ts b/frontend/src/app/components/amount/amount.component.ts index 93715f3c0..bf40a7567 100644 --- a/frontend/src/app/components/amount/amount.component.ts +++ b/frontend/src/app/components/amount/amount.component.ts @@ -1,7 +1,7 @@ import { Component, OnInit, OnDestroy, Input, ChangeDetectionStrategy, ChangeDetectorRef } from '@angular/core'; -import { StateService } from '../../services/state.service'; +import { StateService } from '@app/services/state.service'; import { Observable, Subscription } from 'rxjs'; -import { Price } from '../../services/price.service'; +import { Price } from '@app/services/price.service'; @Component({ selector: 'app-amount', diff --git a/frontend/src/app/components/app/app.component.ts b/frontend/src/app/components/app/app.component.ts index 453276966..365c23972 100644 --- a/frontend/src/app/components/app/app.component.ts +++ b/frontend/src/app/components/app/app.component.ts @@ -1,11 +1,11 @@ import { Location } from '@angular/common'; import { Component, HostListener, OnInit, Inject, LOCALE_ID, HostBinding } from '@angular/core'; import { Router, NavigationEnd } from '@angular/router'; -import { StateService } from '../../services/state.service'; -import { OpenGraphService } from '../../services/opengraph.service'; +import { StateService } from '@app/services/state.service'; +import { OpenGraphService } from '@app/services/opengraph.service'; import { NgbTooltipConfig } from '@ng-bootstrap/ng-bootstrap'; -import { ThemeService } from '../../services/theme.service'; -import { SeoService } from '../../services/seo.service'; +import { ThemeService } from '@app/services/theme.service'; +import { SeoService } from '@app/services/seo.service'; @Component({ selector: 'app-root', diff --git a/frontend/src/app/components/asset-circulation/asset-circulation.component.ts b/frontend/src/app/components/asset-circulation/asset-circulation.component.ts index cc09c4809..ab41492b0 100644 --- a/frontend/src/app/components/asset-circulation/asset-circulation.component.ts +++ b/frontend/src/app/components/asset-circulation/asset-circulation.component.ts @@ -1,10 +1,10 @@ import { ChangeDetectionStrategy, Component, Inject, Input, LOCALE_ID, OnInit } from '@angular/core'; import { combineLatest, Observable } from 'rxjs'; import { map } from 'rxjs/operators'; -import { moveDec } from '../../bitcoin.utils'; -import { AssetsService } from '../../services/assets.service'; -import { ElectrsApiService } from '../../services/electrs-api.service'; -import { environment } from '../../../environments/environment'; +import { moveDec } from '@app/bitcoin.utils'; +import { AssetsService } from '@app/services/assets.service'; +import { ElectrsApiService } from '@app/services/electrs-api.service'; +import { environment } from '@environments/environment'; @Component({ selector: 'app-asset-circulation', diff --git a/frontend/src/app/components/asset/asset.component.ts b/frontend/src/app/components/asset/asset.component.ts index dd09468cc..333e4c450 100644 --- a/frontend/src/app/components/asset/asset.component.ts +++ b/frontend/src/app/components/asset/asset.component.ts @@ -1,17 +1,17 @@ import { Component, OnInit, OnDestroy } from '@angular/core'; import { ActivatedRoute, ParamMap } from '@angular/router'; -import { ElectrsApiService } from '../../services/electrs-api.service'; +import { ElectrsApiService } from '@app/services/electrs-api.service'; import { switchMap, filter, catchError, take } from 'rxjs/operators'; -import { Asset, Transaction } from '../../interfaces/electrs.interface'; -import { WebsocketService } from '../../services/websocket.service'; -import { StateService } from '../../services/state.service'; -import { AudioService } from '../../services/audio.service'; -import { ApiService } from '../../services/api.service'; +import { Asset, Transaction } from '@app/interfaces/electrs.interface'; +import { WebsocketService } from '@app/services/websocket.service'; +import { StateService } from '@app/services/state.service'; +import { AudioService } from '@app/services/audio.service'; +import { ApiService } from '@app/services/api.service'; import { of, merge, Subscription, combineLatest } from 'rxjs'; -import { SeoService } from '../../services/seo.service'; -import { environment } from '../../../environments/environment'; -import { AssetsService } from '../../services/assets.service'; -import { moveDec } from '../../bitcoin.utils'; +import { SeoService } from '@app/services/seo.service'; +import { environment } from '@app/../environments/environment'; +import { AssetsService } from '@app/services/assets.service'; +import { moveDec } from '@app/bitcoin.utils'; @Component({ selector: 'app-asset', diff --git a/frontend/src/app/components/assets/asset-group/asset-group.component.ts b/frontend/src/app/components/assets/asset-group/asset-group.component.ts index 27e048558..3294eed70 100644 --- a/frontend/src/app/components/assets/asset-group/asset-group.component.ts +++ b/frontend/src/app/components/assets/asset-group/asset-group.component.ts @@ -2,8 +2,8 @@ import { Component, OnInit } from '@angular/core'; import { ActivatedRoute, ParamMap } from '@angular/router'; import { combineLatest, Observable } from 'rxjs'; import { map, switchMap } from 'rxjs/operators'; -import { ApiService } from '../../../services/api.service'; -import { AssetsService } from '../../../services/assets.service'; +import { ApiService } from '@app/services/api.service'; +import { AssetsService } from '@app/services/assets.service'; @Component({ selector: 'app-asset-group', diff --git a/frontend/src/app/components/assets/assets-featured/assets-featured.component.ts b/frontend/src/app/components/assets/assets-featured/assets-featured.component.ts index a9bf305f6..de6a0e524 100644 --- a/frontend/src/app/components/assets/assets-featured/assets-featured.component.ts +++ b/frontend/src/app/components/assets/assets-featured/assets-featured.component.ts @@ -1,7 +1,7 @@ import { Component, OnInit } from '@angular/core'; import { Observable } from 'rxjs'; -import { ApiService } from '../../../services/api.service'; -import { StateService } from '../../../services/state.service'; +import { ApiService } from '@app/services/api.service'; +import { StateService } from '@app/services/state.service'; @Component({ selector: 'app-assets-featured', diff --git a/frontend/src/app/components/assets/assets-nav/assets-nav.component.ts b/frontend/src/app/components/assets/assets-nav/assets-nav.component.ts index c9b044b34..5ec2888c1 100644 --- a/frontend/src/app/components/assets/assets-nav/assets-nav.component.ts +++ b/frontend/src/app/components/assets/assets-nav/assets-nav.component.ts @@ -4,12 +4,12 @@ import { Router } from '@angular/router'; import { NgbTypeahead } from '@ng-bootstrap/ng-bootstrap'; import { merge, Observable, of, Subject } from 'rxjs'; import { distinctUntilChanged, filter, map, switchMap } from 'rxjs/operators'; -import { AssetExtended } from '../../../interfaces/electrs.interface'; -import { AssetsService } from '../../../services/assets.service'; -import { SeoService } from '../../../services/seo.service'; -import { StateService } from '../../../services/state.service'; -import { RelativeUrlPipe } from '../../../shared/pipes/relative-url/relative-url.pipe'; -import { environment } from '../../../../environments/environment'; +import { AssetExtended } from '@app/interfaces/electrs.interface'; +import { AssetsService } from '@app/services/assets.service'; +import { SeoService } from '@app/services/seo.service'; +import { StateService } from '@app/services/state.service'; +import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; +import { environment } from '@environments/environment'; @Component({ selector: 'app-assets-nav', diff --git a/frontend/src/app/components/assets/assets.component.ts b/frontend/src/app/components/assets/assets.component.ts index 85d236bca..428fd2edd 100644 --- a/frontend/src/app/components/assets/assets.component.ts +++ b/frontend/src/app/components/assets/assets.component.ts @@ -1,13 +1,13 @@ import { Component, OnInit, ChangeDetectionStrategy } from '@angular/core'; -import { AssetsService } from '../../services/assets.service'; -import { environment } from '../../../environments/environment'; +import { AssetsService } from '@app/services/assets.service'; +import { environment } from '@environments/environment'; import { UntypedFormGroup } from '@angular/forms'; import { filter, map, switchMap, take } from 'rxjs/operators'; import { ActivatedRoute, Router } from '@angular/router'; import { combineLatest, Observable } from 'rxjs'; -import { AssetExtended } from '../../interfaces/electrs.interface'; -import { SeoService } from '../../services/seo.service'; -import { StateService } from '../../services/state.service'; +import { AssetExtended } from '@app/interfaces/electrs.interface'; +import { SeoService } from '@app/services/seo.service'; +import { StateService } from '@app/services/state.service'; @Component({ selector: 'app-assets', diff --git a/frontend/src/app/components/balance-widget/balance-widget.component.ts b/frontend/src/app/components/balance-widget/balance-widget.component.ts index f830587cc..5f0bb2e52 100644 --- a/frontend/src/app/components/balance-widget/balance-widget.component.ts +++ b/frontend/src/app/components/balance-widget/balance-widget.component.ts @@ -1,7 +1,7 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core'; -import { StateService } from '../../services/state.service'; -import { Address, AddressTxSummary } from '../../interfaces/electrs.interface'; -import { ElectrsApiService } from '../../services/electrs-api.service'; +import { StateService } from '@app/services/state.service'; +import { Address, AddressTxSummary } from '@app/interfaces/electrs.interface'; +import { ElectrsApiService } from '@app/services/electrs-api.service'; import { Observable, catchError, of } from 'rxjs'; @Component({ diff --git a/frontend/src/app/components/bitcoin-invoice/bitcoin-invoice.component.ts b/frontend/src/app/components/bitcoin-invoice/bitcoin-invoice.component.ts index 067061678..f931f2c31 100644 --- a/frontend/src/app/components/bitcoin-invoice/bitcoin-invoice.component.ts +++ b/frontend/src/app/components/bitcoin-invoice/bitcoin-invoice.component.ts @@ -4,7 +4,7 @@ import { DomSanitizer, SafeUrl } from '@angular/platform-browser'; import { ActivatedRoute } from '@angular/router'; import { Subscription, of, timer } from 'rxjs'; import { filter, repeat, retry, switchMap, take, tap } from 'rxjs/operators'; -import { ServicesApiServices } from '../../services/services-api.service'; +import { ServicesApiServices } from '@app/services/services-api.service'; @Component({ selector: 'app-bitcoin-invoice', diff --git a/frontend/src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts b/frontend/src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts index c533626e7..07361ef42 100644 --- a/frontend/src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts +++ b/frontend/src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.ts @@ -1,17 +1,17 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, Input, LOCALE_ID, NgZone, OnInit } from '@angular/core'; -import { echarts, EChartsOption } from '../../graphs/echarts'; +import { echarts, EChartsOption } from '@app/graphs/echarts'; import { Observable, combineLatest, of } from 'rxjs'; import { map, share, startWith, switchMap, tap } from 'rxjs/operators'; -import { ApiService } from '../../services/api.service'; -import { SeoService } from '../../services/seo.service'; +import { ApiService } from '@app/services/api.service'; +import { SeoService } from '@app/services/seo.service'; import { formatNumber } from '@angular/common'; import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; -import { download, formatterXAxis, formatterXAxisLabel, formatterXAxisTimeCategory } from '../../shared/graphs.utils'; -import { StorageService } from '../../services/storage.service'; -import { MiningService } from '../../services/mining.service'; -import { selectPowerOfTen } from '../../bitcoin.utils'; -import { RelativeUrlPipe } from '../../shared/pipes/relative-url/relative-url.pipe'; -import { StateService } from '../../services/state.service'; +import { download, formatterXAxis, formatterXAxisLabel, formatterXAxisTimeCategory } from '@app/shared/graphs.utils'; +import { StorageService } from '@app/services/storage.service'; +import { MiningService } from '@app/services/mining.service'; +import { selectPowerOfTen } from '@app/bitcoin.utils'; +import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; +import { StateService } from '@app/services/state.service'; import { ActivatedRoute, Router } from '@angular/router'; @Component({ diff --git a/frontend/src/app/components/block-fees-graph/block-fees-graph.component.ts b/frontend/src/app/components/block-fees-graph/block-fees-graph.component.ts index 33e3eb19e..c2dea11aa 100644 --- a/frontend/src/app/components/block-fees-graph/block-fees-graph.component.ts +++ b/frontend/src/app/components/block-fees-graph/block-fees-graph.component.ts @@ -1,18 +1,18 @@ import { ChangeDetectionStrategy, Component, Inject, Input, LOCALE_ID, OnInit } from '@angular/core'; -import { echarts, EChartsOption } from '../../graphs/echarts'; +import { echarts, EChartsOption } from '@app/graphs/echarts'; import { Observable } from 'rxjs'; import { map, share, startWith, switchMap, tap } from 'rxjs/operators'; -import { ApiService } from '../../services/api.service'; -import { SeoService } from '../../services/seo.service'; +import { ApiService } from '@app/services/api.service'; +import { SeoService } from '@app/services/seo.service'; import { formatNumber } from '@angular/common'; import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; -import { download, formatterXAxis } from '../../shared/graphs.utils'; -import { StorageService } from '../../services/storage.service'; -import { MiningService } from '../../services/mining.service'; +import { download, formatterXAxis } from '@app/shared/graphs.utils'; +import { StorageService } from '@app/services/storage.service'; +import { MiningService } from '@app/services/mining.service'; import { ActivatedRoute } from '@angular/router'; -import { FiatShortenerPipe } from '../../shared/pipes/fiat-shortener.pipe'; -import { FiatCurrencyPipe } from '../../shared/pipes/fiat-currency.pipe'; -import { StateService } from '../../services/state.service'; +import { FiatShortenerPipe } from '@app/shared/pipes/fiat-shortener.pipe'; +import { FiatCurrencyPipe } from '@app/shared/pipes/fiat-currency.pipe'; +import { StateService } from '@app/services/state.service'; @Component({ selector: 'app-block-fees-graph', diff --git a/frontend/src/app/components/block-fees-subsidy-graph/block-fees-subsidy-graph.component.ts b/frontend/src/app/components/block-fees-subsidy-graph/block-fees-subsidy-graph.component.ts index 42d05510f..deba874a7 100644 --- a/frontend/src/app/components/block-fees-subsidy-graph/block-fees-subsidy-graph.component.ts +++ b/frontend/src/app/components/block-fees-subsidy-graph/block-fees-subsidy-graph.component.ts @@ -1,19 +1,19 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, HostListener, Inject, Input, LOCALE_ID, NgZone, OnInit } from '@angular/core'; -import { EChartsOption } from '../../graphs/echarts'; +import { EChartsOption } from '@app/graphs/echarts'; import { Observable } from 'rxjs'; import { catchError, map, share, startWith, switchMap, tap } from 'rxjs/operators'; -import { ApiService } from '../../services/api.service'; -import { SeoService } from '../../services/seo.service'; +import { ApiService } from '@app/services/api.service'; +import { SeoService } from '@app/services/seo.service'; import { formatNumber } from '@angular/common'; import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; -import { download, formatterXAxis } from '../../shared/graphs.utils'; +import { download, formatterXAxis } from '@app/shared/graphs.utils'; import { ActivatedRoute, Router } from '@angular/router'; -import { FiatShortenerPipe } from '../../shared/pipes/fiat-shortener.pipe'; -import { FiatCurrencyPipe } from '../../shared/pipes/fiat-currency.pipe'; -import { StateService } from '../../services/state.service'; -import { MiningService } from '../../services/mining.service'; -import { StorageService } from '../../services/storage.service'; -import { RelativeUrlPipe } from '../../shared/pipes/relative-url/relative-url.pipe'; +import { FiatShortenerPipe } from '@app/shared/pipes/fiat-shortener.pipe'; +import { FiatCurrencyPipe } from '@app/shared/pipes/fiat-currency.pipe'; +import { StateService } from '@app/services/state.service'; +import { MiningService } from '@app/services/mining.service'; +import { StorageService } from '@app/services/storage.service'; +import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; @Component({ selector: 'app-block-fees-subsidy-graph', diff --git a/frontend/src/app/components/block-filters/block-filters.component.ts b/frontend/src/app/components/block-filters/block-filters.component.ts index 7f997617c..2a0c0772a 100644 --- a/frontend/src/app/components/block-filters/block-filters.component.ts +++ b/frontend/src/app/components/block-filters/block-filters.component.ts @@ -1,6 +1,6 @@ import { Component, EventEmitter, Output, HostListener, Input, ChangeDetectorRef, OnChanges, SimpleChanges, OnInit, OnDestroy } from '@angular/core'; -import { ActiveFilter, FilterGroups, FilterMode, GradientMode, TransactionFilters } from '../../shared/filters.utils'; -import { StateService } from '../../services/state.service'; +import { ActiveFilter, FilterGroups, FilterMode, GradientMode, TransactionFilters } from '@app/shared/filters.utils'; +import { StateService } from '@app/services/state.service'; import { Subscription } from 'rxjs'; @@ -115,4 +115,4 @@ export class BlockFiltersComponent implements OnInit, OnChanges, OnDestroy { ngOnDestroy(): void { this.filterSubscription.unsubscribe(); } -} \ No newline at end of file +} diff --git a/frontend/src/app/components/block-health-graph/block-health-graph.component.ts b/frontend/src/app/components/block-health-graph/block-health-graph.component.ts index 6a7168d6b..8d893a85f 100644 --- a/frontend/src/app/components/block-health-graph/block-health-graph.component.ts +++ b/frontend/src/app/components/block-health-graph/block-health-graph.component.ts @@ -1,16 +1,16 @@ import { ChangeDetectionStrategy, Component, Inject, Input, LOCALE_ID, NgZone, OnInit } from '@angular/core'; -import { EChartsOption } from '../../graphs/echarts'; +import { EChartsOption } from '@app/graphs/echarts'; import { Observable } from 'rxjs'; import { map, share, startWith, switchMap, tap } from 'rxjs/operators'; -import { ApiService } from '../../services/api.service'; -import { SeoService } from '../../services/seo.service'; +import { ApiService } from '@app/services/api.service'; +import { SeoService } from '@app/services/seo.service'; import { formatNumber } from '@angular/common'; import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; -import { download, formatterXAxis, formatterXAxisLabel, formatterXAxisTimeCategory } from '../../shared/graphs.utils'; -import { StorageService } from '../../services/storage.service'; +import { download, formatterXAxis, formatterXAxisLabel, formatterXAxisTimeCategory } from '@app/shared/graphs.utils'; +import { StorageService } from '@app/services/storage.service'; import { ActivatedRoute, Router } from '@angular/router'; -import { RelativeUrlPipe } from '../../shared/pipes/relative-url/relative-url.pipe'; -import { StateService } from '../../services/state.service'; +import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; +import { StateService } from '@app/services/state.service'; @Component({ selector: 'app-block-health-graph', diff --git a/frontend/src/app/components/block-overview-graph/block-overview-graph.component.ts b/frontend/src/app/components/block-overview-graph/block-overview-graph.component.ts index 3be0692a5..007b2da62 100644 --- a/frontend/src/app/components/block-overview-graph/block-overview-graph.component.ts +++ b/frontend/src/app/components/block-overview-graph/block-overview-graph.component.ts @@ -1,17 +1,17 @@ import { Component, ElementRef, ViewChild, HostListener, Input, Output, EventEmitter, NgZone, AfterViewInit, OnDestroy, OnChanges } from '@angular/core'; -import { TransactionStripped } from '../../interfaces/node-api.interface'; +import { TransactionStripped } from '@app/interfaces/node-api.interface'; import { FastVertexArray } from './fast-vertex-array'; import BlockScene from './block-scene'; import TxSprite from './tx-sprite'; import TxView from './tx-view'; -import { Color, Position } from './sprite-types'; -import { Price } from '../../services/price.service'; -import { StateService } from '../../services/state.service'; -import { ThemeService } from '../../services/theme.service'; +import { Color, Position } from '@components/block-overview-graph/sprite-types'; +import { Price } from '@app/services/price.service'; +import { StateService } from '@app/services/state.service'; +import { ThemeService } from '@app/services/theme.service'; import { Subscription } from 'rxjs'; import { defaultColorFunction, setOpacity, defaultAuditColors, defaultColors, ageColorFunction, contrastColorFunction, contrastAuditColors, contrastColors } from './utils'; -import { ActiveFilter, FilterMode, toFlags } from '../../shared/filters.utils'; -import { detectWebGL } from '../../shared/graphs.utils'; +import { ActiveFilter, FilterMode, toFlags } from '@app/shared/filters.utils'; +import { detectWebGL } from '@app/shared/graphs.utils'; const unmatchedOpacity = 0.2; const unmatchedAuditColors = { diff --git a/frontend/src/app/components/block-overview-graph/block-scene.ts b/frontend/src/app/components/block-overview-graph/block-scene.ts index 4f07818a5..ff507ad64 100644 --- a/frontend/src/app/components/block-overview-graph/block-scene.ts +++ b/frontend/src/app/components/block-overview-graph/block-scene.ts @@ -1,9 +1,9 @@ import { FastVertexArray } from './fast-vertex-array'; import TxView from './tx-view'; -import { TransactionStripped } from '../../interfaces/node-api.interface'; +import { TransactionStripped } from '@app/interfaces/node-api.interface'; import { Color, Position, Square, ViewUpdateParams } from './sprite-types'; import { defaultColorFunction, contrastColorFunction } from './utils'; -import { ThemeService } from '../../services/theme.service'; +import { ThemeService } from '@app/services/theme.service'; export default class BlockScene { scene: { count: number, offset: { x: number, y: number}}; @@ -917,4 +917,4 @@ class BlockLayout { function feeRateDescending(a: TxView, b: TxView) { return b.feerate - a.feerate; -} \ No newline at end of file +} diff --git a/frontend/src/app/components/block-overview-graph/tx-view.ts b/frontend/src/app/components/block-overview-graph/tx-view.ts index f612368f4..55831e4c7 100644 --- a/frontend/src/app/components/block-overview-graph/tx-view.ts +++ b/frontend/src/app/components/block-overview-graph/tx-view.ts @@ -3,8 +3,8 @@ import { FastVertexArray } from './fast-vertex-array'; import { SpriteUpdateParams, Square, Color, ViewUpdateParams } from './sprite-types'; import { hexToColor } from './utils'; import BlockScene from './block-scene'; -import { TransactionStripped } from '../../interfaces/node-api.interface'; -import { TransactionFlags } from '../../shared/filters.utils'; +import { TransactionStripped } from '@app/interfaces/node-api.interface'; +import { TransactionFlags } from '@app/shared/filters.utils'; const hoverTransitionTime = 300; const defaultHoverColor = hexToColor('1bd8f4'); diff --git a/frontend/src/app/components/block-overview-graph/utils.ts b/frontend/src/app/components/block-overview-graph/utils.ts index 287c4bf34..91faf553d 100644 --- a/frontend/src/app/components/block-overview-graph/utils.ts +++ b/frontend/src/app/components/block-overview-graph/utils.ts @@ -1,4 +1,4 @@ -import { feeLevels, defaultMempoolFeeColors, contrastMempoolFeeColors } from '../../app.constants'; +import { feeLevels, defaultMempoolFeeColors, contrastMempoolFeeColors } from '@app/app.constants'; import { Color } from './sprite-types'; import TxView from './tx-view'; diff --git a/frontend/src/app/components/block-overview-tooltip/block-overview-tooltip.component.ts b/frontend/src/app/components/block-overview-tooltip/block-overview-tooltip.component.ts index 0a606983e..580a6f8ad 100644 --- a/frontend/src/app/components/block-overview-tooltip/block-overview-tooltip.component.ts +++ b/frontend/src/app/components/block-overview-tooltip/block-overview-tooltip.component.ts @@ -1,9 +1,9 @@ import { Component, ElementRef, ViewChild, Input, OnChanges, ChangeDetectionStrategy, ChangeDetectorRef } from '@angular/core'; -import { Position } from '../../components/block-overview-graph/sprite-types.js'; -import { Price } from '../../services/price.service'; -import { TransactionStripped } from '../../interfaces/node-api.interface.js'; -import { Filter, FilterMode, TransactionFlags, toFilters } from '../../shared/filters.utils'; -import { Block } from '../../interfaces/electrs.interface.js'; +import { Position } from '@components/block-overview-graph/sprite-types.js'; +import { Price } from '@app/services/price.service'; +import { TransactionStripped } from '@app/interfaces/node-api.interface.js'; +import { Filter, FilterMode, TransactionFlags, toFilters } from '@app/shared/filters.utils'; +import { Block } from '@app/interfaces/electrs.interface.js'; @Component({ selector: 'app-block-overview-tooltip', diff --git a/frontend/src/app/components/block-rewards-graph/block-rewards-graph.component.ts b/frontend/src/app/components/block-rewards-graph/block-rewards-graph.component.ts index 63a543674..15dafb151 100644 --- a/frontend/src/app/components/block-rewards-graph/block-rewards-graph.component.ts +++ b/frontend/src/app/components/block-rewards-graph/block-rewards-graph.component.ts @@ -1,18 +1,18 @@ import { ChangeDetectionStrategy, Component, Inject, Input, LOCALE_ID, OnInit } from '@angular/core'; -import { echarts, EChartsOption } from '../../graphs/echarts'; +import { echarts, EChartsOption } from '@app/graphs/echarts'; import { Observable } from 'rxjs'; import { map, share, startWith, switchMap, tap } from 'rxjs/operators'; -import { ApiService } from '../../services/api.service'; -import { SeoService } from '../../services/seo.service'; +import { ApiService } from '@app/services/api.service'; +import { SeoService } from '@app/services/seo.service'; import { formatNumber } from '@angular/common'; import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; -import { download, formatterXAxis } from '../../shared/graphs.utils'; -import { MiningService } from '../../services/mining.service'; -import { StorageService } from '../../services/storage.service'; +import { download, formatterXAxis } from '@app/shared/graphs.utils'; +import { MiningService } from '@app/services/mining.service'; +import { StorageService } from '@app/services/storage.service'; import { ActivatedRoute } from '@angular/router'; -import { FiatShortenerPipe } from '../../shared/pipes/fiat-shortener.pipe'; -import { FiatCurrencyPipe } from '../../shared/pipes/fiat-currency.pipe'; -import { StateService } from '../../services/state.service'; +import { FiatShortenerPipe } from '@app/shared/pipes/fiat-shortener.pipe'; +import { FiatCurrencyPipe } from '@app/shared/pipes/fiat-currency.pipe'; +import { StateService } from '@app/services/state.service'; @Component({ selector: 'app-block-rewards-graph', diff --git a/frontend/src/app/components/block-sizes-weights-graph/block-sizes-weights-graph.component.ts b/frontend/src/app/components/block-sizes-weights-graph/block-sizes-weights-graph.component.ts index b0069dca2..2cc0f0098 100644 --- a/frontend/src/app/components/block-sizes-weights-graph/block-sizes-weights-graph.component.ts +++ b/frontend/src/app/components/block-sizes-weights-graph/block-sizes-weights-graph.component.ts @@ -1,16 +1,16 @@ import { ChangeDetectionStrategy, Component, Inject, Input, LOCALE_ID, OnInit, HostBinding } from '@angular/core'; -import { EChartsOption} from '../../graphs/echarts'; +import { EChartsOption} from '@app/graphs/echarts'; import { Observable } from 'rxjs'; import { map, share, startWith, switchMap, tap } from 'rxjs/operators'; -import { ApiService } from '../../services/api.service'; -import { SeoService } from '../../services/seo.service'; +import { ApiService } from '@app/services/api.service'; +import { SeoService } from '@app/services/seo.service'; import { formatNumber } from '@angular/common'; import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; -import { StorageService } from '../../services/storage.service'; -import { MiningService } from '../../services/mining.service'; +import { StorageService } from '@app/services/storage.service'; +import { MiningService } from '@app/services/mining.service'; import { ActivatedRoute } from '@angular/router'; -import { download, formatterXAxis } from '../../shared/graphs.utils'; -import { StateService } from '../../services/state.service'; +import { download, formatterXAxis } from '@app/shared/graphs.utils'; +import { StateService } from '@app/services/state.service'; @Component({ selector: 'app-block-sizes-weights-graph', diff --git a/frontend/src/app/components/block-view/block-view.component.ts b/frontend/src/app/components/block-view/block-view.component.ts index 5c3b7719c..a901b40ab 100644 --- a/frontend/src/app/components/block-view/block-view.component.ts +++ b/frontend/src/app/components/block-view/block-view.component.ts @@ -1,15 +1,15 @@ import { Component, OnInit, OnDestroy, ViewChild, HostListener } from '@angular/core'; import { ActivatedRoute, ParamMap, Router } from '@angular/router'; -import { ElectrsApiService } from '../../services/electrs-api.service'; +import { ElectrsApiService } from '@app/services/electrs-api.service'; import { switchMap, tap, catchError, shareReplay, filter } from 'rxjs/operators'; import { of, Subscription } from 'rxjs'; -import { StateService } from '../../services/state.service'; -import { SeoService } from '../../services/seo.service'; -import { BlockExtended, TransactionStripped } from '../../interfaces/node-api.interface'; -import { ApiService } from '../../services/api.service'; -import { seoDescriptionNetwork } from '../../shared/common.utils'; -import { BlockOverviewGraphComponent } from '../block-overview-graph/block-overview-graph.component'; -import { RelativeUrlPipe } from '../../shared/pipes/relative-url/relative-url.pipe'; +import { StateService } from '@app/services/state.service'; +import { SeoService } from '@app/services/seo.service'; +import { BlockExtended, TransactionStripped } from '@app/interfaces/node-api.interface'; +import { ApiService } from '@app/services/api.service'; +import { seoDescriptionNetwork } from '@app/shared/common.utils'; +import { BlockOverviewGraphComponent } from '@components/block-overview-graph/block-overview-graph.component'; +import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; function bestFitResolution(min, max, n): number { const target = (min + max) / 2; diff --git a/frontend/src/app/components/block/block-preview.component.ts b/frontend/src/app/components/block/block-preview.component.ts index 572f91a38..174da7c67 100644 --- a/frontend/src/app/components/block/block-preview.component.ts +++ b/frontend/src/app/components/block/block-preview.component.ts @@ -1,16 +1,16 @@ import { Component, OnInit, OnDestroy, ViewChild, ElementRef } from '@angular/core'; import { ActivatedRoute, ParamMap } from '@angular/router'; -import { ElectrsApiService } from '../../services/electrs-api.service'; +import { ElectrsApiService } from '@app/services/electrs-api.service'; import { switchMap, tap, throttleTime, catchError, shareReplay, startWith, pairwise, filter } from 'rxjs/operators'; import { of, Subscription, asyncScheduler, forkJoin } from 'rxjs'; -import { StateService } from '../../services/state.service'; -import { SeoService } from '../../services/seo.service'; -import { OpenGraphService } from '../../services/opengraph.service'; -import { BlockExtended, TransactionStripped } from '../../interfaces/node-api.interface'; -import { ApiService } from '../../services/api.service'; -import { seoDescriptionNetwork } from '../../shared/common.utils'; -import { BlockOverviewGraphComponent } from '../../components/block-overview-graph/block-overview-graph.component'; -import { ServicesApiServices } from '../../services/services-api.service'; +import { StateService } from '@app/services/state.service'; +import { SeoService } from '@app/services/seo.service'; +import { OpenGraphService } from '@app/services/opengraph.service'; +import { BlockExtended, TransactionStripped } from '@app/interfaces/node-api.interface'; +import { ApiService } from '@app/services/api.service'; +import { seoDescriptionNetwork } from '@app/shared/common.utils'; +import { BlockOverviewGraphComponent } from '@components/block-overview-graph/block-overview-graph.component'; +import { ServicesApiServices } from '@app/services/services-api.service'; @Component({ selector: 'app-block-preview', diff --git a/frontend/src/app/components/block/block-transactions.component.ts b/frontend/src/app/components/block/block-transactions.component.ts index c0cda6c4f..f8c63f676 100644 --- a/frontend/src/app/components/block/block-transactions.component.ts +++ b/frontend/src/app/components/block/block-transactions.component.ts @@ -1,10 +1,10 @@ import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core'; -import { StateService } from '../../services/state.service'; -import { Transaction, Vout } from '../../interfaces/electrs.interface'; +import { StateService } from '@app/services/state.service'; +import { Transaction, Vout } from '@app/interfaces/electrs.interface'; import { Observable, Subscription, catchError, combineLatest, map, of, startWith, switchMap, tap } from 'rxjs'; import { ActivatedRoute, Router } from '@angular/router'; -import { ElectrsApiService } from '../../services/electrs-api.service'; -import { PreloadService } from '../../services/preload.service'; +import { ElectrsApiService } from '@app/services/electrs-api.service'; +import { PreloadService } from '@app/services/preload.service'; @Component({ selector: 'app-block-transactions', diff --git a/frontend/src/app/components/block/block.component.ts b/frontend/src/app/components/block/block.component.ts index baf583744..83c86b99a 100644 --- a/frontend/src/app/components/block/block.component.ts +++ b/frontend/src/app/components/block/block.component.ts @@ -1,23 +1,23 @@ import { Component, OnInit, OnDestroy, ViewChildren, QueryList, ChangeDetectorRef } from '@angular/core'; import { Location } from '@angular/common'; import { ActivatedRoute, ParamMap, Router } from '@angular/router'; -import { ElectrsApiService } from '../../services/electrs-api.service'; +import { ElectrsApiService } from '@app/services/electrs-api.service'; import { switchMap, tap, throttleTime, catchError, map, shareReplay, startWith, filter } from 'rxjs/operators'; import { Observable, of, Subscription, asyncScheduler, EMPTY, combineLatest, forkJoin } from 'rxjs'; -import { StateService } from '../../services/state.service'; -import { SeoService } from '../../services/seo.service'; -import { WebsocketService } from '../../services/websocket.service'; -import { RelativeUrlPipe } from '../../shared/pipes/relative-url/relative-url.pipe'; -import { Acceleration, BlockAudit, BlockExtended, TransactionStripped } from '../../interfaces/node-api.interface'; -import { ApiService } from '../../services/api.service'; -import { BlockOverviewGraphComponent } from '../../components/block-overview-graph/block-overview-graph.component'; -import { detectWebGL } from '../../shared/graphs.utils'; -import { seoDescriptionNetwork } from '../../shared/common.utils'; -import { PriceService, Price } from '../../services/price.service'; -import { CacheService } from '../../services/cache.service'; -import { ServicesApiServices } from '../../services/services-api.service'; -import { PreloadService } from '../../services/preload.service'; -import { identifyPrioritizedTransactions } from '../../shared/transaction.utils'; +import { StateService } from '@app/services/state.service'; +import { SeoService } from '@app/services/seo.service'; +import { WebsocketService } from '@app/services/websocket.service'; +import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; +import { Acceleration, BlockAudit, BlockExtended, TransactionStripped } from '@app/interfaces/node-api.interface'; +import { ApiService } from '@app/services/api.service'; +import { BlockOverviewGraphComponent } from '@components/block-overview-graph/block-overview-graph.component'; +import { detectWebGL } from '@app/shared/graphs.utils'; +import { seoDescriptionNetwork } from '@app/shared/common.utils'; +import { PriceService, Price } from '@app/services/price.service'; +import { CacheService } from '@app/services/cache.service'; +import { ServicesApiServices } from '@app/services/services-api.service'; +import { PreloadService } from '@app/services/preload.service'; +import { identifyPrioritizedTransactions } from '@app/shared/transaction.utils'; @Component({ selector: 'app-block', @@ -822,4 +822,4 @@ export class BlockComponent implements OnInit, OnDestroy { this.fees = blockReward; } } -} \ No newline at end of file +} diff --git a/frontend/src/app/components/block/block.module.ts b/frontend/src/app/components/block/block.module.ts index 661e52dcf..206492e3f 100644 --- a/frontend/src/app/components/block/block.module.ts +++ b/frontend/src/app/components/block/block.module.ts @@ -1,9 +1,9 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { Routes, RouterModule } from '@angular/router'; -import { BlockComponent } from './block.component'; -import { BlockTransactionsComponent } from './block-transactions.component'; -import { SharedModule } from '../../shared/shared.module'; +import { BlockComponent } from '@components/block/block.component'; +import { BlockTransactionsComponent } from '@components/block/block-transactions.component'; +import { SharedModule } from '@app/shared/shared.module'; const routes: Routes = [ { diff --git a/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.ts b/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.ts index 1a7598079..cc8a7a6b2 100644 --- a/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.ts +++ b/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.ts @@ -1,10 +1,10 @@ import { Component, OnInit, OnDestroy, ChangeDetectionStrategy, ChangeDetectorRef, Input, OnChanges, SimpleChanges } from '@angular/core'; import { Observable, Subscription, delay, filter, tap } from 'rxjs'; -import { StateService } from '../../services/state.service'; -import { specialBlocks } from '../../app.constants'; -import { BlockExtended } from '../../interfaces/node-api.interface'; +import { StateService } from '@app/services/state.service'; +import { specialBlocks } from '@app/app.constants'; +import { BlockExtended } from '@app/interfaces/node-api.interface'; import { Location } from '@angular/common'; -import { CacheService } from '../../services/cache.service'; +import { CacheService } from '@app/services/cache.service'; interface BlockchainBlock extends BlockExtended { placeholder?: boolean; diff --git a/frontend/src/app/components/blockchain/blockchain.component.ts b/frontend/src/app/components/blockchain/blockchain.component.ts index d70e788a2..2e3224a9c 100644 --- a/frontend/src/app/components/blockchain/blockchain.component.ts +++ b/frontend/src/app/components/blockchain/blockchain.component.ts @@ -1,7 +1,7 @@ import { Component, OnInit, OnDestroy, ChangeDetectionStrategy, Input, Output, EventEmitter, ChangeDetectorRef, OnChanges, SimpleChanges } from '@angular/core'; import { firstValueFrom, Subscription } from 'rxjs'; -import { StateService } from '../../services/state.service'; -import { StorageService } from '../../services/storage.service'; +import { StateService } from '@app/services/state.service'; +import { StorageService } from '@app/services/storage.service'; @Component({ selector: 'app-blockchain', diff --git a/frontend/src/app/components/blocks-list/blocks-list.component.ts b/frontend/src/app/components/blocks-list/blocks-list.component.ts index 5270ee7be..d71ccbffc 100644 --- a/frontend/src/app/components/blocks-list/blocks-list.component.ts +++ b/frontend/src/app/components/blocks-list/blocks-list.component.ts @@ -2,13 +2,13 @@ import { Component, OnInit, ChangeDetectionStrategy, Input, ChangeDetectorRef, I import { ActivatedRoute, Router } from '@angular/router'; import { BehaviorSubject, combineLatest, Observable, timer, of, Subscription } from 'rxjs'; import { debounceTime, delayWhen, filter, map, retryWhen, scan, skip, switchMap, tap, throttleTime } from 'rxjs/operators'; -import { BlockExtended } from '../../interfaces/node-api.interface'; -import { ApiService } from '../../services/api.service'; -import { StateService } from '../../services/state.service'; -import { WebsocketService } from '../../services/websocket.service'; -import { SeoService } from '../../services/seo.service'; -import { OpenGraphService } from '../../services/opengraph.service'; -import { seoDescriptionNetwork } from '../../shared/common.utils'; +import { BlockExtended } from '@app/interfaces/node-api.interface'; +import { ApiService } from '@app/services/api.service'; +import { StateService } from '@app/services/state.service'; +import { WebsocketService } from '@app/services/websocket.service'; +import { SeoService } from '@app/services/seo.service'; +import { OpenGraphService } from '@app/services/opengraph.service'; +import { seoDescriptionNetwork } from '@app/shared/common.utils'; @Component({ selector: 'app-blocks-list', diff --git a/frontend/src/app/components/calculator/calculator.component.ts b/frontend/src/app/components/calculator/calculator.component.ts index a6f10c049..c276db323 100644 --- a/frontend/src/app/components/calculator/calculator.component.ts +++ b/frontend/src/app/components/calculator/calculator.component.ts @@ -2,8 +2,8 @@ import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; import { FormBuilder, FormGroup } from '@angular/forms'; import { combineLatest, Observable } from 'rxjs'; import { map, switchMap } from 'rxjs/operators'; -import { StateService } from '../../services/state.service'; -import { WebsocketService } from '../../services/websocket.service'; +import { StateService } from '@app/services/state.service'; +import { WebsocketService } from '@app/services/websocket.service'; @Component({ selector: 'app-calculator', diff --git a/frontend/src/app/components/clock-face/clock-face.component.ts b/frontend/src/app/components/clock-face/clock-face.component.ts index eec0fa98c..a13594597 100644 --- a/frontend/src/app/components/clock-face/clock-face.component.ts +++ b/frontend/src/app/components/clock-face/clock-face.component.ts @@ -1,6 +1,6 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnChanges, OnDestroy, OnInit } from '@angular/core'; import { Subscription, tap, timer } from 'rxjs'; -import { StateService } from '../../services/state.service'; +import { StateService } from '@app/services/state.service'; @Component({ selector: 'app-clock-face', diff --git a/frontend/src/app/components/clock/clock.component.ts b/frontend/src/app/components/clock/clock.component.ts index 4a9b19e78..4b7eab9fb 100644 --- a/frontend/src/app/components/clock/clock.component.ts +++ b/frontend/src/app/components/clock/clock.component.ts @@ -1,11 +1,11 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, HostListener, Input, OnInit } from '@angular/core'; import { Observable, Subscription, of, switchMap, tap } from 'rxjs'; -import { StateService } from '../../services/state.service'; -import { BlockExtended } from '../../interfaces/node-api.interface'; -import { WebsocketService } from '../../services/websocket.service'; -import { MempoolInfo, Recommendedfees } from '../../interfaces/websocket.interface'; +import { StateService } from '@app/services/state.service'; +import { BlockExtended } from '@app/interfaces/node-api.interface'; +import { WebsocketService } from '@app/services/websocket.service'; +import { MempoolInfo, Recommendedfees } from '@app/interfaces/websocket.interface'; import { ActivatedRoute, ParamMap, Router } from '@angular/router'; -import { RelativeUrlPipe } from '../../shared/pipes/relative-url/relative-url.pipe'; +import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; @Component({ selector: 'app-clock', diff --git a/frontend/src/app/components/clockchain/clockchain.component.ts b/frontend/src/app/components/clockchain/clockchain.component.ts index c17b1e0ae..41faa897b 100644 --- a/frontend/src/app/components/clockchain/clockchain.component.ts +++ b/frontend/src/app/components/clockchain/clockchain.component.ts @@ -1,6 +1,6 @@ import { Component, OnInit, OnDestroy, ChangeDetectionStrategy, Input, OnChanges, ChangeDetectorRef } from '@angular/core'; import { firstValueFrom, Subscription } from 'rxjs'; -import { StateService } from '../../services/state.service'; +import { StateService } from '@app/services/state.service'; @Component({ selector: 'app-clockchain', diff --git a/frontend/src/app/components/custom-dashboard/custom-dashboard.component.ts b/frontend/src/app/components/custom-dashboard/custom-dashboard.component.ts index efbd9e19c..8d7159492 100644 --- a/frontend/src/app/components/custom-dashboard/custom-dashboard.component.ts +++ b/frontend/src/app/components/custom-dashboard/custom-dashboard.component.ts @@ -1,16 +1,16 @@ import { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, HostListener, Inject, OnDestroy, OnInit, PLATFORM_ID } from '@angular/core'; import { combineLatest, merge, Observable, of, Subject, Subscription } from 'rxjs'; import { catchError, filter, map, scan, share, shareReplay, startWith, switchMap, tap } from 'rxjs/operators'; -import { BlockExtended, OptimizedMempoolStats, TransactionStripped } from '../../interfaces/node-api.interface'; -import { MempoolInfo, ReplacementInfo } from '../../interfaces/websocket.interface'; -import { ApiService } from '../../services/api.service'; -import { StateService } from '../../services/state.service'; -import { WebsocketService } from '../../services/websocket.service'; -import { SeoService } from '../../services/seo.service'; -import { ActiveFilter, FilterMode, GradientMode, toFlags } from '../../shared/filters.utils'; -import { detectWebGL } from '../../shared/graphs.utils'; -import { Address, AddressTxSummary } from '../../interfaces/electrs.interface'; -import { ElectrsApiService } from '../../services/electrs-api.service'; +import { BlockExtended, OptimizedMempoolStats, TransactionStripped } from '@app/interfaces/node-api.interface'; +import { MempoolInfo, ReplacementInfo } from '@app/interfaces/websocket.interface'; +import { ApiService } from '@app/services/api.service'; +import { StateService } from '@app/services/state.service'; +import { WebsocketService } from '@app/services/websocket.service'; +import { SeoService } from '@app/services/seo.service'; +import { ActiveFilter, FilterMode, GradientMode, toFlags } from '@app/shared/filters.utils'; +import { detectWebGL } from '@app/shared/graphs.utils'; +import { Address, AddressTxSummary } from '@app/interfaces/electrs.interface'; +import { ElectrsApiService } from '@app/services/electrs-api.service'; interface MempoolBlocksData { blocks: number; diff --git a/frontend/src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.components.ts b/frontend/src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.components.ts index 438a50f74..1257a233a 100644 --- a/frontend/src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.components.ts +++ b/frontend/src/app/components/difficulty-adjustments-table/difficulty-adjustments-table.components.ts @@ -1,10 +1,10 @@ import { Component, Inject, LOCALE_ID, OnInit } from '@angular/core'; import { Observable } from 'rxjs'; import { map } from 'rxjs/operators'; -import { ApiService } from '../../services/api.service'; +import { ApiService } from '@app/services/api.service'; import { formatNumber } from '@angular/common'; -import { selectPowerOfTen } from '../../bitcoin.utils'; -import { StateService } from '../../services/state.service'; +import { selectPowerOfTen } from '@app/bitcoin.utils'; +import { StateService } from '@app/services/state.service'; @Component({ selector: 'app-difficulty-adjustments-table', diff --git a/frontend/src/app/components/difficulty-mining/difficulty-mining.component.ts b/frontend/src/app/components/difficulty-mining/difficulty-mining.component.ts index e19f510b5..84912c8dc 100644 --- a/frontend/src/app/components/difficulty-mining/difficulty-mining.component.ts +++ b/frontend/src/app/components/difficulty-mining/difficulty-mining.component.ts @@ -1,7 +1,7 @@ import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core'; import { combineLatest, Observable } from 'rxjs'; import { map } from 'rxjs/operators'; -import { StateService } from '../../services/state.service'; +import { StateService } from '@app/services/state.service'; interface EpochProgress { base: string; diff --git a/frontend/src/app/components/difficulty/difficulty.component.ts b/frontend/src/app/components/difficulty/difficulty.component.ts index 6a99aecef..3737754df 100644 --- a/frontend/src/app/components/difficulty/difficulty.component.ts +++ b/frontend/src/app/components/difficulty/difficulty.component.ts @@ -1,7 +1,7 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, HostListener, ElementRef, ViewChild, Inject, Input, LOCALE_ID, OnInit } from '@angular/core'; import { combineLatest, Observable } from 'rxjs'; import { map } from 'rxjs/operators'; -import { StateService } from '../..//services/state.service'; +import { StateService } from '@app/services/state.service'; interface EpochProgress { base: string; @@ -247,4 +247,4 @@ function getNextBlockSubsidy(height: number): number { // Subsidy is cut in half every 210,000 blocks which will occur approximately every 4 years. subsidy >>= BigInt(halvings); return Number(subsidy); -} \ No newline at end of file +} diff --git a/frontend/src/app/components/eight-blocks/eight-blocks.component.ts b/frontend/src/app/components/eight-blocks/eight-blocks.component.ts index 81dcc4c5b..54f52643a 100644 --- a/frontend/src/app/components/eight-blocks/eight-blocks.component.ts +++ b/frontend/src/app/components/eight-blocks/eight-blocks.component.ts @@ -2,15 +2,15 @@ import { Component, OnInit, OnDestroy, ViewChildren, QueryList } from '@angular/ import { ActivatedRoute, Router } from '@angular/router'; import { catchError, startWith } from 'rxjs/operators'; import { Subject, Subscription, of } from 'rxjs'; -import { StateService } from '../../services/state.service'; -import { WebsocketService } from '../../services/websocket.service'; -import { RelativeUrlPipe } from '../../shared/pipes/relative-url/relative-url.pipe'; -import { BlockExtended, TransactionStripped } from '../../interfaces/node-api.interface'; -import { ApiService } from '../../services/api.service'; -import { BlockOverviewGraphComponent } from '../block-overview-graph/block-overview-graph.component'; -import { detectWebGL } from '../../shared/graphs.utils'; +import { StateService } from '@app/services/state.service'; +import { WebsocketService } from '@app/services/websocket.service'; +import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; +import { BlockExtended, TransactionStripped } from '@app/interfaces/node-api.interface'; +import { ApiService } from '@app/services/api.service'; +import { BlockOverviewGraphComponent } from '@components/block-overview-graph/block-overview-graph.component'; +import { detectWebGL } from '@app/shared/graphs.utils'; import { animate, style, transition, trigger } from '@angular/animations'; -import { BytesPipe } from '../../shared/pipes/bytes-pipe/bytes.pipe'; +import { BytesPipe } from '@app/shared/pipes/bytes-pipe/bytes.pipe'; function bestFitResolution(min, max, n): number { const target = (min + max) / 2; diff --git a/frontend/src/app/components/faucet/faucet.component.ts b/frontend/src/app/components/faucet/faucet.component.ts index 3e299b4fa..33d9a849e 100644 --- a/frontend/src/app/components/faucet/faucet.component.ts +++ b/frontend/src/app/components/faucet/faucet.component.ts @@ -1,12 +1,12 @@ -import { Component, OnDestroy, OnInit, ChangeDetectorRef } from "@angular/core"; -import { FormBuilder, FormGroup, Validators, ValidatorFn, AbstractControl, ValidationErrors } from "@angular/forms"; -import { Subscription } from "rxjs"; -import { ServicesApiServices } from "../../services/services-api.service"; -import { getRegex } from "../../shared/regex.utils"; -import { StateService } from "../../services/state.service"; -import { WebsocketService } from "../../services/websocket.service"; -import { AudioService } from "../../services/audio.service"; -import { HttpErrorResponse } from "@angular/common/http"; +import { Component, OnDestroy, OnInit, ChangeDetectorRef } from '@angular/core'; +import { FormBuilder, FormGroup, Validators, ValidatorFn, AbstractControl, ValidationErrors } from '@angular/forms'; +import { Subscription } from 'rxjs'; +import { ServicesApiServices } from '@app/services/services-api.service'; +import { getRegex } from '@app/shared/regex.utils'; +import { StateService } from '@app/services/state.service'; +import { WebsocketService } from '@app/services/websocket.service'; +import { AudioService } from '@app/services/audio.service'; +import { HttpErrorResponse } from '@angular/common/http'; @Component({ selector: 'app-faucet', diff --git a/frontend/src/app/components/fee-distribution-graph/fee-distribution-graph.component.ts b/frontend/src/app/components/fee-distribution-graph/fee-distribution-graph.component.ts index c26aae31a..5bae2e275 100644 --- a/frontend/src/app/components/fee-distribution-graph/fee-distribution-graph.component.ts +++ b/frontend/src/app/components/fee-distribution-graph/fee-distribution-graph.component.ts @@ -1,9 +1,9 @@ import { HostListener, OnChanges, OnDestroy } from '@angular/core'; import { Component, Input, OnInit, ChangeDetectionStrategy } from '@angular/core'; -import { TransactionStripped } from '../../interfaces/node-api.interface'; -import { StateService } from '../../services/state.service'; -import { VbytesPipe } from '../../shared/pipes/bytes-pipe/vbytes.pipe'; -import { selectPowerOfTen } from '../../bitcoin.utils'; +import { TransactionStripped } from '@app/interfaces/node-api.interface'; +import { StateService } from '@app/services/state.service'; +import { VbytesPipe } from '@app/shared/pipes/bytes-pipe/vbytes.pipe'; +import { selectPowerOfTen } from '@app/bitcoin.utils'; import { Subscription } from 'rxjs'; @Component({ diff --git a/frontend/src/app/components/fees-box/fees-box.component.ts b/frontend/src/app/components/fees-box/fees-box.component.ts index 78fd102ca..9799c45bb 100644 --- a/frontend/src/app/components/fees-box/fees-box.component.ts +++ b/frontend/src/app/components/fees-box/fees-box.component.ts @@ -1,10 +1,10 @@ import { Component, OnInit, ChangeDetectionStrategy, OnDestroy, ChangeDetectorRef } from '@angular/core'; -import { StateService } from '../../services/state.service'; +import { StateService } from '@app/services/state.service'; import { Observable, combineLatest, Subscription } from 'rxjs'; -import { Recommendedfees } from '../../interfaces/websocket.interface'; -import { feeLevels } from '../../app.constants'; +import { Recommendedfees } from '@app/interfaces/websocket.interface'; +import { feeLevels } from '@app/app.constants'; import { map, startWith, tap } from 'rxjs/operators'; -import { ThemeService } from '../../services/theme.service'; +import { ThemeService } from '@app/services/theme.service'; @Component({ selector: 'app-fees-box', diff --git a/frontend/src/app/components/fiat-selector/fiat-selector.component.ts b/frontend/src/app/components/fiat-selector/fiat-selector.component.ts index 732c6e862..a9d4b06a3 100644 --- a/frontend/src/app/components/fiat-selector/fiat-selector.component.ts +++ b/frontend/src/app/components/fiat-selector/fiat-selector.component.ts @@ -1,8 +1,8 @@ import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; -import { StorageService } from '../../services/storage.service'; -import { fiatCurrencies } from '../../app.constants'; -import { StateService } from '../../services/state.service'; +import { StorageService } from '@app/services/storage.service'; +import { fiatCurrencies } from '@app/app.constants'; +import { StateService } from '@app/services/state.service'; @Component({ selector: 'app-fiat-selector', diff --git a/frontend/src/app/components/footer/footer.component.ts b/frontend/src/app/components/footer/footer.component.ts index a78d1e195..347c00e7c 100644 --- a/frontend/src/app/components/footer/footer.component.ts +++ b/frontend/src/app/components/footer/footer.component.ts @@ -1,8 +1,8 @@ import { Component, OnInit, ChangeDetectionStrategy, Input } from '@angular/core'; -import { StateService } from '../../services/state.service'; +import { StateService } from '@app/services/state.service'; import { Observable, combineLatest } from 'rxjs'; import { map } from 'rxjs/operators'; -import { MempoolInfo } from '../../interfaces/websocket.interface'; +import { MempoolInfo } from '@app/interfaces/websocket.interface'; interface MempoolBlocksData { blocks: number; diff --git a/frontend/src/app/components/graphs/graphs.component.ts b/frontend/src/app/components/graphs/graphs.component.ts index d6dcddb2e..b2acac85d 100644 --- a/frontend/src/app/components/graphs/graphs.component.ts +++ b/frontend/src/app/components/graphs/graphs.component.ts @@ -1,6 +1,6 @@ import { Component, OnInit } from '@angular/core'; -import { StateService } from '../../services/state.service'; -import { WebsocketService } from '../../services/websocket.service'; +import { StateService } from '@app/services/state.service'; +import { WebsocketService } from '@app/services/websocket.service'; @Component({ selector: 'app-graphs', diff --git a/frontend/src/app/components/hashrate-chart/hashrate-chart.component.ts b/frontend/src/app/components/hashrate-chart/hashrate-chart.component.ts index 0d193514d..d53916b97 100644 --- a/frontend/src/app/components/hashrate-chart/hashrate-chart.component.ts +++ b/frontend/src/app/components/hashrate-chart/hashrate-chart.component.ts @@ -1,18 +1,18 @@ import { ChangeDetectionStrategy, Component, Inject, Input, LOCALE_ID, OnInit, HostBinding } from '@angular/core'; -import { echarts, EChartsOption } from '../../graphs/echarts'; +import { echarts, EChartsOption } from '@app/graphs/echarts'; import { combineLatest, fromEvent, merge, Observable, of } from 'rxjs'; import { map, mergeMap, share, startWith, switchMap, tap } from 'rxjs/operators'; -import { ApiService } from '../../services/api.service'; -import { SeoService } from '../../services/seo.service'; +import { ApiService } from '@app/services/api.service'; +import { SeoService } from '@app/services/seo.service'; import { formatNumber } from '@angular/common'; import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; -import { selectPowerOfTen } from '../../bitcoin.utils'; -import { StorageService } from '../../services/storage.service'; -import { MiningService } from '../../services/mining.service'; -import { download } from '../../shared/graphs.utils'; +import { selectPowerOfTen } from '@app/bitcoin.utils'; +import { StorageService } from '@app/services/storage.service'; +import { MiningService } from '@app/services/mining.service'; +import { download } from '@app/shared/graphs.utils'; import { ActivatedRoute } from '@angular/router'; -import { StateService } from '../../services/state.service'; -import { seoDescriptionNetwork } from '../../shared/common.utils'; +import { StateService } from '@app/services/state.service'; +import { seoDescriptionNetwork } from '@app/shared/common.utils'; @Component({ selector: 'app-hashrate-chart', diff --git a/frontend/src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.ts b/frontend/src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.ts index 3fca15bf3..f93cf460d 100644 --- a/frontend/src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.ts +++ b/frontend/src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.ts @@ -1,16 +1,16 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, Input, LOCALE_ID, OnInit, HostBinding } from '@angular/core'; -import { EChartsOption } from '../../graphs/echarts'; +import { EChartsOption } from '@app/graphs/echarts'; import { Observable } from 'rxjs'; import { delay, map, retryWhen, share, startWith, switchMap, tap } from 'rxjs/operators'; -import { ApiService } from '../../services/api.service'; -import { SeoService } from '../../services/seo.service'; +import { ApiService } from '@app/services/api.service'; +import { SeoService } from '@app/services/seo.service'; import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; -import { chartColors, poolsColor } from '../../app.constants'; -import { StorageService } from '../../services/storage.service'; -import { MiningService } from '../../services/mining.service'; -import { download } from '../../shared/graphs.utils'; +import { chartColors, poolsColor } from '@app/app.constants'; +import { StorageService } from '@app/services/storage.service'; +import { MiningService } from '@app/services/mining.service'; +import { download } from '@app/shared/graphs.utils'; import { ActivatedRoute } from '@angular/router'; -import { StateService } from '../../services/state.service'; +import { StateService } from '@app/services/state.service'; interface Hashrate { timestamp: number; diff --git a/frontend/src/app/components/incoming-transactions-graph/incoming-transactions-graph.component.ts b/frontend/src/app/components/incoming-transactions-graph/incoming-transactions-graph.component.ts index 3487d6fb0..754d5bdde 100644 --- a/frontend/src/app/components/incoming-transactions-graph/incoming-transactions-graph.component.ts +++ b/frontend/src/app/components/incoming-transactions-graph/incoming-transactions-graph.component.ts @@ -1,10 +1,10 @@ import { Component, Input, Inject, LOCALE_ID, ChangeDetectionStrategy, OnInit, OnDestroy } from '@angular/core'; -import { EChartsOption } from '../../graphs/echarts'; +import { EChartsOption } from '@app/graphs/echarts'; import { OnChanges } from '@angular/core'; -import { StorageService } from '../../services/storage.service'; -import { download, formatterXAxis, formatterXAxisLabel } from '../../shared/graphs.utils'; +import { StorageService } from '@app/services/storage.service'; +import { download, formatterXAxis, formatterXAxisLabel } from '@app/shared/graphs.utils'; import { formatNumber } from '@angular/common'; -import { StateService } from '../../services/state.service'; +import { StateService } from '@app/services/state.service'; import { Subscription } from 'rxjs'; const OUTLIERS_MEDIAN_MULTIPLIER = 4; diff --git a/frontend/src/app/components/language-selector/language-selector.component.ts b/frontend/src/app/components/language-selector/language-selector.component.ts index 2b9e559f0..b6df5599a 100644 --- a/frontend/src/app/components/language-selector/language-selector.component.ts +++ b/frontend/src/app/components/language-selector/language-selector.component.ts @@ -1,8 +1,8 @@ import { DOCUMENT } from '@angular/common'; import { ChangeDetectionStrategy, Component, Inject, OnInit } from '@angular/core'; import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; -import { languages } from '../../app.constants'; -import { LanguageService } from '../../services/language.service'; +import { languages } from '@app/app.constants'; +import { LanguageService } from '@app/services/language.service'; @Component({ selector: 'app-language-selector', diff --git a/frontend/src/app/components/lbtc-pegs-graph/lbtc-pegs-graph.component.ts b/frontend/src/app/components/lbtc-pegs-graph/lbtc-pegs-graph.component.ts index a8ec36bec..063280898 100644 --- a/frontend/src/app/components/lbtc-pegs-graph/lbtc-pegs-graph.component.ts +++ b/frontend/src/app/components/lbtc-pegs-graph/lbtc-pegs-graph.component.ts @@ -1,7 +1,7 @@ import { Component, Inject, LOCALE_ID, ChangeDetectionStrategy, Input, OnChanges, OnInit } from '@angular/core'; import { formatDate, formatNumber } from '@angular/common'; -import { EChartsOption } from '../../graphs/echarts'; -import { StateService } from '../../services/state.service'; +import { EChartsOption } from '@app/graphs/echarts'; +import { StateService } from '@app/services/state.service'; @Component({ selector: 'app-lbtc-pegs-graph', diff --git a/frontend/src/app/components/liquid-master-page/liquid-master-page.component.ts b/frontend/src/app/components/liquid-master-page/liquid-master-page.component.ts index 07929d894..be4815f28 100644 --- a/frontend/src/app/components/liquid-master-page/liquid-master-page.component.ts +++ b/frontend/src/app/components/liquid-master-page/liquid-master-page.component.ts @@ -1,9 +1,9 @@ import { Component, OnInit } from '@angular/core'; -import { Env, StateService } from '../../services/state.service'; +import { Env, StateService } from '@app/services/state.service'; import { merge, Observable, of} from 'rxjs'; -import { LanguageService } from '../../services/language.service'; -import { EnterpriseService } from '../../services/enterprise.service'; -import { NavigationService } from '../../services/navigation.service'; +import { LanguageService } from '@app/services/language.service'; +import { EnterpriseService } from '@app/services/enterprise.service'; +import { NavigationService } from '@app/services/navigation.service'; @Component({ selector: 'app-liquid-master-page', diff --git a/frontend/src/app/components/liquid-reserves-audit/expired-utxos-stats/expired-utxos-stats.component.ts b/frontend/src/app/components/liquid-reserves-audit/expired-utxos-stats/expired-utxos-stats.component.ts index 90a737275..3a266af00 100644 --- a/frontend/src/app/components/liquid-reserves-audit/expired-utxos-stats/expired-utxos-stats.component.ts +++ b/frontend/src/app/components/liquid-reserves-audit/expired-utxos-stats/expired-utxos-stats.component.ts @@ -1,6 +1,6 @@ import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core'; import { Observable, map, of } from 'rxjs'; -import { FederationUtxo } from '../../../interfaces/node-api.interface'; +import { FederationUtxo } from '@app/interfaces/node-api.interface'; @Component({ selector: 'app-expired-utxos-stats', diff --git a/frontend/src/app/components/liquid-reserves-audit/federation-addresses-list/federation-addresses-list.component.ts b/frontend/src/app/components/liquid-reserves-audit/federation-addresses-list/federation-addresses-list.component.ts index caeac1987..188a21b8c 100644 --- a/frontend/src/app/components/liquid-reserves-audit/federation-addresses-list/federation-addresses-list.component.ts +++ b/frontend/src/app/components/liquid-reserves-audit/federation-addresses-list/federation-addresses-list.component.ts @@ -1,10 +1,10 @@ import { Component, OnInit, ChangeDetectionStrategy, Input } from '@angular/core'; import { Observable, Subject, combineLatest, of, timer } from 'rxjs'; import { delayWhen, filter, map, share, shareReplay, switchMap, takeUntil, tap, throttleTime } from 'rxjs/operators'; -import { ApiService } from '../../../services/api.service'; -import { Env, StateService } from '../../../services/state.service'; -import { AuditStatus, CurrentPegs, FederationAddress } from '../../../interfaces/node-api.interface'; -import { WebsocketService } from '../../../services/websocket.service'; +import { ApiService } from '@app/services/api.service'; +import { Env, StateService } from '@app/services/state.service'; +import { AuditStatus, CurrentPegs, FederationAddress } from '@app/interfaces/node-api.interface'; +import { WebsocketService } from '@app/services/websocket.service'; @Component({ selector: 'app-federation-addresses-list', diff --git a/frontend/src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.ts b/frontend/src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.ts index e41c49643..806ab8a51 100644 --- a/frontend/src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.ts +++ b/frontend/src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.ts @@ -2,10 +2,10 @@ import { Component, OnInit, ChangeDetectionStrategy, Input } from '@angular/core import { ActivatedRoute, Router } from '@angular/router'; import { BehaviorSubject, Observable, Subject, combineLatest, of, timer } from 'rxjs'; import { delayWhen, filter, map, share, shareReplay, switchMap, takeUntil, tap, throttleTime } from 'rxjs/operators'; -import { ApiService } from '../../../services/api.service'; -import { Env, StateService } from '../../../services/state.service'; -import { AuditStatus, CurrentPegs, FederationUtxo } from '../../../interfaces/node-api.interface'; -import { WebsocketService } from '../../../services/websocket.service'; +import { ApiService } from '@app/services/api.service'; +import { Env, StateService } from '@app/services/state.service'; +import { AuditStatus, CurrentPegs, FederationUtxo } from '@app/interfaces/node-api.interface'; +import { WebsocketService } from '@app/services/websocket.service'; @Component({ selector: 'app-federation-utxos-list', diff --git a/frontend/src/app/components/liquid-reserves-audit/federation-wallet/federation-wallet.component.ts b/frontend/src/app/components/liquid-reserves-audit/federation-wallet/federation-wallet.component.ts index 51a4cedc2..1c87a8783 100644 --- a/frontend/src/app/components/liquid-reserves-audit/federation-wallet/federation-wallet.component.ts +++ b/frontend/src/app/components/liquid-reserves-audit/federation-wallet/federation-wallet.component.ts @@ -1,5 +1,5 @@ import { Component, OnInit } from '@angular/core'; -import { SeoService } from '../../../services/seo.service'; +import { SeoService } from '@app/services/seo.service'; @Component({ selector: 'app-federation-wallet', diff --git a/frontend/src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.ts b/frontend/src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.ts index d809f2fa0..f430f8178 100644 --- a/frontend/src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.ts +++ b/frontend/src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.ts @@ -2,11 +2,11 @@ import { ActivatedRoute, Router } from '@angular/router'; import { Component, OnInit, ChangeDetectionStrategy, Input, Inject, LOCALE_ID, ChangeDetectorRef } from '@angular/core'; import { BehaviorSubject, Observable, Subject, Subscription, combineLatest, of, timer } from 'rxjs'; import { delayWhen, filter, map, share, shareReplay, switchMap, take, takeUntil, tap, throttleTime } from 'rxjs/operators'; -import { ApiService } from '../../../services/api.service'; -import { Env, StateService } from '../../../services/state.service'; -import { AuditStatus, CurrentPegs, RecentPeg } from '../../../interfaces/node-api.interface'; -import { WebsocketService } from '../../../services/websocket.service'; -import { SeoService } from '../../../services/seo.service'; +import { ApiService } from '@app/services/api.service'; +import { Env, StateService } from '@app/services/state.service'; +import { AuditStatus, CurrentPegs, RecentPeg } from '@app/interfaces/node-api.interface'; +import { WebsocketService } from '@app/services/websocket.service'; +import { SeoService } from '@app/services/seo.service'; @Component({ selector: 'app-recent-pegs-list', diff --git a/frontend/src/app/components/liquid-reserves-audit/recent-pegs-stats/recent-pegs-stats.component.ts b/frontend/src/app/components/liquid-reserves-audit/recent-pegs-stats/recent-pegs-stats.component.ts index 7bf8e6910..576d3c01d 100644 --- a/frontend/src/app/components/liquid-reserves-audit/recent-pegs-stats/recent-pegs-stats.component.ts +++ b/frontend/src/app/components/liquid-reserves-audit/recent-pegs-stats/recent-pegs-stats.component.ts @@ -1,6 +1,6 @@ import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core'; import { Observable } from 'rxjs'; -import { PegsVolume } from '../../../interfaces/node-api.interface'; +import { PegsVolume } from '@app/interfaces/node-api.interface'; @Component({ selector: 'app-recent-pegs-stats', diff --git a/frontend/src/app/components/liquid-reserves-audit/reserves-ratio/reserves-ratio.component.ts b/frontend/src/app/components/liquid-reserves-audit/reserves-ratio/reserves-ratio.component.ts index 45cd63db0..4fde65d63 100644 --- a/frontend/src/app/components/liquid-reserves-audit/reserves-ratio/reserves-ratio.component.ts +++ b/frontend/src/app/components/liquid-reserves-audit/reserves-ratio/reserves-ratio.component.ts @@ -1,6 +1,6 @@ import { Component, ChangeDetectionStrategy, Input, OnChanges, OnInit, HostListener } from '@angular/core'; -import { EChartsOption } from '../../../graphs/echarts'; -import { CurrentPegs } from '../../../interfaces/node-api.interface'; +import { EChartsOption } from '@app/graphs/echarts'; +import { CurrentPegs } from '@app/interfaces/node-api.interface'; @Component({ diff --git a/frontend/src/app/components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component.ts b/frontend/src/app/components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component.ts index 61f2deb8c..867e60d3c 100644 --- a/frontend/src/app/components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component.ts +++ b/frontend/src/app/components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component.ts @@ -1,7 +1,7 @@ import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core'; import { Observable } from 'rxjs'; -import { Env, StateService } from '../../../services/state.service'; -import { CurrentPegs } from '../../../interfaces/node-api.interface'; +import { Env, StateService } from '@app/services/state.service'; +import { CurrentPegs } from '@app/interfaces/node-api.interface'; @Component({ selector: 'app-reserves-supply-stats', diff --git a/frontend/src/app/components/loading-indicator/loading-indicator.component.ts b/frontend/src/app/components/loading-indicator/loading-indicator.component.ts index 83a5ccc72..9cdb0bd06 100644 --- a/frontend/src/app/components/loading-indicator/loading-indicator.component.ts +++ b/frontend/src/app/components/loading-indicator/loading-indicator.component.ts @@ -1,8 +1,8 @@ import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core'; import { Observable } from 'rxjs'; import { map } from 'rxjs/operators'; -import { StateService } from '../../services/state.service'; -import { WebsocketService } from '../../services/websocket.service'; +import { StateService } from '@app/services/state.service'; +import { WebsocketService } from '@app/services/websocket.service'; @Component({ selector: 'app-loading-indicator', diff --git a/frontend/src/app/components/master-page-preview/master-page-preview.component.ts b/frontend/src/app/components/master-page-preview/master-page-preview.component.ts index 64bdcfda2..c9db2b143 100644 --- a/frontend/src/app/components/master-page-preview/master-page-preview.component.ts +++ b/frontend/src/app/components/master-page-preview/master-page-preview.component.ts @@ -1,8 +1,8 @@ import { Component, OnInit } from '@angular/core'; -import { StateService } from '../../services/state.service'; +import { StateService } from '@app/services/state.service'; import { Observable, Subscription, merge, of } from 'rxjs'; -import { LanguageService } from '../../services/language.service'; -import { EnterpriseService } from '../../services/enterprise.service'; +import { LanguageService } from '@app/services/language.service'; +import { EnterpriseService } from '@app/services/enterprise.service'; @Component({ selector: 'app-master-page-preview', diff --git a/frontend/src/app/components/master-page-preview/preview-title.component.ts b/frontend/src/app/components/master-page-preview/preview-title.component.ts index a26368c89..07883475b 100644 --- a/frontend/src/app/components/master-page-preview/preview-title.component.ts +++ b/frontend/src/app/components/master-page-preview/preview-title.component.ts @@ -1,5 +1,5 @@ import { Component, OnInit } from '@angular/core'; -import { StateService } from '../../services/state.service'; +import { StateService } from '@app/services/state.service'; import { Observable, merge, of } from 'rxjs'; @Component({ diff --git a/frontend/src/app/components/master-page/master-page.component.ts b/frontend/src/app/components/master-page/master-page.component.ts index e351e9196..d8f7edda4 100644 --- a/frontend/src/app/components/master-page/master-page.component.ts +++ b/frontend/src/app/components/master-page/master-page.component.ts @@ -1,12 +1,12 @@ import { Component, OnInit, OnDestroy, Input, ViewChild } from '@angular/core'; import { Router } from '@angular/router'; -import { Env, StateService } from '../../services/state.service'; +import { Env, StateService } from '@app/services/state.service'; import { Observable, merge, of, Subscription } from 'rxjs'; -import { LanguageService } from '../../services/language.service'; -import { EnterpriseService } from '../../services/enterprise.service'; -import { NavigationService } from '../../services/navigation.service'; -import { MenuComponent } from '../menu/menu.component'; -import { StorageService } from '../../services/storage.service'; +import { LanguageService } from '@app/services/language.service'; +import { EnterpriseService } from '@app/services/enterprise.service'; +import { NavigationService } from '@app/services/navigation.service'; +import { MenuComponent } from '@components/menu/menu.component'; +import { StorageService } from '@app/services/storage.service'; @Component({ selector: 'app-master-page', diff --git a/frontend/src/app/components/mempool-block-overview/mempool-block-overview.component.ts b/frontend/src/app/components/mempool-block-overview/mempool-block-overview.component.ts index 50f8b650f..f124b8b05 100644 --- a/frontend/src/app/components/mempool-block-overview/mempool-block-overview.component.ts +++ b/frontend/src/app/components/mempool-block-overview/mempool-block-overview.component.ts @@ -1,16 +1,16 @@ import { Component, ViewChild, Input, Output, EventEmitter, OnInit, OnDestroy, OnChanges, ChangeDetectionStrategy, ChangeDetectorRef, AfterViewInit } from '@angular/core'; -import { StateService } from '../../services/state.service'; -import { MempoolBlockDelta, isMempoolDelta } from '../../interfaces/websocket.interface'; -import { TransactionStripped } from '../../interfaces/node-api.interface'; -import { BlockOverviewGraphComponent } from '../../components/block-overview-graph/block-overview-graph.component'; +import { StateService } from '@app/services/state.service'; +import { MempoolBlockDelta, isMempoolDelta } from '@app/interfaces/websocket.interface'; +import { TransactionStripped } from '@app/interfaces/node-api.interface'; +import { BlockOverviewGraphComponent } from '@components/block-overview-graph/block-overview-graph.component'; import { Subscription, BehaviorSubject } from 'rxjs'; -import { WebsocketService } from '../../services/websocket.service'; -import { RelativeUrlPipe } from '../../shared/pipes/relative-url/relative-url.pipe'; +import { WebsocketService } from '@app/services/websocket.service'; +import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; import { Router } from '@angular/router'; -import { Color } from '../block-overview-graph/sprite-types'; -import TxView from '../block-overview-graph/tx-view'; -import { FilterMode, GradientMode } from '../../shared/filters.utils'; +import { Color } from '@components/block-overview-graph/sprite-types'; +import TxView from '@components/block-overview-graph/tx-view'; +import { FilterMode, GradientMode } from '@app/shared/filters.utils'; @Component({ selector: 'app-mempool-block-overview', diff --git a/frontend/src/app/components/mempool-block-view/mempool-block-view.component.ts b/frontend/src/app/components/mempool-block-view/mempool-block-view.component.ts index a671033cf..4d2a21064 100644 --- a/frontend/src/app/components/mempool-block-view/mempool-block-view.component.ts +++ b/frontend/src/app/components/mempool-block-view/mempool-block-view.component.ts @@ -1,8 +1,8 @@ import { Component, OnInit, OnDestroy, HostListener } from '@angular/core'; import { ActivatedRoute, ParamMap } from '@angular/router'; import { Subscription, filter, map, switchMap, tap } from 'rxjs'; -import { StateService } from '../../services/state.service'; -import { WebsocketService } from '../../services/websocket.service'; +import { StateService } from '@app/services/state.service'; +import { WebsocketService } from '@app/services/websocket.service'; function bestFitResolution(min, max, n): number { const target = (min + max) / 2; diff --git a/frontend/src/app/components/mempool-block/mempool-block.component.ts b/frontend/src/app/components/mempool-block/mempool-block.component.ts index d2e658302..767ebd30b 100644 --- a/frontend/src/app/components/mempool-block/mempool-block.component.ts +++ b/frontend/src/app/components/mempool-block/mempool-block.component.ts @@ -1,14 +1,14 @@ import { Component, OnInit, OnDestroy, ChangeDetectionStrategy, Inject, PLATFORM_ID, ChangeDetectorRef } from '@angular/core'; -import { detectWebGL } from '../../shared/graphs.utils'; -import { StateService } from '../../services/state.service'; +import { detectWebGL } from '@app/shared/graphs.utils'; +import { StateService } from '@app/services/state.service'; import { ActivatedRoute, ParamMap } from '@angular/router'; import { switchMap, map, tap, filter } from 'rxjs/operators'; -import { MempoolBlock } from '../../interfaces/websocket.interface'; -import { TransactionStripped } from '../../interfaces/node-api.interface'; +import { MempoolBlock } from '@app/interfaces/websocket.interface'; +import { TransactionStripped } from '@app/interfaces/node-api.interface'; import { Observable, BehaviorSubject } from 'rxjs'; -import { SeoService } from '../../services/seo.service'; -import { seoDescriptionNetwork } from '../../shared/common.utils'; -import { WebsocketService } from '../../services/websocket.service'; +import { SeoService } from '@app/services/seo.service'; +import { seoDescriptionNetwork } from '@app/shared/common.utils'; +import { WebsocketService } from '@app/services/websocket.service'; @Component({ selector: 'app-mempool-block', diff --git a/frontend/src/app/components/mempool-blocks/mempool-blocks.component.ts b/frontend/src/app/components/mempool-blocks/mempool-blocks.component.ts index af5a91c65..bb16093c0 100644 --- a/frontend/src/app/components/mempool-blocks/mempool-blocks.component.ts +++ b/frontend/src/app/components/mempool-blocks/mempool-blocks.component.ts @@ -1,17 +1,17 @@ import { Component, OnInit, OnDestroy, ChangeDetectionStrategy, ChangeDetectorRef, HostListener, Input, OnChanges, SimpleChanges, Output, EventEmitter, ViewChild, ElementRef } from '@angular/core'; import { Subscription, Observable, of, combineLatest } from 'rxjs'; -import { MempoolBlock } from '../../interfaces/websocket.interface'; -import { StateService } from '../../services/state.service'; -import { EtaService } from '../../services/eta.service'; +import { MempoolBlock } from '@app/interfaces/websocket.interface'; +import { StateService } from '@app/services/state.service'; +import { EtaService } from '@app/services/eta.service'; import { Router } from '@angular/router'; import { delay, filter, map, switchMap, tap } from 'rxjs/operators'; -import { feeLevels } from '../../app.constants'; -import { specialBlocks } from '../../app.constants'; -import { RelativeUrlPipe } from '../../shared/pipes/relative-url/relative-url.pipe'; +import { feeLevels } from '@app/app.constants'; +import { specialBlocks } from '@app/app.constants'; +import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; import { Location } from '@angular/common'; -import { DifficultyAdjustment, MempoolPosition } from '../../interfaces/node-api.interface'; +import { DifficultyAdjustment, MempoolPosition } from '@app/interfaces/node-api.interface'; import { animate, style, transition, trigger } from '@angular/animations'; -import { ThemeService } from '../../services/theme.service'; +import { ThemeService } from '@app/services/theme.service'; @Component({ selector: 'app-mempool-blocks', @@ -472,4 +472,4 @@ export class MempoolBlocksComponent implements OnInit, OnChanges, OnDestroy { } return emptyBlocks; } -} \ No newline at end of file +} diff --git a/frontend/src/app/components/mempool-graph/mempool-graph.component.ts b/frontend/src/app/components/mempool-graph/mempool-graph.component.ts index 3a707987f..7f70e0f75 100644 --- a/frontend/src/app/components/mempool-graph/mempool-graph.component.ts +++ b/frontend/src/app/components/mempool-graph/mempool-graph.component.ts @@ -1,14 +1,14 @@ import { Component, OnInit, Input, Inject, LOCALE_ID, ChangeDetectionStrategy, OnChanges } from '@angular/core'; -import { VbytesPipe } from '../../shared/pipes/bytes-pipe/vbytes.pipe'; -import { WuBytesPipe } from '../../shared/pipes/bytes-pipe/wubytes.pipe'; -import { AmountShortenerPipe } from '../../shared/pipes/amount-shortener.pipe'; +import { VbytesPipe } from '@app/shared/pipes/bytes-pipe/vbytes.pipe'; +import { WuBytesPipe } from '@app/shared/pipes/bytes-pipe/wubytes.pipe'; +import { AmountShortenerPipe } from '@app/shared/pipes/amount-shortener.pipe'; import { formatNumber } from '@angular/common'; -import { OptimizedMempoolStats } from '../../interfaces/node-api.interface'; -import { StateService } from '../../services/state.service'; -import { StorageService } from '../../services/storage.service'; -import { EChartsOption } from '../../graphs/echarts'; -import { feeLevels, chartColors } from '../../app.constants'; -import { download, formatterXAxis, formatterXAxisLabel } from '../../shared/graphs.utils'; +import { OptimizedMempoolStats } from '@app/interfaces/node-api.interface'; +import { StateService } from '@app/services/state.service'; +import { StorageService } from '@app/services/storage.service'; +import { EChartsOption } from '@app/graphs/echarts'; +import { feeLevels, chartColors } from '@app/app.constants'; +import { download, formatterXAxis, formatterXAxisLabel } from '@app/shared/graphs.utils'; @Component({ selector: 'app-mempool-graph', diff --git a/frontend/src/app/components/menu/menu.component.ts b/frontend/src/app/components/menu/menu.component.ts index 719495bb0..8bb350a78 100644 --- a/frontend/src/app/components/menu/menu.component.ts +++ b/frontend/src/app/components/menu/menu.component.ts @@ -1,11 +1,11 @@ import { Component, OnInit, Input, Output, EventEmitter, HostListener, OnDestroy } from '@angular/core'; import { Observable } from 'rxjs'; -import { MenuGroup } from '../../interfaces/services.interface'; -import { StorageService } from '../../services/storage.service'; +import { MenuGroup } from '@app/interfaces/services.interface'; +import { StorageService } from '@app/services/storage.service'; import { Router, NavigationStart } from '@angular/router'; -import { StateService } from '../../services/state.service'; -import { IUser, ServicesApiServices } from '../../services/services-api.service'; -import { AuthServiceMempool } from '../../services/auth.service'; +import { StateService } from '@app/services/state.service'; +import { IUser, ServicesApiServices } from '@app/services/services-api.service'; +import { AuthServiceMempool } from '@app/services/auth.service'; @Component({ selector: 'app-menu', diff --git a/frontend/src/app/components/mining-dashboard/mining-dashboard.component.ts b/frontend/src/app/components/mining-dashboard/mining-dashboard.component.ts index 0e0974808..464866c40 100644 --- a/frontend/src/app/components/mining-dashboard/mining-dashboard.component.ts +++ b/frontend/src/app/components/mining-dashboard/mining-dashboard.component.ts @@ -1,8 +1,8 @@ import { AfterViewInit, ChangeDetectionStrategy, Component, HostListener, OnInit } from '@angular/core'; -import { SeoService } from '../../services/seo.service'; -import { OpenGraphService } from '../../services/opengraph.service'; -import { WebsocketService } from '../../services/websocket.service'; -import { StateService } from '../../services/state.service'; +import { SeoService } from '@app/services/seo.service'; +import { OpenGraphService } from '@app/services/opengraph.service'; +import { WebsocketService } from '@app/services/websocket.service'; +import { StateService } from '@app/services/state.service'; import { EventType, NavigationStart, Router } from '@angular/router'; @Component({ diff --git a/frontend/src/app/components/ord-data/ord-data.component.ts b/frontend/src/app/components/ord-data/ord-data.component.ts index 6c6d2af20..4c0318718 100644 --- a/frontend/src/app/components/ord-data/ord-data.component.ts +++ b/frontend/src/app/components/ord-data/ord-data.component.ts @@ -1,6 +1,6 @@ import { ChangeDetectionStrategy, Component, Input, OnChanges, SimpleChanges } from '@angular/core'; -import { Runestone, Etching } from '../../shared/ord/rune.utils'; -import { Inscription } from '../../shared/ord/inscription.utils'; +import { Runestone, Etching } from '@app/shared/ord/rune.utils'; +import { Inscription } from '@app/shared/ord/inscription.utils'; @Component({ selector: 'app-ord-data', diff --git a/frontend/src/app/components/pool-ranking/pool-ranking.component.ts b/frontend/src/app/components/pool-ranking/pool-ranking.component.ts index 2e8a820be..27a219ed3 100644 --- a/frontend/src/app/components/pool-ranking/pool-ranking.component.ts +++ b/frontend/src/app/components/pool-ranking/pool-ranking.component.ts @@ -1,17 +1,17 @@ import { ChangeDetectionStrategy, Component, Input, NgZone, OnInit, HostBinding } from '@angular/core'; import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; import { ActivatedRoute, Router } from '@angular/router'; -import { EChartsOption, PieSeriesOption } from '../../graphs/echarts'; +import { EChartsOption, PieSeriesOption } from '@app/graphs/echarts'; import { merge, Observable } from 'rxjs'; import { map, shareReplay, startWith, switchMap, tap } from 'rxjs/operators'; -import { SeoService } from '../../services/seo.service'; -import { StorageService } from '../..//services/storage.service'; -import { MiningService, MiningStats } from '../../services/mining.service'; -import { StateService } from '../../services/state.service'; -import { chartColors, poolsColor } from '../../app.constants'; -import { RelativeUrlPipe } from '../../shared/pipes/relative-url/relative-url.pipe'; -import { download } from '../../shared/graphs.utils'; -import { isMobile } from '../../shared/common.utils'; +import { SeoService } from '@app/services/seo.service'; +import { StorageService } from '@app//services/storage.service'; +import { MiningService, MiningStats } from '@app/services/mining.service'; +import { StateService } from '@app/services/state.service'; +import { chartColors, poolsColor } from '@app/app.constants'; +import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; +import { download } from '@app/shared/graphs.utils'; +import { isMobile } from '@app/shared/common.utils'; @Component({ selector: 'app-pool-ranking', diff --git a/frontend/src/app/components/pool/pool-preview.component.ts b/frontend/src/app/components/pool/pool-preview.component.ts index e0c786082..a3d674f14 100644 --- a/frontend/src/app/components/pool/pool-preview.component.ts +++ b/frontend/src/app/components/pool/pool-preview.component.ts @@ -1,14 +1,14 @@ import { ChangeDetectionStrategy, Component, Inject, LOCALE_ID, OnInit } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; -import { echarts, EChartsOption } from '../../graphs/echarts'; +import { echarts, EChartsOption } from '@app/graphs/echarts'; import { Observable, of } from 'rxjs'; import { map, switchMap, catchError } from 'rxjs/operators'; -import { PoolStat } from '../../interfaces/node-api.interface'; -import { ApiService } from '../../services/api.service'; -import { StateService } from '../../services/state.service'; +import { PoolStat } from '@app/interfaces/node-api.interface'; +import { ApiService } from '@app/services/api.service'; +import { StateService } from '@app/services/state.service'; import { formatNumber } from '@angular/common'; -import { SeoService } from '../../services/seo.service'; -import { OpenGraphService } from '../../services/opengraph.service'; +import { SeoService } from '@app/services/seo.service'; +import { OpenGraphService } from '@app/services/opengraph.service'; @Component({ selector: 'app-pool-preview', diff --git a/frontend/src/app/components/pool/pool.component.ts b/frontend/src/app/components/pool/pool.component.ts index 6564a5dd9..32947a702 100644 --- a/frontend/src/app/components/pool/pool.component.ts +++ b/frontend/src/app/components/pool/pool.component.ts @@ -1,14 +1,14 @@ import { ChangeDetectionStrategy, Component, Inject, Input, LOCALE_ID, OnInit } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; -import { echarts, EChartsOption } from '../../graphs/echarts'; +import { echarts, EChartsOption } from '@app/graphs/echarts'; import { BehaviorSubject, Observable, Subscription, combineLatest, of } from 'rxjs'; import { catchError, distinctUntilChanged, filter, map, share, switchMap, tap } from 'rxjs/operators'; -import { BlockExtended, PoolStat } from '../../interfaces/node-api.interface'; -import { ApiService } from '../../services/api.service'; -import { StateService } from '../../services/state.service'; -import { selectPowerOfTen } from '../../bitcoin.utils'; +import { BlockExtended, PoolStat } from '@app/interfaces/node-api.interface'; +import { ApiService } from '@app/services/api.service'; +import { StateService } from '@app/services/state.service'; +import { selectPowerOfTen } from '@app/bitcoin.utils'; import { formatNumber } from '@angular/common'; -import { SeoService } from '../../services/seo.service'; +import { SeoService } from '@app/services/seo.service'; import { HttpErrorResponse } from '@angular/common/http'; interface AccelerationTotal { diff --git a/frontend/src/app/components/privacy-policy/privacy-policy.component.ts b/frontend/src/app/components/privacy-policy/privacy-policy.component.ts index 05f77c063..339028cd2 100644 --- a/frontend/src/app/components/privacy-policy/privacy-policy.component.ts +++ b/frontend/src/app/components/privacy-policy/privacy-policy.component.ts @@ -1,7 +1,7 @@ import { Component } from '@angular/core'; -import { Env, StateService } from '../../services/state.service'; -import { SeoService } from '../../services/seo.service'; -import { OpenGraphService } from '../../services/opengraph.service'; +import { Env, StateService } from '@app/services/state.service'; +import { SeoService } from '@app/services/seo.service'; +import { OpenGraphService } from '@app/services/opengraph.service'; @Component({ selector: 'app-privacy-policy', diff --git a/frontend/src/app/components/privacy-policy/privacy-policy.module.ts b/frontend/src/app/components/privacy-policy/privacy-policy.module.ts index 6d279d80a..385fe15c2 100644 --- a/frontend/src/app/components/privacy-policy/privacy-policy.module.ts +++ b/frontend/src/app/components/privacy-policy/privacy-policy.module.ts @@ -1,8 +1,8 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { Routes, RouterModule } from '@angular/router'; -import { PrivacyPolicyComponent } from './privacy-policy.component'; -import { SharedModule } from '../../shared/shared.module'; +import { PrivacyPolicyComponent } from '@components/privacy-policy/privacy-policy.component'; +import { SharedModule } from '@app/shared/shared.module'; const routes: Routes = [ { diff --git a/frontend/src/app/components/push-transaction/push-transaction.component.ts b/frontend/src/app/components/push-transaction/push-transaction.component.ts index cec2f026b..f2c23bc2e 100644 --- a/frontend/src/app/components/push-transaction/push-transaction.component.ts +++ b/frontend/src/app/components/push-transaction/push-transaction.component.ts @@ -1,13 +1,13 @@ import { Component, OnInit } from '@angular/core'; import { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms'; -import { ApiService } from '../../services/api.service'; -import { StateService } from '../../services/state.service'; -import { SeoService } from '../../services/seo.service'; -import { OpenGraphService } from '../../services/opengraph.service'; -import { seoDescriptionNetwork } from '../../shared/common.utils'; +import { ApiService } from '@app/services/api.service'; +import { StateService } from '@app/services/state.service'; +import { SeoService } from '@app/services/seo.service'; +import { OpenGraphService } from '@app/services/opengraph.service'; +import { seoDescriptionNetwork } from '@app/shared/common.utils'; import { ActivatedRoute, Router } from '@angular/router'; -import { RelativeUrlPipe } from '../../shared/pipes/relative-url/relative-url.pipe'; -import { TxResult } from '../../interfaces/node-api.interface'; +import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; +import { TxResult } from '@app/interfaces/node-api.interface'; @Component({ selector: 'app-push-transaction', diff --git a/frontend/src/app/components/qrcode/qrcode.component.ts b/frontend/src/app/components/qrcode/qrcode.component.ts index f377895c0..061625eed 100644 --- a/frontend/src/app/components/qrcode/qrcode.component.ts +++ b/frontend/src/app/components/qrcode/qrcode.component.ts @@ -1,6 +1,6 @@ import { Component, Input, AfterViewInit, ViewChild, ElementRef, ChangeDetectionStrategy } from '@angular/core'; import * as QRCode from 'qrcode'; -import { StateService } from '../../services/state.service'; +import { StateService } from '@app/services/state.service'; @Component({ selector: 'app-qrcode', diff --git a/frontend/src/app/components/rate-unit-selector/rate-unit-selector.component.ts b/frontend/src/app/components/rate-unit-selector/rate-unit-selector.component.ts index a7d94cec2..5e6b324bf 100644 --- a/frontend/src/app/components/rate-unit-selector/rate-unit-selector.component.ts +++ b/frontend/src/app/components/rate-unit-selector/rate-unit-selector.component.ts @@ -1,7 +1,7 @@ import { ChangeDetectionStrategy, Component, OnDestroy, OnInit } from '@angular/core'; import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; -import { StorageService } from '../../services/storage.service'; -import { StateService } from '../../services/state.service'; +import { StorageService } from '@app/services/storage.service'; +import { StateService } from '@app/services/state.service'; import { Subscription } from 'rxjs'; @Component({ diff --git a/frontend/src/app/components/rbf-list/rbf-list.component.ts b/frontend/src/app/components/rbf-list/rbf-list.component.ts index 25f7dea2e..d561dd3f5 100644 --- a/frontend/src/app/components/rbf-list/rbf-list.component.ts +++ b/frontend/src/app/components/rbf-list/rbf-list.component.ts @@ -2,13 +2,13 @@ import { Component, OnInit, ChangeDetectionStrategy, OnDestroy } from '@angular/ import { ActivatedRoute, Router } from '@angular/router'; import { BehaviorSubject, EMPTY, merge, Observable, Subscription } from 'rxjs'; import { catchError, switchMap, tap } from 'rxjs/operators'; -import { WebsocketService } from '../../services/websocket.service'; -import { RbfTree } from '../../interfaces/node-api.interface'; -import { ApiService } from '../../services/api.service'; -import { StateService } from '../../services/state.service'; -import { SeoService } from '../../services/seo.service'; -import { OpenGraphService } from '../../services/opengraph.service'; -import { seoDescriptionNetwork } from '../../shared/common.utils'; +import { WebsocketService } from '@app/services/websocket.service'; +import { RbfTree } from '@app/interfaces/node-api.interface'; +import { ApiService } from '@app/services/api.service'; +import { StateService } from '@app/services/state.service'; +import { SeoService } from '@app/services/seo.service'; +import { OpenGraphService } from '@app/services/opengraph.service'; +import { seoDescriptionNetwork } from '@app/shared/common.utils'; @Component({ selector: 'app-rbf-list', diff --git a/frontend/src/app/components/rbf-timeline/rbf-timeline-tooltip.component.ts b/frontend/src/app/components/rbf-timeline/rbf-timeline-tooltip.component.ts index fc3748f32..d03f3f8d4 100644 --- a/frontend/src/app/components/rbf-timeline/rbf-timeline-tooltip.component.ts +++ b/frontend/src/app/components/rbf-timeline/rbf-timeline-tooltip.component.ts @@ -1,5 +1,5 @@ import { Component, ElementRef, ViewChild, Input, OnChanges } from '@angular/core'; -import { RbfTree } from '../../interfaces/node-api.interface'; +import { RbfTree } from '@app/interfaces/node-api.interface'; @Component({ selector: 'app-rbf-timeline-tooltip', diff --git a/frontend/src/app/components/rbf-timeline/rbf-timeline.component.ts b/frontend/src/app/components/rbf-timeline/rbf-timeline.component.ts index 83654a137..766eb30c1 100644 --- a/frontend/src/app/components/rbf-timeline/rbf-timeline.component.ts +++ b/frontend/src/app/components/rbf-timeline/rbf-timeline.component.ts @@ -1,8 +1,8 @@ import { Component, Input, OnInit, OnChanges, Inject, LOCALE_ID, HostListener } from '@angular/core'; import { Router } from '@angular/router'; -import { RbfTree, RbfTransaction } from '../../interfaces/node-api.interface'; -import { StateService } from '../../services/state.service'; -import { ApiService } from '../../services/api.service'; +import { RbfTree, RbfTransaction } from '@app/interfaces/node-api.interface'; +import { StateService } from '@app/services/state.service'; +import { ApiService } from '@app/services/api.service'; type Connector = 'pipe' | 'corner'; diff --git a/frontend/src/app/components/reward-stats/reward-stats.component.ts b/frontend/src/app/components/reward-stats/reward-stats.component.ts index 5aac641b0..34dc55222 100644 --- a/frontend/src/app/components/reward-stats/reward-stats.component.ts +++ b/frontend/src/app/components/reward-stats/reward-stats.component.ts @@ -1,8 +1,8 @@ import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; import { concat, Observable } from 'rxjs'; import { map, switchMap, tap } from 'rxjs/operators'; -import { ApiService } from '../../services/api.service'; -import { StateService } from '../../services/state.service'; +import { ApiService } from '@app/services/api.service'; +import { StateService } from '@app/services/state.service'; @Component({ selector: 'app-reward-stats', diff --git a/frontend/src/app/components/search-form/search-form.component.ts b/frontend/src/app/components/search-form/search-form.component.ts index 3f48861d5..c0654c372 100644 --- a/frontend/src/app/components/search-form/search-form.component.ts +++ b/frontend/src/app/components/search-form/search-form.component.ts @@ -1,15 +1,15 @@ import { Component, OnInit, ChangeDetectionStrategy, EventEmitter, Output, ViewChild, HostListener, ElementRef, Input } from '@angular/core'; import { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms'; import { EventType, NavigationStart, Router } from '@angular/router'; -import { AssetsService } from '../../services/assets.service'; -import { Env, StateService } from '../../services/state.service'; +import { AssetsService } from '@app/services/assets.service'; +import { Env, StateService } from '@app/services/state.service'; import { Observable, of, Subject, zip, BehaviorSubject, combineLatest } from 'rxjs'; import { debounceTime, distinctUntilChanged, switchMap, catchError, map, startWith, tap } from 'rxjs/operators'; -import { ElectrsApiService } from '../../services/electrs-api.service'; -import { RelativeUrlPipe } from '../../shared/pipes/relative-url/relative-url.pipe'; -import { ApiService } from '../../services/api.service'; -import { SearchResultsComponent } from './search-results/search-results.component'; -import { Network, findOtherNetworks, getRegex, getTargetUrl, needBaseModuleChange } from '../../shared/regex.utils'; +import { ElectrsApiService } from '@app/services/electrs-api.service'; +import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; +import { ApiService } from '@app/services/api.service'; +import { SearchResultsComponent } from '@components/search-form/search-results/search-results.component'; +import { Network, findOtherNetworks, getRegex, getTargetUrl, needBaseModuleChange } from '@app/shared/regex.utils'; @Component({ selector: 'app-search-form', diff --git a/frontend/src/app/components/search-form/search-results/search-results.component.ts b/frontend/src/app/components/search-form/search-results/search-results.component.ts index 04976028b..6a4efcd87 100644 --- a/frontend/src/app/components/search-form/search-results/search-results.component.ts +++ b/frontend/src/app/components/search-form/search-results/search-results.component.ts @@ -1,5 +1,5 @@ import { Component, EventEmitter, Input, OnChanges, Output } from '@angular/core'; -import { StateService } from '../../../services/state.service'; +import { StateService } from '@app/services/state.service'; @Component({ selector: 'app-search-results', diff --git a/frontend/src/app/components/server-health/server-health.component.ts b/frontend/src/app/components/server-health/server-health.component.ts index 37e23f12a..8eff44db0 100644 --- a/frontend/src/app/components/server-health/server-health.component.ts +++ b/frontend/src/app/components/server-health/server-health.component.ts @@ -1,8 +1,8 @@ import { Component, OnInit, ChangeDetectionStrategy, SecurityContext, ChangeDetectorRef } from '@angular/core'; -import { WebsocketService } from '../../services/websocket.service'; +import { WebsocketService } from '@app/services/websocket.service'; import { Observable, Subject, map } from 'rxjs'; -import { StateService } from '../../services/state.service'; -import { HealthCheckHost } from '../../interfaces/websocket.interface'; +import { StateService } from '@app/services/state.service'; +import { HealthCheckHost } from '@app/interfaces/websocket.interface'; import { DomSanitizer } from '@angular/platform-browser'; @Component({ diff --git a/frontend/src/app/components/server-health/server-status.component.ts b/frontend/src/app/components/server-health/server-status.component.ts index e1300a68d..25fb8c074 100644 --- a/frontend/src/app/components/server-health/server-status.component.ts +++ b/frontend/src/app/components/server-health/server-status.component.ts @@ -1,8 +1,8 @@ import { Component, OnInit, ChangeDetectionStrategy, SecurityContext, OnDestroy, ChangeDetectorRef } from '@angular/core'; -import { WebsocketService } from '../../services/websocket.service'; +import { WebsocketService } from '@app/services/websocket.service'; import { Observable, Subject, Subscription, map, tap } from 'rxjs'; -import { StateService } from '../../services/state.service'; -import { HealthCheckHost } from '../../interfaces/websocket.interface'; +import { StateService } from '@app/services/state.service'; +import { HealthCheckHost } from '@app/interfaces/websocket.interface'; import { DomSanitizer } from '@angular/platform-browser'; @Component({ diff --git a/frontend/src/app/components/start/start.component.ts b/frontend/src/app/components/start/start.component.ts index 18578adea..2d4b2a6e4 100644 --- a/frontend/src/app/components/start/start.component.ts +++ b/frontend/src/app/components/start/start.component.ts @@ -1,10 +1,10 @@ import { Component, ElementRef, HostListener, OnInit, OnDestroy, ViewChild, Input, ChangeDetectorRef, ChangeDetectionStrategy, AfterViewChecked } from '@angular/core'; import { Subscription } from 'rxjs'; -import { MarkBlockState, StateService } from '../../services/state.service'; -import { specialBlocks } from '../../app.constants'; -import { BlockExtended } from '../../interfaces/node-api.interface'; +import { MarkBlockState, StateService } from '@app/services/state.service'; +import { specialBlocks } from '@app/app.constants'; +import { BlockExtended } from '@app/interfaces/node-api.interface'; import { Router } from '@angular/router'; -import { sleep$ } from '../../shared/common.utils'; +import { sleep$ } from '@app/shared/common.utils'; @Component({ selector: 'app-start', diff --git a/frontend/src/app/components/statistics/statistics.component.ts b/frontend/src/app/components/statistics/statistics.component.ts index 835b74227..7aec4414b 100644 --- a/frontend/src/app/components/statistics/statistics.component.ts +++ b/frontend/src/app/components/statistics/statistics.component.ts @@ -4,16 +4,16 @@ import { UntypedFormGroup, UntypedFormBuilder } from '@angular/forms'; import { of, merge} from 'rxjs'; import { switchMap } from 'rxjs/operators'; -import { OptimizedMempoolStats } from '../../interfaces/node-api.interface'; -import { WebsocketService } from '../../services/websocket.service'; -import { ApiService } from '../../services/api.service'; +import { OptimizedMempoolStats } from '@app/interfaces/node-api.interface'; +import { WebsocketService } from '@app/services/websocket.service'; +import { ApiService } from '@app/services/api.service'; -import { StateService } from '../../services/state.service'; -import { SeoService } from '../../services/seo.service'; -import { StorageService } from '../../services/storage.service'; -import { feeLevels, chartColors } from '../../app.constants'; -import { MempoolGraphComponent } from '../mempool-graph/mempool-graph.component'; -import { IncomingTransactionsGraphComponent } from '../incoming-transactions-graph/incoming-transactions-graph.component'; +import { StateService } from '@app/services/state.service'; +import { SeoService } from '@app/services/seo.service'; +import { StorageService } from '@app/services/storage.service'; +import { feeLevels, chartColors } from '@app/app.constants'; +import { MempoolGraphComponent } from '@components/mempool-graph/mempool-graph.component'; +import { IncomingTransactionsGraphComponent } from '@components/incoming-transactions-graph/incoming-transactions-graph.component'; @Component({ selector: 'app-statistics', diff --git a/frontend/src/app/components/status-view/status-view.component.ts b/frontend/src/app/components/status-view/status-view.component.ts index 46e2347c7..4a9a75fec 100644 --- a/frontend/src/app/components/status-view/status-view.component.ts +++ b/frontend/src/app/components/status-view/status-view.component.ts @@ -1,5 +1,5 @@ import { Component, OnInit } from '@angular/core'; -import { WebsocketService } from '../../services/websocket.service'; +import { WebsocketService } from '@app/services/websocket.service'; @Component({ selector: 'app-status-view', diff --git a/frontend/src/app/components/television/television.component.ts b/frontend/src/app/components/television/television.component.ts index 40f4b7192..0df69ce7b 100644 --- a/frontend/src/app/components/television/television.component.ts +++ b/frontend/src/app/components/television/television.component.ts @@ -1,9 +1,9 @@ import { Component, OnInit, OnDestroy } from '@angular/core'; -import { WebsocketService } from '../../services/websocket.service'; -import { OptimizedMempoolStats } from '../../interfaces/node-api.interface'; -import { StateService } from '../../services/state.service'; -import { ApiService } from '../../services/api.service'; -import { SeoService } from '../../services/seo.service'; +import { WebsocketService } from '@app/services/websocket.service'; +import { OptimizedMempoolStats } from '@app/interfaces/node-api.interface'; +import { StateService } from '@app/services/state.service'; +import { ApiService } from '@app/services/api.service'; +import { SeoService } from '@app/services/seo.service'; import { ActivatedRoute } from '@angular/router'; import { map, scan, startWith, switchMap, tap } from 'rxjs/operators'; import { interval, merge, Observable, Subscription } from 'rxjs'; diff --git a/frontend/src/app/components/terms-of-service/terms-of-service.component.ts b/frontend/src/app/components/terms-of-service/terms-of-service.component.ts index 71a86c759..5eb90c0d9 100644 --- a/frontend/src/app/components/terms-of-service/terms-of-service.component.ts +++ b/frontend/src/app/components/terms-of-service/terms-of-service.component.ts @@ -1,7 +1,7 @@ import { Component } from '@angular/core'; -import { Env, StateService } from '../../services/state.service'; -import { SeoService } from '../../services/seo.service'; -import { OpenGraphService } from '../../services/opengraph.service'; +import { Env, StateService } from '@app/services/state.service'; +import { SeoService } from '@app/services/seo.service'; +import { OpenGraphService } from '@app/services/opengraph.service'; @Component({ selector: 'app-terms-of-service', diff --git a/frontend/src/app/components/terms-of-service/terms-of-service.module.ts b/frontend/src/app/components/terms-of-service/terms-of-service.module.ts index 2ab139d8b..8a758b8de 100644 --- a/frontend/src/app/components/terms-of-service/terms-of-service.module.ts +++ b/frontend/src/app/components/terms-of-service/terms-of-service.module.ts @@ -1,8 +1,8 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { Routes, RouterModule } from '@angular/router'; -import { TermsOfServiceComponent } from './terms-of-service.component'; -import { SharedModule } from '../../shared/shared.module'; +import { TermsOfServiceComponent } from '@components/terms-of-service/terms-of-service.component'; +import { SharedModule } from '@app/shared/shared.module'; const routes: Routes = [ { diff --git a/frontend/src/app/components/test-transactions/test-transactions.component.ts b/frontend/src/app/components/test-transactions/test-transactions.component.ts index 615f635cd..2c6fde5cb 100644 --- a/frontend/src/app/components/test-transactions/test-transactions.component.ts +++ b/frontend/src/app/components/test-transactions/test-transactions.component.ts @@ -1,10 +1,10 @@ import { Component, OnInit } from '@angular/core'; import { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms'; -import { ApiService } from '../../services/api.service'; -import { StateService } from '../../services/state.service'; -import { SeoService } from '../../services/seo.service'; -import { OpenGraphService } from '../../services/opengraph.service'; -import { TestMempoolAcceptResult } from '../../interfaces/node-api.interface'; +import { ApiService } from '@app/services/api.service'; +import { StateService } from '@app/services/state.service'; +import { SeoService } from '@app/services/seo.service'; +import { OpenGraphService } from '@app/services/opengraph.service'; +import { TestMempoolAcceptResult } from '@app/interfaces/node-api.interface'; @Component({ selector: 'app-test-transactions', diff --git a/frontend/src/app/components/theme-selector/theme-selector.component.ts b/frontend/src/app/components/theme-selector/theme-selector.component.ts index be207910c..ca9c5788d 100644 --- a/frontend/src/app/components/theme-selector/theme-selector.component.ts +++ b/frontend/src/app/components/theme-selector/theme-selector.component.ts @@ -1,6 +1,6 @@ import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; -import { ThemeService } from '../../services/theme.service'; +import { ThemeService } from '@app/services/theme.service'; import { Subscription } from 'rxjs'; @Component({ diff --git a/frontend/src/app/components/time/time.component.ts b/frontend/src/app/components/time/time.component.ts index 6360bca4a..9ae893d74 100644 --- a/frontend/src/app/components/time/time.component.ts +++ b/frontend/src/app/components/time/time.component.ts @@ -1,6 +1,6 @@ import { Component, OnInit, OnDestroy, ChangeDetectionStrategy, Input, ChangeDetectorRef, OnChanges } from '@angular/core'; -import { StateService } from '../../services/state.service'; -import { TimeService } from '../../services/time.service'; +import { StateService } from '@app/services/state.service'; +import { TimeService } from '@app/services/time.service'; @Component({ selector: 'app-time', diff --git a/frontend/src/app/components/tracker/tracker.component.ts b/frontend/src/app/components/tracker/tracker.component.ts index 9c0c6f9bd..5bc390700 100644 --- a/frontend/src/app/components/tracker/tracker.component.ts +++ b/frontend/src/app/components/tracker/tracker.component.ts @@ -1,5 +1,5 @@ import { Component, OnInit, OnDestroy, HostListener, Inject, ChangeDetectorRef, ChangeDetectionStrategy, NgZone } from '@angular/core'; -import { ElectrsApiService } from '../../services/electrs-api.service'; +import { ElectrsApiService } from '@app/services/electrs-api.service'; import { ActivatedRoute, ParamMap, Router } from '@angular/router'; import { switchMap, @@ -12,26 +12,26 @@ import { map, startWith } from 'rxjs/operators'; -import { Transaction } from '../../interfaces/electrs.interface'; +import { Transaction } from '@app/interfaces/electrs.interface'; import { of, merge, Subscription, Observable, Subject, throwError, combineLatest, BehaviorSubject } from 'rxjs'; -import { StateService } from '../../services/state.service'; -import { CacheService } from '../../services/cache.service'; -import { WebsocketService } from '../../services/websocket.service'; -import { AudioService } from '../../services/audio.service'; -import { ApiService } from '../../services/api.service'; -import { SeoService } from '../../services/seo.service'; -import { seoDescriptionNetwork } from '../../shared/common.utils'; -import { Filter, TransactionFlags } from '../../shared/filters.utils'; -import { BlockExtended, CpfpInfo, RbfTree, MempoolPosition, DifficultyAdjustment, Acceleration, AccelerationPosition } from '../../interfaces/node-api.interface'; -import { PriceService } from '../../services/price.service'; -import { ServicesApiServices } from '../../services/services-api.service'; -import { EnterpriseService } from '../../services/enterprise.service'; -import { ZONE_SERVICE } from '../../injection-tokens'; -import { TrackerStage } from './tracker-bar.component'; -import { MiningService, MiningStats } from '../../services/mining.service'; -import { ETA, EtaService } from '../../services/eta.service'; -import { getTransactionFlags, getUnacceleratedFeeRate } from '../../shared/transaction.utils'; -import { RelativeUrlPipe } from '../../shared/pipes/relative-url/relative-url.pipe'; +import { StateService } from '@app/services/state.service'; +import { CacheService } from '@app/services/cache.service'; +import { WebsocketService } from '@app/services/websocket.service'; +import { AudioService } from '@app/services/audio.service'; +import { ApiService } from '@app/services/api.service'; +import { SeoService } from '@app/services/seo.service'; +import { seoDescriptionNetwork } from '@app/shared/common.utils'; +import { Filter, TransactionFlags } from '@app/shared/filters.utils'; +import { BlockExtended, CpfpInfo, RbfTree, MempoolPosition, DifficultyAdjustment, Acceleration, AccelerationPosition } from '@app/interfaces/node-api.interface'; +import { PriceService } from '@app/services/price.service'; +import { ServicesApiServices } from '@app/services/services-api.service'; +import { EnterpriseService } from '@app/services/enterprise.service'; +import { ZONE_SERVICE } from '@app/injection-tokens'; +import { TrackerStage } from '@components/tracker/tracker-bar.component'; +import { MiningService, MiningStats } from '@app/services/mining.service'; +import { ETA, EtaService } from '@app/services/eta.service'; +import { getTransactionFlags, getUnacceleratedFeeRate } from '@app/shared/transaction.utils'; +import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; interface Pool { diff --git a/frontend/src/app/components/tracker/tracker.module.ts b/frontend/src/app/components/tracker/tracker.module.ts index 799b8cd65..b41a68bc5 100644 --- a/frontend/src/app/components/tracker/tracker.module.ts +++ b/frontend/src/app/components/tracker/tracker.module.ts @@ -1,12 +1,12 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { Routes, RouterModule } from '@angular/router'; -import { SharedModule } from '../../shared/shared.module'; -import { TxBowtieModule } from '../tx-bowtie-graph/tx-bowtie.module'; -import { GraphsModule } from '../../graphs/graphs.module'; -import { TrackerComponent } from '../tracker/tracker.component'; -import { TrackerBarComponent } from '../tracker/tracker-bar.component'; -import { TransactionModule } from '../transaction/transaction.module'; +import { SharedModule } from '@app/shared/shared.module'; +import { TxBowtieModule } from '@components/tx-bowtie-graph/tx-bowtie.module'; +import { GraphsModule } from '@app/graphs/graphs.module'; +import { TrackerComponent } from '@components/tracker/tracker.component'; +import { TrackerBarComponent } from '@components/tracker/tracker-bar.component'; +import { TransactionModule } from '@components/transaction/transaction.module'; const routes: Routes = [ { diff --git a/frontend/src/app/components/trademark-policy/trademark-policy.component.ts b/frontend/src/app/components/trademark-policy/trademark-policy.component.ts index ad8b6b372..d27848c55 100644 --- a/frontend/src/app/components/trademark-policy/trademark-policy.component.ts +++ b/frontend/src/app/components/trademark-policy/trademark-policy.component.ts @@ -1,7 +1,7 @@ import { Component } from '@angular/core'; -import { Env, StateService } from '../../services/state.service'; -import { SeoService } from '../../services/seo.service'; -import { OpenGraphService } from '../../services/opengraph.service'; +import { Env, StateService } from '@app/services/state.service'; +import { SeoService } from '@app/services/seo.service'; +import { OpenGraphService } from '@app/services/opengraph.service'; @Component({ selector: 'app-trademark-policy', diff --git a/frontend/src/app/components/trademark-policy/trademark-policy.module.ts b/frontend/src/app/components/trademark-policy/trademark-policy.module.ts index 24f70be52..eaf57a5a2 100644 --- a/frontend/src/app/components/trademark-policy/trademark-policy.module.ts +++ b/frontend/src/app/components/trademark-policy/trademark-policy.module.ts @@ -1,8 +1,8 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { Routes, RouterModule } from '@angular/router'; -import { TrademarkPolicyComponent } from './trademark-policy.component'; -import { SharedModule } from '../../shared/shared.module'; +import { TrademarkPolicyComponent } from '@components/trademark-policy/trademark-policy.component'; +import { SharedModule } from '@app/shared/shared.module'; const routes: Routes = [ { diff --git a/frontend/src/app/components/transaction/liquid-ublinding.ts b/frontend/src/app/components/transaction/liquid-ublinding.ts index a53edeb4c..a22aa56bd 100644 --- a/frontend/src/app/components/transaction/liquid-ublinding.ts +++ b/frontend/src/app/components/transaction/liquid-ublinding.ts @@ -1,4 +1,4 @@ -import { Transaction } from '../../interfaces/electrs.interface'; +import { Transaction } from '@app/interfaces/electrs.interface'; // Parse the blinders data from a string encoded as a comma separated list, in the following format: // ,,, @@ -140,4 +140,4 @@ export class LiquidUnblinding { } return tx; } -} \ No newline at end of file +} diff --git a/frontend/src/app/components/transaction/transaction-preview.component.ts b/frontend/src/app/components/transaction/transaction-preview.component.ts index 313442dbf..3022d42d5 100644 --- a/frontend/src/app/components/transaction/transaction-preview.component.ts +++ b/frontend/src/app/components/transaction/transaction-preview.component.ts @@ -1,5 +1,5 @@ import { Component, OnInit, OnDestroy } from '@angular/core'; -import { ElectrsApiService } from '../../services/electrs-api.service'; +import { ElectrsApiService } from '@app/services/electrs-api.service'; import { ActivatedRoute, ParamMap } from '@angular/router'; import { switchMap, @@ -8,15 +8,15 @@ import { retryWhen, delay, } from 'rxjs/operators'; -import { Transaction, Vout } from '../../interfaces/electrs.interface'; +import { Transaction, Vout } from '@app/interfaces/electrs.interface'; import { of, merge, Subscription, Observable, Subject, from } from 'rxjs'; -import { StateService } from '../../services/state.service'; -import { CacheService } from '../../services/cache.service'; -import { OpenGraphService } from '../../services/opengraph.service'; -import { ApiService } from '../../services/api.service'; -import { SeoService } from '../../services/seo.service'; -import { seoDescriptionNetwork } from '../../shared/common.utils'; -import { CpfpInfo } from '../../interfaces/node-api.interface'; +import { StateService } from '@app/services/state.service'; +import { CacheService } from '@app/services/cache.service'; +import { OpenGraphService } from '@app/services/opengraph.service'; +import { ApiService } from '@app/services/api.service'; +import { SeoService } from '@app/services/seo.service'; +import { seoDescriptionNetwork } from '@app/shared/common.utils'; +import { CpfpInfo } from '@app/interfaces/node-api.interface'; import { LiquidUnblinding } from './liquid-ublinding'; @Component({ diff --git a/frontend/src/app/components/transaction/transaction.component.ts b/frontend/src/app/components/transaction/transaction.component.ts index 5fb9e5921..23c173b8c 100644 --- a/frontend/src/app/components/transaction/transaction.component.ts +++ b/frontend/src/app/components/transaction/transaction.component.ts @@ -1,5 +1,5 @@ import { Component, OnInit, AfterViewInit, OnDestroy, HostListener, ViewChild, ElementRef, Inject, ChangeDetectorRef } from '@angular/core'; -import { ElectrsApiService } from '../../services/electrs-api.service'; +import { ElectrsApiService } from '@app/services/electrs-api.service'; import { ActivatedRoute, ParamMap, Router } from '@angular/router'; import { switchMap, @@ -15,28 +15,28 @@ import { repeat, take } from 'rxjs/operators'; -import { Transaction } from '../../interfaces/electrs.interface'; +import { Transaction } from '@app/interfaces/electrs.interface'; import { of, merge, Subscription, Observable, Subject, from, throwError, combineLatest, BehaviorSubject } from 'rxjs'; -import { StateService } from '../../services/state.service'; -import { CacheService } from '../../services/cache.service'; -import { WebsocketService } from '../../services/websocket.service'; -import { AudioService } from '../../services/audio.service'; -import { ApiService } from '../../services/api.service'; -import { SeoService } from '../../services/seo.service'; -import { StorageService } from '../../services/storage.service'; -import { seoDescriptionNetwork } from '../../shared/common.utils'; -import { getTransactionFlags, getUnacceleratedFeeRate } from '../../shared/transaction.utils'; -import { Filter, TransactionFlags, toFilters } from '../../shared/filters.utils'; -import { BlockExtended, CpfpInfo, RbfTree, MempoolPosition, DifficultyAdjustment, Acceleration, AccelerationPosition } from '../../interfaces/node-api.interface'; -import { LiquidUnblinding } from './liquid-ublinding'; -import { RelativeUrlPipe } from '../../shared/pipes/relative-url/relative-url.pipe'; -import { PriceService } from '../../services/price.service'; -import { isFeatureActive } from '../../bitcoin.utils'; -import { ServicesApiServices } from '../../services/services-api.service'; -import { EnterpriseService } from '../../services/enterprise.service'; -import { ZONE_SERVICE } from '../../injection-tokens'; -import { MiningService, MiningStats } from '../../services/mining.service'; -import { ETA, EtaService } from '../../services/eta.service'; +import { StateService } from '@app/services/state.service'; +import { CacheService } from '@app/services/cache.service'; +import { WebsocketService } from '@app/services/websocket.service'; +import { AudioService } from '@app/services/audio.service'; +import { ApiService } from '@app/services/api.service'; +import { SeoService } from '@app/services/seo.service'; +import { StorageService } from '@app/services/storage.service'; +import { seoDescriptionNetwork } from '@app/shared/common.utils'; +import { getTransactionFlags, getUnacceleratedFeeRate } from '@app/shared/transaction.utils'; +import { Filter, TransactionFlags, toFilters } from '@app/shared/filters.utils'; +import { BlockExtended, CpfpInfo, RbfTree, MempoolPosition, DifficultyAdjustment, Acceleration, AccelerationPosition } from '@app/interfaces/node-api.interface'; +import { LiquidUnblinding } from '@components/transaction/liquid-ublinding'; +import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; +import { PriceService } from '@app/services/price.service'; +import { isFeatureActive } from '@app/bitcoin.utils'; +import { ServicesApiServices } from '@app/services/services-api.service'; +import { EnterpriseService } from '@app/services/enterprise.service'; +import { ZONE_SERVICE } from '@app/injection-tokens'; +import { MiningService, MiningStats } from '@app/services/mining.service'; +import { ETA, EtaService } from '@app/services/eta.service'; interface Pool { id: number; diff --git a/frontend/src/app/components/transaction/transaction.module.ts b/frontend/src/app/components/transaction/transaction.module.ts index b98c33e2a..5313b6a44 100644 --- a/frontend/src/app/components/transaction/transaction.module.ts +++ b/frontend/src/app/components/transaction/transaction.module.ts @@ -1,12 +1,12 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { Routes, RouterModule } from '@angular/router'; -import { TransactionComponent } from './transaction.component'; -import { SharedModule } from '../../shared/shared.module'; -import { TxBowtieModule } from '../tx-bowtie-graph/tx-bowtie.module'; -import { GraphsModule } from '../../graphs/graphs.module'; -import { AccelerateCheckout } from '../accelerate-checkout/accelerate-checkout.component'; -import { AccelerateFeeGraphComponent } from '../accelerate-checkout/accelerate-fee-graph.component'; +import { TransactionComponent } from '@components/transaction/transaction.component'; +import { SharedModule } from '@app/shared/shared.module'; +import { TxBowtieModule } from '@components/tx-bowtie-graph/tx-bowtie.module'; +import { GraphsModule } from '@app/graphs/graphs.module'; +import { AccelerateCheckout } from '@components/accelerate-checkout/accelerate-checkout.component'; +import { AccelerateFeeGraphComponent } from '@components/accelerate-checkout/accelerate-fee-graph.component'; const routes: Routes = [ { diff --git a/frontend/src/app/components/transactions-list/transactions-list.component.ts b/frontend/src/app/components/transactions-list/transactions-list.component.ts index 444fbffbd..d49cb3bd1 100644 --- a/frontend/src/app/components/transactions-list/transactions-list.component.ts +++ b/frontend/src/app/components/transactions-list/transactions-list.component.ts @@ -1,19 +1,19 @@ import { Component, OnInit, Input, ChangeDetectionStrategy, OnChanges, Output, EventEmitter, ChangeDetectorRef } from '@angular/core'; -import { StateService } from '../../services/state.service'; -import { CacheService } from '../../services/cache.service'; +import { StateService } from '@app/services/state.service'; +import { CacheService } from '@app/services/cache.service'; import { Observable, ReplaySubject, BehaviorSubject, merge, Subscription, of, forkJoin } from 'rxjs'; -import { Outspend, Transaction, Vin, Vout } from '../../interfaces/electrs.interface'; -import { ElectrsApiService } from '../../services/electrs-api.service'; -import { environment } from '../../../environments/environment'; -import { AssetsService } from '../../services/assets.service'; +import { Outspend, Transaction, Vin, Vout } from '@app/interfaces/electrs.interface'; +import { ElectrsApiService } from '@app/services/electrs-api.service'; +import { environment } from '@environments/environment'; +import { AssetsService } from '@app/services/assets.service'; import { filter, map, tap, switchMap, catchError } from 'rxjs/operators'; -import { BlockExtended } from '../../interfaces/node-api.interface'; -import { ApiService } from '../../services/api.service'; -import { PriceService } from '../../services/price.service'; -import { StorageService } from '../../services/storage.service'; -import { OrdApiService } from '../../services/ord-api.service'; -import { Inscription } from '../../shared/ord/inscription.utils'; -import { Etching, Runestone } from '../../shared/ord/rune.utils'; +import { BlockExtended } from '@app/interfaces/node-api.interface'; +import { ApiService } from '@app/services/api.service'; +import { PriceService } from '@app/services/price.service'; +import { StorageService } from '@app/services/storage.service'; +import { OrdApiService } from '@app/services/ord-api.service'; +import { Inscription } from '@app/shared/ord/inscription.utils'; +import { Etching, Runestone } from '@app/shared/ord/rune.utils'; @Component({ selector: 'app-transactions-list', diff --git a/frontend/src/app/components/twitter-widget/twitter-widget.component.ts b/frontend/src/app/components/twitter-widget/twitter-widget.component.ts index 2d4f66659..06b50b1dc 100644 --- a/frontend/src/app/components/twitter-widget/twitter-widget.component.ts +++ b/frontend/src/app/components/twitter-widget/twitter-widget.component.ts @@ -1,5 +1,5 @@ import { Component, Input, ChangeDetectionStrategy, SecurityContext, SimpleChanges, OnChanges } from '@angular/core'; -import { LanguageService } from '../../services/language.service'; +import { LanguageService } from '@app/services/language.service'; import { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser'; @Component({ @@ -68,4 +68,4 @@ export class TwitterWidgetComponent implements OnChanges { this.loading = false; this.error = true; } -} \ No newline at end of file +} diff --git a/frontend/src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.ts b/frontend/src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.ts index 9132cc653..6f4e69be6 100644 --- a/frontend/src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.ts +++ b/frontend/src/app/components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component.ts @@ -1,9 +1,9 @@ import { Component, ElementRef, ViewChild, Input, OnChanges, OnInit } from '@angular/core'; import { Subscription, of, switchMap, tap } from 'rxjs'; -import { Price, PriceService } from '../../services/price.service'; -import { StateService } from '../../services/state.service'; -import { ApiService } from '../../services/api.service'; -import { environment } from '../../../environments/environment'; +import { Price, PriceService } from '@app/services/price.service'; +import { StateService } from '@app/services/state.service'; +import { ApiService } from '@app/services/api.service'; +import { environment } from '@environments/environment'; interface Xput { type: 'input' | 'output' | 'fee'; diff --git a/frontend/src/app/components/tx-bowtie-graph/tx-bowtie-graph.component.ts b/frontend/src/app/components/tx-bowtie-graph/tx-bowtie-graph.component.ts index f371fdf0a..3641875ce 100644 --- a/frontend/src/app/components/tx-bowtie-graph/tx-bowtie-graph.component.ts +++ b/frontend/src/app/components/tx-bowtie-graph/tx-bowtie-graph.component.ts @@ -1,14 +1,14 @@ import { Component, OnInit, Input, OnChanges, HostListener, Inject, LOCALE_ID } from '@angular/core'; -import { StateService } from '../../services/state.service'; -import { Outspend, Transaction, Vin, Vout } from '../../interfaces/electrs.interface'; +import { StateService } from '@app/services/state.service'; +import { Outspend, Transaction, Vin, Vout } from '@app/interfaces/electrs.interface'; import { Router } from '@angular/router'; import { ReplaySubject, merge, Subscription, of } from 'rxjs'; import { tap, switchMap } from 'rxjs/operators'; -import { ApiService } from '../../services/api.service'; -import { RelativeUrlPipe } from '../../shared/pipes/relative-url/relative-url.pipe'; -import { AssetsService } from '../../services/assets.service'; -import { environment } from '../../../environments/environment'; -import { ElectrsApiService } from '../../services/electrs-api.service'; +import { ApiService } from '@app/services/api.service'; +import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; +import { AssetsService } from '@app/services/assets.service'; +import { environment } from '@environments/environment'; +import { ElectrsApiService } from '@app/services/electrs-api.service'; interface SvgLine { path: string; diff --git a/frontend/src/app/components/tx-bowtie-graph/tx-bowtie.module.ts b/frontend/src/app/components/tx-bowtie-graph/tx-bowtie.module.ts index 617425e7a..bfb8f9529 100644 --- a/frontend/src/app/components/tx-bowtie-graph/tx-bowtie.module.ts +++ b/frontend/src/app/components/tx-bowtie-graph/tx-bowtie.module.ts @@ -1,8 +1,8 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; -import { SharedModule } from '../../shared/shared.module'; -import { TxBowtieGraphComponent } from '../tx-bowtie-graph/tx-bowtie-graph.component'; -import { TxBowtieGraphTooltipComponent } from '../tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component'; +import { SharedModule } from '@app/shared/shared.module'; +import { TxBowtieGraphComponent } from '@components/tx-bowtie-graph/tx-bowtie-graph.component'; +import { TxBowtieGraphTooltipComponent } from '@components/tx-bowtie-graph-tooltip/tx-bowtie-graph-tooltip.component'; @NgModule({ diff --git a/frontend/src/app/components/tx-features/tx-features.component.ts b/frontend/src/app/components/tx-features/tx-features.component.ts index ffc2f291d..ec3e2a9bd 100644 --- a/frontend/src/app/components/tx-features/tx-features.component.ts +++ b/frontend/src/app/components/tx-features/tx-features.component.ts @@ -1,7 +1,7 @@ import { Component, ChangeDetectionStrategy, OnChanges, Input } from '@angular/core'; -import { calcSegwitFeeGains, isFeatureActive } from '../../bitcoin.utils'; -import { Transaction } from '../../interfaces/electrs.interface'; -import { StateService } from '../../services/state.service'; +import { calcSegwitFeeGains, isFeatureActive } from '@app/bitcoin.utils'; +import { Transaction } from '@app/interfaces/electrs.interface'; +import { StateService } from '@app/services/state.service'; @Component({ selector: 'app-tx-features', diff --git a/frontend/src/app/components/tx-fee-rating/tx-fee-rating.component.ts b/frontend/src/app/components/tx-fee-rating/tx-fee-rating.component.ts index cf867bcd7..0242e5e9d 100644 --- a/frontend/src/app/components/tx-fee-rating/tx-fee-rating.component.ts +++ b/frontend/src/app/components/tx-fee-rating/tx-fee-rating.component.ts @@ -1,9 +1,9 @@ import { Component, ChangeDetectionStrategy, OnChanges, Input, OnInit, ChangeDetectorRef, OnDestroy } from '@angular/core'; -import { Transaction } from '../../interfaces/electrs.interface'; -import { StateService } from '../../services/state.service'; +import { Transaction } from '@app/interfaces/electrs.interface'; +import { StateService } from '@app/services/state.service'; import { Subscription } from 'rxjs'; -import { BlockExtended } from '../../interfaces/node-api.interface'; -import { CacheService } from '../../services/cache.service'; +import { BlockExtended } from '@app/interfaces/node-api.interface'; +import { CacheService } from '@app/services/cache.service'; @Component({ selector: 'app-tx-fee-rating', diff --git a/frontend/src/app/components/utxo-graph/utxo-graph.component.ts b/frontend/src/app/components/utxo-graph/utxo-graph.component.ts index 3a549c1e7..fa4c55105 100644 --- a/frontend/src/app/components/utxo-graph/utxo-graph.component.ts +++ b/frontend/src/app/components/utxo-graph/utxo-graph.component.ts @@ -1,13 +1,13 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, NgZone, OnChanges, OnDestroy, SimpleChanges } from '@angular/core'; -import { EChartsOption } from '../../graphs/echarts'; +import { EChartsOption } from '@app/graphs/echarts'; import { Subscription } from 'rxjs'; -import { Utxo } from '../../interfaces/electrs.interface'; -import { StateService } from '../../services/state.service'; +import { Utxo } from '@app/interfaces/electrs.interface'; +import { StateService } from '@app/services/state.service'; import { Router } from '@angular/router'; -import { RelativeUrlPipe } from '../../shared/pipes/relative-url/relative-url.pipe'; -import { renderSats } from '../../shared/common.utils'; -import { colorToHex, hexToColor, mix } from '../block-overview-graph/utils'; -import { TimeService } from '../../services/time.service'; +import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; +import { renderSats } from '@app/shared/common.utils'; +import { colorToHex, hexToColor, mix } from '@components/block-overview-graph/utils'; +import { TimeService } from '@app/services/time.service'; const newColorHex = '1bd8f4'; const oldColorHex = '9339f4'; diff --git a/frontend/src/app/components/wallet/wallet.component.ts b/frontend/src/app/components/wallet/wallet.component.ts index 8ace95694..4c1ef1a9d 100644 --- a/frontend/src/app/components/wallet/wallet.component.ts +++ b/frontend/src/app/components/wallet/wallet.component.ts @@ -1,14 +1,14 @@ import { Component, OnInit, OnDestroy } from '@angular/core'; import { ActivatedRoute, ParamMap } from '@angular/router'; import { switchMap, catchError, map, tap, shareReplay, startWith, scan } from 'rxjs/operators'; -import { Address, AddressTxSummary, ChainStats, Transaction } from '../../interfaces/electrs.interface'; -import { WebsocketService } from '../../services/websocket.service'; -import { StateService } from '../../services/state.service'; -import { ApiService } from '../../services/api.service'; +import { Address, AddressTxSummary, ChainStats, Transaction } from '@app/interfaces/electrs.interface'; +import { WebsocketService } from '@app/services/websocket.service'; +import { StateService } from '@app/services/state.service'; +import { ApiService } from '@app/services/api.service'; import { of, Observable, Subscription } from 'rxjs'; -import { SeoService } from '../../services/seo.service'; -import { seoDescriptionNetwork } from '../../shared/common.utils'; -import { WalletAddress } from '../../interfaces/node-api.interface'; +import { SeoService } from '@app/services/seo.service'; +import { seoDescriptionNetwork } from '@app/shared/common.utils'; +import { WalletAddress } from '@app/interfaces/node-api.interface'; class WalletStats implements ChainStats { addresses: string[]; diff --git a/frontend/src/app/dashboard/dashboard.component.ts b/frontend/src/app/dashboard/dashboard.component.ts index 6bedaafb0..ae38a6858 100644 --- a/frontend/src/app/dashboard/dashboard.component.ts +++ b/frontend/src/app/dashboard/dashboard.component.ts @@ -1,14 +1,14 @@ import { AfterViewInit, ChangeDetectionStrategy, Component, HostListener, Inject, OnDestroy, OnInit, PLATFORM_ID } from '@angular/core'; import { combineLatest, EMPTY, fromEvent, interval, merge, Observable, of, Subject, Subscription, timer } from 'rxjs'; import { catchError, delayWhen, distinctUntilChanged, filter, map, scan, share, shareReplay, startWith, switchMap, takeUntil, tap, throttleTime } from 'rxjs/operators'; -import { AuditStatus, BlockExtended, CurrentPegs, FederationAddress, FederationUtxo, OptimizedMempoolStats, PegsVolume, RecentPeg, TransactionStripped } from '../interfaces/node-api.interface'; -import { MempoolInfo, ReplacementInfo } from '../interfaces/websocket.interface'; -import { ApiService } from '../services/api.service'; -import { StateService } from '../services/state.service'; -import { WebsocketService } from '../services/websocket.service'; -import { SeoService } from '../services/seo.service'; -import { ActiveFilter, FilterMode, GradientMode, toFlags } from '../shared/filters.utils'; -import { detectWebGL } from '../shared/graphs.utils'; +import { AuditStatus, BlockExtended, CurrentPegs, FederationAddress, FederationUtxo, OptimizedMempoolStats, PegsVolume, RecentPeg, TransactionStripped } from '@app/interfaces/node-api.interface'; +import { MempoolInfo, ReplacementInfo } from '@app/interfaces/websocket.interface'; +import { ApiService } from '@app/services/api.service'; +import { StateService } from '@app/services/state.service'; +import { WebsocketService } from '@app/services/websocket.service'; +import { SeoService } from '@app/services/seo.service'; +import { ActiveFilter, FilterMode, GradientMode, toFlags } from '@app/shared/filters.utils'; +import { detectWebGL } from '@app/shared/graphs.utils'; interface MempoolBlocksData { blocks: number; diff --git a/frontend/src/app/data-cy.directive.ts b/frontend/src/app/data-cy.directive.ts index 1e8e9aec7..7bee94346 100644 --- a/frontend/src/app/data-cy.directive.ts +++ b/frontend/src/app/data-cy.directive.ts @@ -1,5 +1,5 @@ import { Directive, ElementRef, Renderer2 } from '@angular/core'; -import { environment } from '../environments/environment'; +import { environment } from '@environments/environment'; @Directive({ selector: '[data-cy]' diff --git a/frontend/src/app/docs/api-docs/api-docs-nav.component.ts b/frontend/src/app/docs/api-docs/api-docs-nav.component.ts index 1abc506e5..de882b464 100644 --- a/frontend/src/app/docs/api-docs/api-docs-nav.component.ts +++ b/frontend/src/app/docs/api-docs/api-docs-nav.component.ts @@ -1,5 +1,5 @@ import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core'; -import { Env, StateService } from '../../services/state.service'; +import { Env, StateService } from '@app/services/state.service'; import { restApiDocsData } from './api-docs-data'; import { faqData } from './api-docs-data'; diff --git a/frontend/src/app/docs/api-docs/api-docs.component.ts b/frontend/src/app/docs/api-docs/api-docs.component.ts index efdc80d94..0298fc9f3 100644 --- a/frontend/src/app/docs/api-docs/api-docs.component.ts +++ b/frontend/src/app/docs/api-docs/api-docs.component.ts @@ -1,10 +1,10 @@ import { Component, OnInit, Input, QueryList, AfterViewInit, ViewChildren } from '@angular/core'; -import { Env, StateService } from '../../services/state.service'; +import { Env, StateService } from '@app/services/state.service'; import { Observable, merge, of, Subject, Subscription } from 'rxjs'; import { tap, takeUntil } from 'rxjs/operators'; import { ActivatedRoute } from "@angular/router"; -import { faqData, restApiDocsData, wsApiDocsData } from './api-docs-data'; -import { FaqTemplateDirective } from '../faq-template/faq-template.component'; +import { faqData, restApiDocsData, wsApiDocsData } from '@app/docs/api-docs/api-docs-data'; +import { FaqTemplateDirective } from '@app/docs/faq-template/faq-template.component'; @Component({ selector: 'app-api-docs', diff --git a/frontend/src/app/docs/code-template/code-template.component.ts b/frontend/src/app/docs/code-template/code-template.component.ts index b31def01c..f112e23f3 100644 --- a/frontend/src/app/docs/code-template/code-template.component.ts +++ b/frontend/src/app/docs/code-template/code-template.component.ts @@ -1,5 +1,5 @@ import { Component, Input, OnInit } from '@angular/core'; -import { Env, StateService } from '../../services/state.service'; +import { Env, StateService } from '@app/services/state.service'; @Component({ selector: 'app-code-template', diff --git a/frontend/src/app/docs/docs.module.ts b/frontend/src/app/docs/docs.module.ts index 70f22a9a6..7f94135aa 100644 --- a/frontend/src/app/docs/docs.module.ts +++ b/frontend/src/app/docs/docs.module.ts @@ -1,12 +1,12 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; -import { SharedModule } from '../shared/shared.module'; -import { ApiDocsComponent } from './/api-docs/api-docs.component'; -import { DocsComponent } from './docs/docs.component'; -import { ApiDocsNavComponent } from './api-docs/api-docs-nav.component'; -import { CodeTemplateComponent } from './code-template/code-template.component'; -import { DocsRoutingModule } from './docs.routing.module'; -import { FaqTemplateDirective } from './faq-template/faq-template.component'; +import { SharedModule } from '@app/shared/shared.module'; +import { ApiDocsComponent } from '@app/docs/api-docs/api-docs.component'; +import { DocsComponent } from '@app/docs/docs/docs.component'; +import { ApiDocsNavComponent } from '@app/docs/api-docs/api-docs-nav.component'; +import { CodeTemplateComponent } from '@app/docs/code-template/code-template.component'; +import { DocsRoutingModule } from '@app/docs/docs.routing.module'; +import { FaqTemplateDirective } from '@app/docs/faq-template/faq-template.component'; @NgModule({ declarations: [ ApiDocsComponent, diff --git a/frontend/src/app/docs/docs.routing.module.ts b/frontend/src/app/docs/docs.routing.module.ts index 3c0eb961d..7185a7181 100644 --- a/frontend/src/app/docs/docs.routing.module.ts +++ b/frontend/src/app/docs/docs.routing.module.ts @@ -1,6 +1,6 @@ import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; -import { DocsComponent } from './docs/docs.component'; +import { DocsComponent } from '@app/docs/docs/docs.component'; const browserWindow = window || {}; // @ts-ignore diff --git a/frontend/src/app/docs/docs/docs.component.ts b/frontend/src/app/docs/docs/docs.component.ts index 35080a19f..6d3ff4723 100644 --- a/frontend/src/app/docs/docs/docs.component.ts +++ b/frontend/src/app/docs/docs/docs.component.ts @@ -1,9 +1,9 @@ import { Component, OnInit, HostBinding } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; -import { Env, StateService } from '../../services/state.service'; -import { WebsocketService } from '../../services/websocket.service'; -import { SeoService } from '../../services/seo.service'; -import { OpenGraphService } from '../../services/opengraph.service'; +import { Env, StateService } from '@app/services/state.service'; +import { WebsocketService } from '@app/services/websocket.service'; +import { SeoService } from '@app/services/seo.service'; +import { OpenGraphService } from '@app/services/opengraph.service'; @Component({ selector: 'app-docs', diff --git a/frontend/src/app/fiat/fiat.component.ts b/frontend/src/app/fiat/fiat.component.ts index 93752039b..95f019723 100644 --- a/frontend/src/app/fiat/fiat.component.ts +++ b/frontend/src/app/fiat/fiat.component.ts @@ -1,7 +1,7 @@ import { Component, OnInit, ChangeDetectionStrategy, Input, ChangeDetectorRef, OnDestroy } from '@angular/core'; import { Observable, Subscription } from 'rxjs'; -import { Price } from '../services/price.service'; -import { StateService } from '../services/state.service'; +import { Price } from '@app/services/price.service'; +import { StateService } from '@app/services/state.service'; @Component({ selector: 'app-fiat', diff --git a/frontend/src/app/graphs/graphs.module.ts b/frontend/src/app/graphs/graphs.module.ts index 10f0b4d6c..fdf566aea 100644 --- a/frontend/src/app/graphs/graphs.module.ts +++ b/frontend/src/app/graphs/graphs.module.ts @@ -1,45 +1,45 @@ import { NgModule } from '@angular/core'; import { NgxEchartsModule } from 'ngx-echarts'; import { GraphsRoutingModule } from './graphs.routing.module'; -import { SharedModule } from '../shared/shared.module'; +import { SharedModule } from '@app/shared/shared.module'; -import { AccelerationFeesGraphComponent } from '../components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component'; -import { BlockFeesGraphComponent } from '../components/block-fees-graph/block-fees-graph.component'; -import { BlockFeesSubsidyGraphComponent } from '../components/block-fees-subsidy-graph/block-fees-subsidy-graph.component'; -import { BlockRewardsGraphComponent } from '../components/block-rewards-graph/block-rewards-graph.component'; -import { BlockFeeRatesGraphComponent } from '../components/block-fee-rates-graph/block-fee-rates-graph.component'; -import { BlockSizesWeightsGraphComponent } from '../components/block-sizes-weights-graph/block-sizes-weights-graph.component'; -import { FeeDistributionGraphComponent } from '../components/fee-distribution-graph/fee-distribution-graph.component'; -import { IncomingTransactionsGraphComponent } from '../components/incoming-transactions-graph/incoming-transactions-graph.component'; -import { MempoolGraphComponent } from '../components/mempool-graph/mempool-graph.component'; -import { LbtcPegsGraphComponent } from '../components/lbtc-pegs-graph/lbtc-pegs-graph.component'; -import { ReservesSupplyStatsComponent } from '../components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component'; -import { ExpiredUtxosStatsComponent } from '../components/liquid-reserves-audit/expired-utxos-stats/expired-utxos-stats.component'; -import { ReservesRatioStatsComponent } from '../components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component'; -import { ReservesRatioComponent } from '../components/liquid-reserves-audit/reserves-ratio/reserves-ratio.component'; -import { RecentPegsStatsComponent } from '../components/liquid-reserves-audit/recent-pegs-stats/recent-pegs-stats.component'; -import { RecentPegsListComponent } from '../components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component'; -import { FederationAddressesStatsComponent } from '../components/liquid-reserves-audit/federation-addresses-stats/federation-addresses-stats.component'; -import { FederationAddressesListComponent } from '../components/liquid-reserves-audit/federation-addresses-list/federation-addresses-list.component'; -import { GraphsComponent } from '../components/graphs/graphs.component'; -import { StatisticsComponent } from '../components/statistics/statistics.component'; -import { MempoolBlockComponent } from '../components/mempool-block/mempool-block.component'; -import { PoolRankingComponent } from '../components/pool-ranking/pool-ranking.component'; -import { PoolComponent } from '../components/pool/pool.component'; -import { TelevisionComponent } from '../components/television/television.component'; -import { DashboardComponent } from '../dashboard/dashboard.component'; -import { CustomDashboardComponent } from '../components/custom-dashboard/custom-dashboard.component'; -import { MiningDashboardComponent } from '../components/mining-dashboard/mining-dashboard.component'; -import { AcceleratorDashboardComponent } from '../components/acceleration/accelerator-dashboard/accelerator-dashboard.component'; -import { HashrateChartComponent } from '../components/hashrate-chart/hashrate-chart.component'; -import { HashrateChartPoolsComponent } from '../components/hashrates-chart-pools/hashrate-chart-pools.component'; -import { BlockHealthGraphComponent } from '../components/block-health-graph/block-health-graph.component'; -import { AddressComponent } from '../components/address/address.component'; -import { WalletComponent } from '../components/wallet/wallet.component'; -import { AddressGraphComponent } from '../components/address-graph/address-graph.component'; -import { UtxoGraphComponent } from '../components/utxo-graph/utxo-graph.component'; -import { ActiveAccelerationBox } from '../components/acceleration/active-acceleration-box/active-acceleration-box.component'; -import { AddressesTreemap } from '../components/addresses-treemap/addresses-treemap.component'; +import { AccelerationFeesGraphComponent } from '@components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component'; +import { BlockFeesGraphComponent } from '@components/block-fees-graph/block-fees-graph.component'; +import { BlockFeesSubsidyGraphComponent } from '@components/block-fees-subsidy-graph/block-fees-subsidy-graph.component'; +import { BlockRewardsGraphComponent } from '@components/block-rewards-graph/block-rewards-graph.component'; +import { BlockFeeRatesGraphComponent } from '@components/block-fee-rates-graph/block-fee-rates-graph.component'; +import { BlockSizesWeightsGraphComponent } from '@components/block-sizes-weights-graph/block-sizes-weights-graph.component'; +import { FeeDistributionGraphComponent } from '@components/fee-distribution-graph/fee-distribution-graph.component'; +import { IncomingTransactionsGraphComponent } from '@components/incoming-transactions-graph/incoming-transactions-graph.component'; +import { MempoolGraphComponent } from '@components/mempool-graph/mempool-graph.component'; +import { LbtcPegsGraphComponent } from '@components/lbtc-pegs-graph/lbtc-pegs-graph.component'; +import { ReservesSupplyStatsComponent } from '@components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component'; +import { ExpiredUtxosStatsComponent } from '@components/liquid-reserves-audit/expired-utxos-stats/expired-utxos-stats.component'; +import { ReservesRatioStatsComponent } from '@components/liquid-reserves-audit/reserves-ratio-stats/reserves-ratio-stats.component'; +import { ReservesRatioComponent } from '@components/liquid-reserves-audit/reserves-ratio/reserves-ratio.component'; +import { RecentPegsStatsComponent } from '@components/liquid-reserves-audit/recent-pegs-stats/recent-pegs-stats.component'; +import { RecentPegsListComponent } from '@components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component'; +import { FederationAddressesStatsComponent } from '@components/liquid-reserves-audit/federation-addresses-stats/federation-addresses-stats.component'; +import { FederationAddressesListComponent } from '@components/liquid-reserves-audit/federation-addresses-list/federation-addresses-list.component'; +import { GraphsComponent } from '@components/graphs/graphs.component'; +import { StatisticsComponent } from '@components/statistics/statistics.component'; +import { MempoolBlockComponent } from '@components/mempool-block/mempool-block.component'; +import { PoolRankingComponent } from '@components/pool-ranking/pool-ranking.component'; +import { PoolComponent } from '@components/pool/pool.component'; +import { TelevisionComponent } from '@components/television/television.component'; +import { DashboardComponent } from '@app/dashboard/dashboard.component'; +import { CustomDashboardComponent } from '@components/custom-dashboard/custom-dashboard.component'; +import { MiningDashboardComponent } from '@components/mining-dashboard/mining-dashboard.component'; +import { AcceleratorDashboardComponent } from '@components/acceleration/accelerator-dashboard/accelerator-dashboard.component'; +import { HashrateChartComponent } from '@components/hashrate-chart/hashrate-chart.component'; +import { HashrateChartPoolsComponent } from '@components/hashrates-chart-pools/hashrate-chart-pools.component'; +import { BlockHealthGraphComponent } from '@components/block-health-graph/block-health-graph.component'; +import { AddressComponent } from '@components/address/address.component'; +import { WalletComponent } from '@components/wallet/wallet.component'; +import { AddressGraphComponent } from '@components/address-graph/address-graph.component'; +import { UtxoGraphComponent } from '@components/utxo-graph/utxo-graph.component'; +import { ActiveAccelerationBox } from '@components/acceleration/active-acceleration-box/active-acceleration-box.component'; +import { AddressesTreemap } from '@components/addresses-treemap/addresses-treemap.component'; import { CommonModule } from '@angular/common'; @NgModule({ diff --git a/frontend/src/app/graphs/graphs.routing.module.ts b/frontend/src/app/graphs/graphs.routing.module.ts index b9940fc84..b6ba7a86a 100644 --- a/frontend/src/app/graphs/graphs.routing.module.ts +++ b/frontend/src/app/graphs/graphs.routing.module.ts @@ -1,28 +1,28 @@ import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; -import { BlockHealthGraphComponent } from '../components/block-health-graph/block-health-graph.component'; -import { BlockFeeRatesGraphComponent } from '../components/block-fee-rates-graph/block-fee-rates-graph.component'; -import { BlockFeesGraphComponent } from '../components/block-fees-graph/block-fees-graph.component'; -import { BlockFeesSubsidyGraphComponent } from '../components/block-fees-subsidy-graph/block-fees-subsidy-graph.component'; -import { BlockRewardsGraphComponent } from '../components/block-rewards-graph/block-rewards-graph.component'; -import { BlockSizesWeightsGraphComponent } from '../components/block-sizes-weights-graph/block-sizes-weights-graph.component'; -import { GraphsComponent } from '../components/graphs/graphs.component'; -import { HashrateChartComponent } from '../components/hashrate-chart/hashrate-chart.component'; -import { HashrateChartPoolsComponent } from '../components/hashrates-chart-pools/hashrate-chart-pools.component'; -import { MempoolBlockComponent } from '../components/mempool-block/mempool-block.component'; -import { MiningDashboardComponent } from '../components/mining-dashboard/mining-dashboard.component'; -import { AcceleratorDashboardComponent } from '../components/acceleration/accelerator-dashboard/accelerator-dashboard.component'; -import { PoolRankingComponent } from '../components/pool-ranking/pool-ranking.component'; -import { PoolComponent } from '../components/pool/pool.component'; -import { StartComponent } from '../components/start/start.component'; -import { StatisticsComponent } from '../components/statistics/statistics.component'; -import { TelevisionComponent } from '../components/television/television.component'; -import { DashboardComponent } from '../dashboard/dashboard.component'; -import { CustomDashboardComponent } from '../components/custom-dashboard/custom-dashboard.component'; -import { AccelerationFeesGraphComponent } from '../components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component'; -import { AccelerationsListComponent } from '../components/acceleration/accelerations-list/accelerations-list.component'; -import { AddressComponent } from '../components/address/address.component'; -import { WalletComponent } from '../components/wallet/wallet.component'; +import { BlockHealthGraphComponent } from '@components/block-health-graph/block-health-graph.component'; +import { BlockFeeRatesGraphComponent } from '@components/block-fee-rates-graph/block-fee-rates-graph.component'; +import { BlockFeesGraphComponent } from '@components/block-fees-graph/block-fees-graph.component'; +import { BlockFeesSubsidyGraphComponent } from '@components/block-fees-subsidy-graph/block-fees-subsidy-graph.component'; +import { BlockRewardsGraphComponent } from '@components/block-rewards-graph/block-rewards-graph.component'; +import { BlockSizesWeightsGraphComponent } from '@components/block-sizes-weights-graph/block-sizes-weights-graph.component'; +import { GraphsComponent } from '@components/graphs/graphs.component'; +import { HashrateChartComponent } from '@components/hashrate-chart/hashrate-chart.component'; +import { HashrateChartPoolsComponent } from '@components/hashrates-chart-pools/hashrate-chart-pools.component'; +import { MempoolBlockComponent } from '@components/mempool-block/mempool-block.component'; +import { MiningDashboardComponent } from '@components/mining-dashboard/mining-dashboard.component'; +import { AcceleratorDashboardComponent } from '@components/acceleration/accelerator-dashboard/accelerator-dashboard.component'; +import { PoolRankingComponent } from '@components/pool-ranking/pool-ranking.component'; +import { PoolComponent } from '@components/pool/pool.component'; +import { StartComponent } from '@components/start/start.component'; +import { StatisticsComponent } from '@components/statistics/statistics.component'; +import { TelevisionComponent } from '@components/television/television.component'; +import { DashboardComponent } from '@app/dashboard/dashboard.component'; +import { CustomDashboardComponent } from '@components/custom-dashboard/custom-dashboard.component'; +import { AccelerationFeesGraphComponent } from '@components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component'; +import { AccelerationsListComponent } from '@components/acceleration/accelerations-list/accelerations-list.component'; +import { AddressComponent } from '@components/address/address.component'; +import { WalletComponent } from '@components/wallet/wallet.component'; const browserWindow = window || {}; // @ts-ignore diff --git a/frontend/src/app/graphs/lightning-graphs.module.ts b/frontend/src/app/graphs/lightning-graphs.module.ts index ac123be33..869ce94af 100644 --- a/frontend/src/app/graphs/lightning-graphs.module.ts +++ b/frontend/src/app/graphs/lightning-graphs.module.ts @@ -1,13 +1,13 @@ import { NgModule } from '@angular/core'; -import { SharedModule } from '../shared/shared.module'; +import { SharedModule } from '@app/shared/shared.module'; import { CommonModule } from '@angular/common'; import { RouterModule, Routes } from '@angular/router'; -import { NodesNetworksChartComponent } from '../lightning/nodes-networks-chart/nodes-networks-chart.component'; -import { LightningStatisticsChartComponent } from '../lightning/statistics-chart/lightning-statistics-chart.component'; -import { NodesPerISPChartComponent } from '../lightning/nodes-per-isp-chart/nodes-per-isp-chart.component'; -import { NodesPerCountryChartComponent } from '../lightning/nodes-per-country-chart/nodes-per-country-chart.component'; -import { NodesMap } from '../lightning/nodes-map/nodes-map.component'; -import { NodesChannelsMap } from '../lightning/nodes-channels-map/nodes-channels-map.component'; +import { NodesNetworksChartComponent } from '@app/lightning/nodes-networks-chart/nodes-networks-chart.component'; +import { LightningStatisticsChartComponent } from '@app/lightning/statistics-chart/lightning-statistics-chart.component'; +import { NodesPerISPChartComponent } from '@app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component'; +import { NodesPerCountryChartComponent } from '@app/lightning/nodes-per-country-chart/nodes-per-country-chart.component'; +import { NodesMap } from '@app/lightning/nodes-map/nodes-map.component'; +import { NodesChannelsMap } from '@app/lightning/nodes-channels-map/nodes-channels-map.component'; const routes: Routes = [ { diff --git a/frontend/src/app/interfaces/electrs.interface.ts b/frontend/src/app/interfaces/electrs.interface.ts index 2b9a6a954..ac4bc1845 100644 --- a/frontend/src/app/interfaces/electrs.interface.ts +++ b/frontend/src/app/interfaces/electrs.interface.ts @@ -1,5 +1,5 @@ -import { Price } from '../services/price.service'; -import { IChannel } from './node-api.interface'; +import { Price } from '@app/services/price.service'; +import { IChannel } from '@app/interfaces/node-api.interface'; export interface Transaction { txid: string; @@ -244,4 +244,4 @@ export interface Utxo { vout: number; value: number; status: Status; -} \ No newline at end of file +} diff --git a/frontend/src/app/interfaces/websocket.interface.ts b/frontend/src/app/interfaces/websocket.interface.ts index 4d7d9dcbc..da75a4c0c 100644 --- a/frontend/src/app/interfaces/websocket.interface.ts +++ b/frontend/src/app/interfaces/websocket.interface.ts @@ -1,6 +1,6 @@ import { SafeResourceUrl } from '@angular/platform-browser'; -import { ILoadingIndicators } from '../services/state.service'; -import { Transaction } from './electrs.interface'; +import { ILoadingIndicators } from '@app/services/state.service'; +import { Transaction } from '@app/interfaces/electrs.interface'; import { Acceleration, BlockExtended, DifficultyAdjustment, RbfTree, TransactionStripped } from './node-api.interface'; export interface WebsocketResponse { @@ -144,4 +144,4 @@ export interface HealthCheckHost { link?: string; statusPage?: SafeResourceUrl; flag?: string; -} \ No newline at end of file +} diff --git a/frontend/src/app/lightning/channel/channel-box/channel-box.component.spec.ts b/frontend/src/app/lightning/channel/channel-box/channel-box.component.spec.ts index ae9463a6c..22dd36f75 100644 --- a/frontend/src/app/lightning/channel/channel-box/channel-box.component.spec.ts +++ b/frontend/src/app/lightning/channel/channel-box/channel-box.component.spec.ts @@ -1,6 +1,6 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { ChannelBoxComponent } from './channel-box.component'; +import { ChannelBoxComponent } from '@components/channel-box.component'; describe('ChannelBoxComponent', () => { let component: ChannelBoxComponent; diff --git a/frontend/src/app/lightning/channel/channel-close-box/channel-close-box.component.spec.ts b/frontend/src/app/lightning/channel/channel-close-box/channel-close-box.component.spec.ts index eea4ee99c..9a63d7f59 100644 --- a/frontend/src/app/lightning/channel/channel-close-box/channel-close-box.component.spec.ts +++ b/frontend/src/app/lightning/channel/channel-close-box/channel-close-box.component.spec.ts @@ -1,6 +1,6 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { ChannelCloseBoxComponent } from './channel-close-box.component'; +import { ChannelCloseBoxComponent } from '@components/channel-close-box.component'; describe('ChannelCloseBoxComponent', () => { let component: ChannelCloseBoxComponent; diff --git a/frontend/src/app/lightning/channel/channel-preview.component.ts b/frontend/src/app/lightning/channel/channel-preview.component.ts index 7e3152513..84a85f9c6 100644 --- a/frontend/src/app/lightning/channel/channel-preview.component.ts +++ b/frontend/src/app/lightning/channel/channel-preview.component.ts @@ -2,9 +2,9 @@ import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; import { ActivatedRoute, ParamMap } from '@angular/router'; import { Observable, of } from 'rxjs'; import { catchError, switchMap, tap } from 'rxjs/operators'; -import { SeoService } from '../../services/seo.service'; -import { OpenGraphService } from '../../services/opengraph.service'; -import { LightningApiService } from '../lightning-api.service'; +import { SeoService } from '@app/services/seo.service'; +import { OpenGraphService } from '@app/services/opengraph.service'; +import { LightningApiService } from '@app/lightning/lightning-api.service'; @Component({ selector: 'app-channel-preview', diff --git a/frontend/src/app/lightning/channel/channel.component.ts b/frontend/src/app/lightning/channel/channel.component.ts index a26101bdb..4970c298c 100644 --- a/frontend/src/app/lightning/channel/channel.component.ts +++ b/frontend/src/app/lightning/channel/channel.component.ts @@ -2,10 +2,10 @@ import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; import { ActivatedRoute, ParamMap } from '@angular/router'; import { Observable, of, zip } from 'rxjs'; import { catchError, map, shareReplay, switchMap, tap } from 'rxjs/operators'; -import { IChannel } from '../../interfaces/node-api.interface'; -import { ElectrsApiService } from '../../services/electrs-api.service'; -import { SeoService } from '../../services/seo.service'; -import { LightningApiService } from '../lightning-api.service'; +import { IChannel } from '@app/interfaces/node-api.interface'; +import { ElectrsApiService } from '@app/services/electrs-api.service'; +import { SeoService } from '@app/services/seo.service'; +import { LightningApiService } from '@app/lightning/lightning-api.service'; @Component({ selector: 'app-channel', diff --git a/frontend/src/app/lightning/channels-list/channels-list.component.ts b/frontend/src/app/lightning/channels-list/channels-list.component.ts index d083178c0..3439bb2b4 100644 --- a/frontend/src/app/lightning/channels-list/channels-list.component.ts +++ b/frontend/src/app/lightning/channels-list/channels-list.component.ts @@ -2,8 +2,8 @@ import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnChanges, OnI import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; import { BehaviorSubject, merge, Observable } from 'rxjs'; import { map, switchMap, tap } from 'rxjs/operators'; -import { isMobile } from '../../shared/common.utils'; -import { LightningApiService } from '../lightning-api.service'; +import { isMobile } from '@app/shared/common.utils'; +import { LightningApiService } from '@app/lightning/lightning-api.service'; @Component({ selector: 'app-channels-list', diff --git a/frontend/src/app/lightning/channels-statistics/channels-statistics.component.ts b/frontend/src/app/lightning/channels-statistics/channels-statistics.component.ts index f2b78f53c..cee0be28f 100644 --- a/frontend/src/app/lightning/channels-statistics/channels-statistics.component.ts +++ b/frontend/src/app/lightning/channels-statistics/channels-statistics.component.ts @@ -1,6 +1,6 @@ import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core'; import { Observable } from 'rxjs'; -import { INodesStatistics } from '../../interfaces/node-api.interface'; +import { INodesStatistics } from '@app/interfaces/node-api.interface'; @Component({ selector: 'app-channels-statistics', diff --git a/frontend/src/app/lightning/group/group-preview.component.ts b/frontend/src/app/lightning/group/group-preview.component.ts index 35bcb6e0f..4b8f5ed77 100644 --- a/frontend/src/app/lightning/group/group-preview.component.ts +++ b/frontend/src/app/lightning/group/group-preview.component.ts @@ -1,10 +1,10 @@ import { Component, OnInit } from '@angular/core'; import { ActivatedRoute, ParamMap } from '@angular/router'; import { map, switchMap, Observable, catchError, of } from 'rxjs'; -import { SeoService } from '../../services/seo.service'; -import { OpenGraphService } from '../../services/opengraph.service'; -import { GeolocationData } from '../../shared/components/geolocation/geolocation.component'; -import { LightningApiService } from '../lightning-api.service'; +import { SeoService } from '@app/services/seo.service'; +import { OpenGraphService } from '@app/services/opengraph.service'; +import { GeolocationData } from '@app/shared/components/geolocation/geolocation.component'; +import { LightningApiService } from '@app/lightning/lightning-api.service'; interface NodeGroup { name: string; diff --git a/frontend/src/app/lightning/group/group.component.ts b/frontend/src/app/lightning/group/group.component.ts index ea83653c2..76f9ef080 100644 --- a/frontend/src/app/lightning/group/group.component.ts +++ b/frontend/src/app/lightning/group/group.component.ts @@ -1,9 +1,9 @@ import { Component, OnInit } from '@angular/core'; import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; import { map, Observable, share } from 'rxjs'; -import { SeoService } from '../../services/seo.service'; -import { GeolocationData } from '../../shared/components/geolocation/geolocation.component'; -import { LightningApiService } from '../lightning-api.service'; +import { SeoService } from '@app/services/seo.service'; +import { GeolocationData } from '@app/shared/components/geolocation/geolocation.component'; +import { LightningApiService } from '@app/lightning/lightning-api.service'; @Component({ selector: 'app-group', diff --git a/frontend/src/app/lightning/justice-list/justice-list.component.ts b/frontend/src/app/lightning/justice-list/justice-list.component.ts index d48cdb7ea..9da2f18e1 100644 --- a/frontend/src/app/lightning/justice-list/justice-list.component.ts +++ b/frontend/src/app/lightning/justice-list/justice-list.component.ts @@ -1,9 +1,9 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core'; import { map, Observable, of, Subject, Subscription, switchMap, tap, zip } from 'rxjs'; -import { IChannel } from '../../interfaces/node-api.interface'; -import { LightningApiService } from '../lightning-api.service'; -import { Transaction } from '../../interfaces/electrs.interface'; -import { ElectrsApiService } from '../../services/electrs-api.service'; +import { IChannel } from '@app/interfaces/node-api.interface'; +import { LightningApiService } from '@app/lightning/lightning-api.service'; +import { Transaction } from '@app/interfaces/electrs.interface'; +import { ElectrsApiService } from '@app/services/electrs-api.service'; @Component({ selector: 'app-justice-list', diff --git a/frontend/src/app/lightning/lightning-api.service.ts b/frontend/src/app/lightning/lightning-api.service.ts index 74f048d68..8ef6f34b5 100644 --- a/frontend/src/app/lightning/lightning-api.service.ts +++ b/frontend/src/app/lightning/lightning-api.service.ts @@ -1,8 +1,8 @@ import { Injectable } from '@angular/core'; import { HttpClient, HttpParams } from '@angular/common/http'; import { BehaviorSubject, Observable, catchError, filter, of, shareReplay, take, tap } from 'rxjs'; -import { StateService } from '../services/state.service'; -import { IChannel, INodesRanking, IOldestNodes, ITopNodesPerCapacity, ITopNodesPerChannels } from '../interfaces/node-api.interface'; +import { StateService } from '@app/services/state.service'; +import { IChannel, INodesRanking, IOldestNodes, ITopNodesPerCapacity, ITopNodesPerChannels } from '@app/interfaces/node-api.interface'; @Injectable({ providedIn: 'root' diff --git a/frontend/src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts b/frontend/src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts index fd72cddfe..2fc8fa62f 100644 --- a/frontend/src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts +++ b/frontend/src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts @@ -1,11 +1,11 @@ import { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, HostListener, OnInit } from '@angular/core'; import { Observable, merge } from 'rxjs'; import { share } from 'rxjs/operators'; -import { INodesRanking, INodesStatistics } from '../../interfaces/node-api.interface'; -import { SeoService } from '../../services/seo.service'; -import { OpenGraphService } from '../../services/opengraph.service'; -import { StateService } from '../../services/state.service'; -import { LightningApiService } from '../lightning-api.service'; +import { INodesRanking, INodesStatistics } from '@app/interfaces/node-api.interface'; +import { SeoService } from '@app/services/seo.service'; +import { OpenGraphService } from '@app/services/opengraph.service'; +import { StateService } from '@app/services/state.service'; +import { LightningApiService } from '@app/lightning/lightning-api.service'; @Component({ selector: 'app-lightning-dashboard', diff --git a/frontend/src/app/lightning/lightning-previews.module.ts b/frontend/src/app/lightning/lightning-previews.module.ts index c41ba8d20..5efac798f 100644 --- a/frontend/src/app/lightning/lightning-previews.module.ts +++ b/frontend/src/app/lightning/lightning-previews.module.ts @@ -1,15 +1,15 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; -import { SharedModule } from '../shared/shared.module'; +import { SharedModule } from '@app/shared/shared.module'; import { RouterModule } from '@angular/router'; -import { GraphsModule } from '../graphs/graphs.module'; -import { LightningModule } from './lightning.module'; -import { LightningApiService } from './lightning-api.service'; -import { NodePreviewComponent } from './node/node-preview.component'; -import { LightningPreviewsRoutingModule } from './lightning-previews.routing.module'; -import { ChannelPreviewComponent } from './channel/channel-preview.component'; -import { NodesPerISPPreview } from './nodes-per-isp/nodes-per-isp-preview.component'; -import { GroupPreviewComponent } from './group/group-preview.component'; +import { GraphsModule } from '@app/graphs/graphs.module'; +import { LightningModule } from '@app/lightning/lightning.module'; +import { LightningApiService } from '@app/lightning/lightning-api.service'; +import { NodePreviewComponent } from '@app/lightning/node/node-preview.component'; +import { LightningPreviewsRoutingModule } from '@app/lightning/lightning-previews.routing.module'; +import { ChannelPreviewComponent } from '@app/lightning/channel/channel-preview.component'; +import { NodesPerISPPreview } from '@app/lightning/nodes-per-isp/nodes-per-isp-preview.component'; +import { GroupPreviewComponent } from '@app/lightning/group/group-preview.component'; @NgModule({ declarations: [ NodePreviewComponent, diff --git a/frontend/src/app/lightning/lightning-previews.routing.module.ts b/frontend/src/app/lightning/lightning-previews.routing.module.ts index 6cce90766..d899e559b 100644 --- a/frontend/src/app/lightning/lightning-previews.routing.module.ts +++ b/frontend/src/app/lightning/lightning-previews.routing.module.ts @@ -1,9 +1,9 @@ import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; -import { NodePreviewComponent } from './node/node-preview.component'; -import { ChannelPreviewComponent } from './channel/channel-preview.component'; -import { NodesPerISPPreview } from './nodes-per-isp/nodes-per-isp-preview.component'; -import { GroupPreviewComponent } from './group/group-preview.component'; +import { NodePreviewComponent } from '@app/lightning/node/node-preview.component'; +import { ChannelPreviewComponent } from '@app/lightning/channel/channel-preview.component'; +import { NodesPerISPPreview } from '@app/lightning/nodes-per-isp/nodes-per-isp-preview.component'; +import { GroupPreviewComponent } from '@app/lightning/group/group-preview.component'; const routes: Routes = [ { diff --git a/frontend/src/app/lightning/lightning-wrapper/lightning-wrapper.component.ts b/frontend/src/app/lightning/lightning-wrapper/lightning-wrapper.component.ts index 11bf4dc5d..3e83f0785 100644 --- a/frontend/src/app/lightning/lightning-wrapper/lightning-wrapper.component.ts +++ b/frontend/src/app/lightning/lightning-wrapper/lightning-wrapper.component.ts @@ -1,5 +1,5 @@ import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; -import { WebsocketService } from '../../services/websocket.service'; +import { WebsocketService } from '@app/services/websocket.service'; @Component({ selector: 'app-lightning-wrapper', diff --git a/frontend/src/app/lightning/lightning.module.ts b/frontend/src/app/lightning/lightning.module.ts index 0b824ad78..405900e19 100644 --- a/frontend/src/app/lightning/lightning.module.ts +++ b/frontend/src/app/lightning/lightning.module.ts @@ -1,39 +1,39 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; -import { SharedModule } from '../shared/shared.module'; -import { LightningDashboardComponent } from './lightning-dashboard/lightning-dashboard.component'; -import { LightningApiService } from './lightning-api.service'; -import { NodesListComponent } from './nodes-list/nodes-list.component'; +import { SharedModule } from '@app/shared/shared.module'; +import { LightningDashboardComponent } from '@app/lightning/lightning-dashboard/lightning-dashboard.component'; +import { LightningApiService } from '@app/lightning/lightning-api.service'; +import { NodesListComponent } from '@app/lightning/nodes-list/nodes-list.component'; import { RouterModule } from '@angular/router'; -import { NodeStatisticsComponent } from './node-statistics/node-statistics.component'; -import { NodeComponent } from './node/node.component'; -import { LightningRoutingModule } from './lightning.routing.module'; -import { ChannelsListComponent } from './channels-list/channels-list.component'; -import { ChannelComponent } from './channel/channel.component'; -import { LightningWrapperComponent } from './lightning-wrapper/lightning-wrapper.component'; -import { ChannelBoxComponent } from './channel/channel-box/channel-box.component'; -import { ChannelCloseBoxComponent } from './channel/channel-close-box/channel-close-box.component'; -import { ClosingTypeComponent } from './channel/closing-type/closing-type.component'; -import { LightningStatisticsChartComponent } from './statistics-chart/lightning-statistics-chart.component'; -import { NodeStatisticsChartComponent } from './node-statistics-chart/node-statistics-chart.component'; -import { NodeFeeChartComponent } from './node-fee-chart/node-fee-chart.component'; -import { GraphsModule } from '../graphs/graphs.module'; -import { NodesNetworksChartComponent } from './nodes-networks-chart/nodes-networks-chart.component'; -import { ChannelsStatisticsComponent } from './channels-statistics/channels-statistics.component'; -import { NodesPerISPChartComponent } from './nodes-per-isp-chart/nodes-per-isp-chart.component'; -import { NodesPerCountry } from './nodes-per-country/nodes-per-country.component'; -import { NodesPerISP } from './nodes-per-isp/nodes-per-isp.component'; -import { NodesPerCountryChartComponent } from '../lightning/nodes-per-country-chart/nodes-per-country-chart.component'; -import { NodesMap } from '../lightning/nodes-map/nodes-map.component'; -import { NodesChannelsMap } from '../lightning/nodes-channels-map/nodes-channels-map.component'; -import { NodesRanking } from '../lightning/nodes-ranking/nodes-ranking.component'; -import { TopNodesPerChannels } from '../lightning/nodes-ranking/top-nodes-per-channels/top-nodes-per-channels.component'; -import { TopNodesPerCapacity } from '../lightning/nodes-ranking/top-nodes-per-capacity/top-nodes-per-capacity.component'; -import { JusticeList } from '../lightning/justice-list/justice-list.component'; -import { OldestNodes } from '../lightning/nodes-ranking/oldest-nodes/oldest-nodes.component'; -import { NodesRankingsDashboard } from '../lightning/nodes-rankings-dashboard/nodes-rankings-dashboard.component'; -import { NodeChannels } from '../lightning/nodes-channels/node-channels.component'; -import { GroupComponent } from './group/group.component'; +import { NodeStatisticsComponent } from '@app/lightning/node-statistics/node-statistics.component'; +import { NodeComponent } from '@app/lightning/node/node.component'; +import { LightningRoutingModule } from '@app/lightning/lightning.routing.module'; +import { ChannelsListComponent } from '@app/lightning/channels-list/channels-list.component'; +import { ChannelComponent } from '@app/lightning/channel/channel.component'; +import { LightningWrapperComponent } from '@app/lightning/lightning-wrapper/lightning-wrapper.component'; +import { ChannelBoxComponent } from '@app/lightning/channel/channel-box/channel-box.component'; +import { ChannelCloseBoxComponent } from '@app/lightning/channel/channel-close-box/channel-close-box.component'; +import { ClosingTypeComponent } from '@app/lightning/channel/closing-type/closing-type.component'; +import { LightningStatisticsChartComponent } from '@app/lightning/statistics-chart/lightning-statistics-chart.component'; +import { NodeStatisticsChartComponent } from '@app/lightning/node-statistics-chart/node-statistics-chart.component'; +import { NodeFeeChartComponent } from '@app/lightning/node-fee-chart/node-fee-chart.component'; +import { GraphsModule } from '@app/graphs/graphs.module'; +import { NodesNetworksChartComponent } from '@app/lightning/nodes-networks-chart/nodes-networks-chart.component'; +import { ChannelsStatisticsComponent } from '@app/lightning/channels-statistics/channels-statistics.component'; +import { NodesPerISPChartComponent } from '@app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component'; +import { NodesPerCountry } from '@app/lightning/nodes-per-country/nodes-per-country.component'; +import { NodesPerISP } from '@app/lightning/nodes-per-isp/nodes-per-isp.component'; +import { NodesPerCountryChartComponent } from '@app/lightning/nodes-per-country-chart/nodes-per-country-chart.component'; +import { NodesMap } from '@app/lightning/nodes-map/nodes-map.component'; +import { NodesChannelsMap } from '@app/lightning/nodes-channels-map/nodes-channels-map.component'; +import { NodesRanking } from '@app/lightning/nodes-ranking/nodes-ranking.component'; +import { TopNodesPerChannels } from '@app/lightning/nodes-ranking/top-nodes-per-channels/top-nodes-per-channels.component'; +import { TopNodesPerCapacity } from '@app/lightning/nodes-ranking/top-nodes-per-capacity/top-nodes-per-capacity.component'; +import { JusticeList } from '@app/lightning/justice-list/justice-list.component'; +import { OldestNodes } from '@app/lightning/nodes-ranking/oldest-nodes/oldest-nodes.component'; +import { NodesRankingsDashboard } from '@app/lightning/nodes-rankings-dashboard/nodes-rankings-dashboard.component'; +import { NodeChannels } from '@app/lightning/nodes-channels/node-channels.component'; +import { GroupComponent } from '@app/lightning/group/group.component'; @NgModule({ declarations: [ diff --git a/frontend/src/app/lightning/lightning.routing.module.ts b/frontend/src/app/lightning/lightning.routing.module.ts index 8b8041181..c7f167308 100644 --- a/frontend/src/app/lightning/lightning.routing.module.ts +++ b/frontend/src/app/lightning/lightning.routing.module.ts @@ -1,15 +1,15 @@ import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; -import { LightningDashboardComponent } from './lightning-dashboard/lightning-dashboard.component'; -import { LightningWrapperComponent } from './lightning-wrapper/lightning-wrapper.component'; -import { NodeComponent } from './node/node.component'; -import { ChannelComponent } from './channel/channel.component'; -import { NodesPerCountry } from './nodes-per-country/nodes-per-country.component'; -import { NodesPerISP } from './nodes-per-isp/nodes-per-isp.component'; -import { NodesRanking } from './nodes-ranking/nodes-ranking.component'; -import { NodesRankingsDashboard } from './nodes-rankings-dashboard/nodes-rankings-dashboard.component'; -import { GroupComponent } from './group/group.component'; -import { JusticeList } from './justice-list/justice-list.component'; +import { LightningDashboardComponent } from '@app/lightning/lightning-dashboard/lightning-dashboard.component'; +import { LightningWrapperComponent } from '@app/lightning/lightning-wrapper/lightning-wrapper.component'; +import { NodeComponent } from '@app/lightning/node/node.component'; +import { ChannelComponent } from '@app/lightning/channel/channel.component'; +import { NodesPerCountry } from '@app/lightning/nodes-per-country/nodes-per-country.component'; +import { NodesPerISP } from '@app/lightning/nodes-per-isp/nodes-per-isp.component'; +import { NodesRanking } from '@app/lightning/nodes-ranking/nodes-ranking.component'; +import { NodesRankingsDashboard } from '@app/lightning/nodes-rankings-dashboard/nodes-rankings-dashboard.component'; +import { GroupComponent } from '@app/lightning/group/group.component'; +import { JusticeList } from '@app/lightning/justice-list/justice-list.component'; const routes: Routes = [ { diff --git a/frontend/src/app/lightning/node-fee-chart/node-fee-chart.component.ts b/frontend/src/app/lightning/node-fee-chart/node-fee-chart.component.ts index aa0837fce..65a12cf38 100644 --- a/frontend/src/app/lightning/node-fee-chart/node-fee-chart.component.ts +++ b/frontend/src/app/lightning/node-fee-chart/node-fee-chart.component.ts @@ -1,11 +1,11 @@ import { Component, Inject, Input, LOCALE_ID, OnInit, HostBinding } from '@angular/core'; -import { EChartsOption } from '../../graphs/echarts'; +import { EChartsOption } from '@app/graphs/echarts'; import { switchMap } from 'rxjs/operators'; -import { download } from '../../shared/graphs.utils'; -import { LightningApiService } from '../lightning-api.service'; +import { download } from '@app/shared/graphs.utils'; +import { LightningApiService } from '@app/lightning/lightning-api.service'; import { ActivatedRoute, ParamMap } from '@angular/router'; -import { AmountShortenerPipe } from '../../shared/pipes/amount-shortener.pipe'; -import { StateService } from '../../services/state.service'; +import { AmountShortenerPipe } from '@app/shared/pipes/amount-shortener.pipe'; +import { StateService } from '@app/services/state.service'; @Component({ selector: 'app-node-fee-chart', diff --git a/frontend/src/app/lightning/node-statistics-chart/node-statistics-chart.component.ts b/frontend/src/app/lightning/node-statistics-chart/node-statistics-chart.component.ts index 91813400d..de9711d01 100644 --- a/frontend/src/app/lightning/node-statistics-chart/node-statistics-chart.component.ts +++ b/frontend/src/app/lightning/node-statistics-chart/node-statistics-chart.component.ts @@ -1,14 +1,14 @@ import { Component, Inject, Input, LOCALE_ID, OnInit, HostBinding } from '@angular/core'; -import { EChartsOption } from '../../graphs/echarts'; +import { EChartsOption } from '@app/graphs/echarts'; import { Observable } from 'rxjs'; import { switchMap, tap } from 'rxjs/operators'; import { formatNumber } from '@angular/common'; import { UntypedFormGroup } from '@angular/forms'; -import { StorageService } from '../../services/storage.service'; -import { download } from '../../shared/graphs.utils'; -import { LightningApiService } from '../lightning-api.service'; +import { StorageService } from '@app/services/storage.service'; +import { download } from '@app/shared/graphs.utils'; +import { LightningApiService } from '@app/lightning/lightning-api.service'; import { ActivatedRoute, ParamMap } from '@angular/router'; -import { StateService } from '../../services/state.service'; +import { StateService } from '@app/services/state.service'; @Component({ selector: 'app-node-statistics-chart', diff --git a/frontend/src/app/lightning/node-statistics/node-statistics.component.ts b/frontend/src/app/lightning/node-statistics/node-statistics.component.ts index 338e17ab8..07cb8593d 100644 --- a/frontend/src/app/lightning/node-statistics/node-statistics.component.ts +++ b/frontend/src/app/lightning/node-statistics/node-statistics.component.ts @@ -1,6 +1,6 @@ import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core'; import { Observable } from 'rxjs'; -import { INodesStatistics } from '../../interfaces/node-api.interface'; +import { INodesStatistics } from '@app/interfaces/node-api.interface'; @Component({ selector: 'app-node-statistics', diff --git a/frontend/src/app/lightning/node/node-preview.component.ts b/frontend/src/app/lightning/node/node-preview.component.ts index d47a8c5ad..259313de6 100644 --- a/frontend/src/app/lightning/node/node-preview.component.ts +++ b/frontend/src/app/lightning/node/node-preview.component.ts @@ -2,11 +2,11 @@ import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; import { ActivatedRoute, ParamMap } from '@angular/router'; import { Observable } from 'rxjs'; import { catchError, map, switchMap } from 'rxjs/operators'; -import { SeoService } from '../../services/seo.service'; -import { OpenGraphService } from '../../services/opengraph.service'; -import { getFlagEmoji } from '../../shared/common.utils'; -import { LightningApiService } from '../lightning-api.service'; -import { isMobile } from '../../shared/common.utils'; +import { SeoService } from '@app/services/seo.service'; +import { OpenGraphService } from '@app/services/opengraph.service'; +import { getFlagEmoji } from '@app/shared/common.utils'; +import { LightningApiService } from '@app/lightning/lightning-api.service'; +import { isMobile } from '@app/shared/common.utils'; @Component({ selector: 'app-node-preview', diff --git a/frontend/src/app/lightning/node/node.component.ts b/frontend/src/app/lightning/node/node.component.ts index cc7c8e5b1..4ad455dee 100644 --- a/frontend/src/app/lightning/node/node.component.ts +++ b/frontend/src/app/lightning/node/node.component.ts @@ -2,13 +2,13 @@ import { ChangeDetectionStrategy, Component, OnInit, ChangeDetectorRef } from '@ import { ActivatedRoute, ParamMap } from '@angular/router'; import { Observable, of } from 'rxjs'; import { catchError, map, switchMap, tap, share } from 'rxjs/operators'; -import { SeoService } from '../../services/seo.service'; -import { ApiService } from '../../services/api.service'; -import { LightningApiService } from '../lightning-api.service'; -import { GeolocationData } from '../../shared/components/geolocation/geolocation.component'; -import { ILiquidityAd, parseLiquidityAdHex } from './liquidity-ad'; -import { haversineDistance, kmToMiles } from '../../../app/shared/common.utils'; -import { ServicesApiServices } from '../../services/services-api.service'; +import { SeoService } from '@app/services/seo.service'; +import { ApiService } from '@app/services/api.service'; +import { LightningApiService } from '@app/lightning/lightning-api.service'; +import { GeolocationData } from '@app/shared/components/geolocation/geolocation.component'; +import { ILiquidityAd, parseLiquidityAdHex } from '@app/lightning/node/liquidity-ad'; +import { haversineDistance, kmToMiles } from '@app/shared/common.utils'; +import { ServicesApiServices } from '@app/services/services-api.service'; interface CustomRecord { type: string; diff --git a/frontend/src/app/lightning/nodes-channels-map/nodes-channels-map.component.ts b/frontend/src/app/lightning/nodes-channels-map/nodes-channels-map.component.ts index 3447348be..a1efdc144 100644 --- a/frontend/src/app/lightning/nodes-channels-map/nodes-channels-map.component.ts +++ b/frontend/src/app/lightning/nodes-channels-map/nodes-channels-map.component.ts @@ -1,16 +1,16 @@ import { ChangeDetectionStrategy, Component, Input, Output, EventEmitter, NgZone, OnInit } from '@angular/core'; -import { SeoService } from '../../services/seo.service'; -import { ApiService } from '../../services/api.service'; +import { SeoService } from '@app/services/seo.service'; +import { ApiService } from '@app/services/api.service'; import { delay, Observable, of, switchMap, tap, zip } from 'rxjs'; -import { AssetsService } from '../../services/assets.service'; +import { AssetsService } from '@app/services/assets.service'; import { ActivatedRoute, ParamMap, Router } from '@angular/router'; -import { RelativeUrlPipe } from '../../shared/pipes/relative-url/relative-url.pipe'; -import { StateService } from '../../services/state.service'; -import { EChartsOption, echarts } from '../../graphs/echarts'; -import { isMobile } from '../../shared/common.utils'; -import { AmountShortenerPipe } from '../../shared/pipes/amount-shortener.pipe'; -import { getFlagEmoji } from '../../shared/common.utils'; -import { lerpColor } from '../../shared/graphs.utils'; +import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; +import { StateService } from '@app/services/state.service'; +import { EChartsOption, echarts } from '@app/graphs/echarts'; +import { isMobile } from '@app/shared/common.utils'; +import { AmountShortenerPipe } from '@app/shared/pipes/amount-shortener.pipe'; +import { getFlagEmoji } from '@app/shared/common.utils'; +import { lerpColor } from '@app/shared/graphs.utils'; @Component({ selector: 'app-nodes-channels-map', diff --git a/frontend/src/app/lightning/nodes-channels/node-channels.component.ts b/frontend/src/app/lightning/nodes-channels/node-channels.component.ts index fce014e77..96f74bfed 100644 --- a/frontend/src/app/lightning/nodes-channels/node-channels.component.ts +++ b/frontend/src/app/lightning/nodes-channels/node-channels.component.ts @@ -1,13 +1,13 @@ import { formatNumber } from '@angular/common'; import { ChangeDetectionStrategy, Component, Inject, Input, LOCALE_ID, NgZone, OnChanges } from '@angular/core'; import { Router } from '@angular/router'; -import { EChartsOption, TreemapSeriesOption } from '../../graphs/echarts'; +import { EChartsOption, TreemapSeriesOption } from '@app/graphs/echarts'; import { Observable, share, switchMap, tap } from 'rxjs'; -import { lerpColor } from '../../shared/graphs.utils'; -import { AmountShortenerPipe } from '../../shared/pipes/amount-shortener.pipe'; -import { LightningApiService } from '../lightning-api.service'; -import { RelativeUrlPipe } from '../../shared/pipes/relative-url/relative-url.pipe'; -import { StateService } from '../../services/state.service'; +import { lerpColor } from '@app/shared/graphs.utils'; +import { AmountShortenerPipe } from '@app/shared/pipes/amount-shortener.pipe'; +import { LightningApiService } from '@app/lightning/lightning-api.service'; +import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; +import { StateService } from '@app/services/state.service'; @Component({ selector: 'app-node-channels', @@ -144,4 +144,4 @@ export class NodeChannels implements OnChanges { }); }); } -} \ No newline at end of file +} diff --git a/frontend/src/app/lightning/nodes-map/nodes-map.component.ts b/frontend/src/app/lightning/nodes-map/nodes-map.component.ts index 50df2f986..c4d56676c 100644 --- a/frontend/src/app/lightning/nodes-map/nodes-map.component.ts +++ b/frontend/src/app/lightning/nodes-map/nodes-map.component.ts @@ -1,15 +1,15 @@ import { ChangeDetectionStrategy, Component, Inject, Input, Output, EventEmitter, LOCALE_ID, NgZone, OnDestroy, OnInit, OnChanges } from '@angular/core'; -import { SeoService } from '../../services/seo.service'; -import { ApiService } from '../../services/api.service'; +import { SeoService } from '@app/services/seo.service'; +import { ApiService } from '@app/services/api.service'; import { Observable, BehaviorSubject, switchMap, tap, combineLatest } from 'rxjs'; -import { AssetsService } from '../../services/assets.service'; -import { EChartsOption, echarts } from '../../graphs/echarts'; -import { lerpColor } from '../../shared/graphs.utils'; +import { AssetsService } from '@app/services/assets.service'; +import { EChartsOption, echarts } from '@app/graphs/echarts'; +import { lerpColor } from '@app/shared/graphs.utils'; import { Router } from '@angular/router'; -import { RelativeUrlPipe } from '../../shared/pipes/relative-url/relative-url.pipe'; -import { StateService } from '../../services/state.service'; -import { AmountShortenerPipe } from '../../shared/pipes/amount-shortener.pipe'; -import { getFlagEmoji } from '../../shared/common.utils'; +import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; +import { StateService } from '@app/services/state.service'; +import { AmountShortenerPipe } from '@app/shared/pipes/amount-shortener.pipe'; +import { getFlagEmoji } from '@app/shared/common.utils'; @Component({ selector: 'app-nodes-map', diff --git a/frontend/src/app/lightning/nodes-networks-chart/nodes-networks-chart.component.ts b/frontend/src/app/lightning/nodes-networks-chart/nodes-networks-chart.component.ts index d947bb327..a5d0d076a 100644 --- a/frontend/src/app/lightning/nodes-networks-chart/nodes-networks-chart.component.ts +++ b/frontend/src/app/lightning/nodes-networks-chart/nodes-networks-chart.component.ts @@ -1,17 +1,17 @@ import { ChangeDetectionStrategy, Component, Inject, Input, LOCALE_ID, OnInit, HostBinding, OnChanges, SimpleChanges } from '@angular/core'; -import { echarts, EChartsOption, LineSeriesOption } from '../../graphs/echarts'; +import { echarts, EChartsOption, LineSeriesOption } from '@app/graphs/echarts'; import { Observable } from 'rxjs'; import { map, share, startWith, switchMap, tap } from 'rxjs/operators'; import { formatNumber } from '@angular/common'; import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; -import { StorageService } from '../../services/storage.service'; -import { MiningService } from '../../services/mining.service'; -import { download } from '../../shared/graphs.utils'; -import { SeoService } from '../../services/seo.service'; -import { LightningApiService } from '../lightning-api.service'; -import { AmountShortenerPipe } from '../../shared/pipes/amount-shortener.pipe'; -import { isMobile } from '../../shared/common.utils'; -import { StateService } from '../../services/state.service'; +import { StorageService } from '@app/services/storage.service'; +import { MiningService } from '@app/services/mining.service'; +import { download } from '@app/shared/graphs.utils'; +import { SeoService } from '@app/services/seo.service'; +import { LightningApiService } from '@app/lightning/lightning-api.service'; +import { AmountShortenerPipe } from '@app/shared/pipes/amount-shortener.pipe'; +import { isMobile } from '@app/shared/common.utils'; +import { StateService } from '@app/services/state.service'; @Component({ selector: 'app-nodes-networks-chart', diff --git a/frontend/src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.ts b/frontend/src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.ts index 7eba4f9b7..986484d8a 100644 --- a/frontend/src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.ts +++ b/frontend/src/app/lightning/nodes-per-country-chart/nodes-per-country-chart.component.ts @@ -1,15 +1,15 @@ import { ChangeDetectionStrategy, Component, OnInit, HostBinding, NgZone } from '@angular/core'; import { Router } from '@angular/router'; -import { EChartsOption, PieSeriesOption } from '../../graphs/echarts'; +import { EChartsOption, PieSeriesOption } from '@app/graphs/echarts'; import { map, Observable, share, tap } from 'rxjs'; -import { chartColors } from '../../app.constants'; -import { ApiService } from '../../services/api.service'; -import { SeoService } from '../../services/seo.service'; -import { StateService } from '../../services/state.service'; -import { download } from '../../shared/graphs.utils'; -import { AmountShortenerPipe } from '../../shared/pipes/amount-shortener.pipe'; -import { RelativeUrlPipe } from '../../shared/pipes/relative-url/relative-url.pipe'; -import { getFlagEmoji } from '../../shared/common.utils'; +import { chartColors } from '@app/app.constants'; +import { ApiService } from '@app/services/api.service'; +import { SeoService } from '@app/services/seo.service'; +import { StateService } from '@app/services/state.service'; +import { download } from '@app/shared/graphs.utils'; +import { AmountShortenerPipe } from '@app/shared/pipes/amount-shortener.pipe'; +import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; +import { getFlagEmoji } from '@app/shared/common.utils'; @Component({ selector: 'app-nodes-per-country-chart', diff --git a/frontend/src/app/lightning/nodes-per-country/nodes-per-country.component.ts b/frontend/src/app/lightning/nodes-per-country/nodes-per-country.component.ts index 619ee01c0..b2b9e1f5c 100644 --- a/frontend/src/app/lightning/nodes-per-country/nodes-per-country.component.ts +++ b/frontend/src/app/lightning/nodes-per-country/nodes-per-country.component.ts @@ -1,10 +1,10 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; import { BehaviorSubject, combineLatest, map, Observable, share, tap } from 'rxjs'; -import { ApiService } from '../../services/api.service'; -import { SeoService } from '../../services/seo.service'; -import { getFlagEmoji } from '../../shared/common.utils'; -import { GeolocationData } from '../../shared/components/geolocation/geolocation.component'; +import { ApiService } from '@app/services/api.service'; +import { SeoService } from '@app/services/seo.service'; +import { getFlagEmoji } from '@app/shared/common.utils'; +import { GeolocationData } from '@app/shared/components/geolocation/geolocation.component'; @Component({ selector: 'app-nodes-per-country', diff --git a/frontend/src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.ts b/frontend/src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.ts index 429d7ee36..56a03a524 100644 --- a/frontend/src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.ts +++ b/frontend/src/app/lightning/nodes-per-isp-chart/nodes-per-isp-chart.component.ts @@ -1,15 +1,15 @@ import { ChangeDetectionStrategy, Component, OnInit, HostBinding, NgZone, Input } from '@angular/core'; import { Router } from '@angular/router'; -import { EChartsOption, PieSeriesOption } from '../../graphs/echarts'; +import { EChartsOption, PieSeriesOption } from '@app/graphs/echarts'; import { combineLatest, map, Observable, share, startWith, Subject, switchMap, tap } from 'rxjs'; -import { chartColors } from '../../app.constants'; -import { ApiService } from '../../services/api.service'; -import { SeoService } from '../../services/seo.service'; -import { StateService } from '../../services/state.service'; -import { isMobile } from '../../shared/common.utils'; -import { download } from '../../shared/graphs.utils'; -import { AmountShortenerPipe } from '../../shared/pipes/amount-shortener.pipe'; -import { RelativeUrlPipe } from '../../shared/pipes/relative-url/relative-url.pipe'; +import { chartColors } from '@app/app.constants'; +import { ApiService } from '@app/services/api.service'; +import { SeoService } from '@app/services/seo.service'; +import { StateService } from '@app/services/state.service'; +import { isMobile } from '@app/shared/common.utils'; +import { download } from '@app/shared/graphs.utils'; +import { AmountShortenerPipe } from '@app/shared/pipes/amount-shortener.pipe'; +import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; @Component({ selector: 'app-nodes-per-isp-chart', diff --git a/frontend/src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts b/frontend/src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts index 313353ab8..9fc071eb5 100644 --- a/frontend/src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts +++ b/frontend/src/app/lightning/nodes-per-isp/nodes-per-isp-preview.component.ts @@ -1,11 +1,11 @@ import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; import { ActivatedRoute, ParamMap } from '@angular/router'; import { catchError, map, switchMap, Observable, share, of } from 'rxjs'; -import { ApiService } from '../../services/api.service'; -import { SeoService } from '../../services/seo.service'; -import { OpenGraphService } from '../../services/opengraph.service'; -import { getFlagEmoji } from '../../shared/common.utils'; -import { GeolocationData } from '../../shared/components/geolocation/geolocation.component'; +import { ApiService } from '@app/services/api.service'; +import { SeoService } from '@app/services/seo.service'; +import { OpenGraphService } from '@app/services/opengraph.service'; +import { getFlagEmoji } from '@app/shared/common.utils'; +import { GeolocationData } from '@app/shared/components/geolocation/geolocation.component'; @Component({ selector: 'app-nodes-per-isp-preview', diff --git a/frontend/src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts b/frontend/src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts index f6c61a9f6..1c8ad3e1b 100644 --- a/frontend/src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts +++ b/frontend/src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -1,10 +1,10 @@ import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; import { BehaviorSubject, combineLatest, map, Observable, share, tap } from 'rxjs'; -import { ApiService } from '../../services/api.service'; -import { SeoService } from '../../services/seo.service'; -import { getFlagEmoji } from '../../shared/common.utils'; -import { GeolocationData } from '../../shared/components/geolocation/geolocation.component'; +import { ApiService } from '@app/services/api.service'; +import { SeoService } from '@app/services/seo.service'; +import { getFlagEmoji } from '@app/shared/common.utils'; +import { GeolocationData } from '@app/shared/components/geolocation/geolocation.component'; @Component({ selector: 'app-nodes-per-isp', diff --git a/frontend/src/app/lightning/nodes-ranking/nodes-ranking.component.ts b/frontend/src/app/lightning/nodes-ranking/nodes-ranking.component.ts index 8a1eae3dc..368b69c96 100644 --- a/frontend/src/app/lightning/nodes-ranking/nodes-ranking.component.ts +++ b/frontend/src/app/lightning/nodes-ranking/nodes-ranking.component.ts @@ -1,9 +1,9 @@ import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; -import { LightningApiService } from '../lightning-api.service'; +import { LightningApiService } from '@app/lightning/lightning-api.service'; import { share } from 'rxjs/operators'; import { Observable } from 'rxjs'; -import { INodesStatistics } from '../../interfaces/node-api.interface'; +import { INodesStatistics } from '@app/interfaces/node-api.interface'; @Component({ selector: 'app-nodes-ranking', diff --git a/frontend/src/app/lightning/nodes-ranking/oldest-nodes/oldest-nodes.component.ts b/frontend/src/app/lightning/nodes-ranking/oldest-nodes/oldest-nodes.component.ts index d83f3db0a..d4b726815 100644 --- a/frontend/src/app/lightning/nodes-ranking/oldest-nodes/oldest-nodes.component.ts +++ b/frontend/src/app/lightning/nodes-ranking/oldest-nodes/oldest-nodes.component.ts @@ -1,9 +1,9 @@ import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core'; import { map, Observable } from 'rxjs'; -import { GeolocationData } from '../../../shared/components/geolocation/geolocation.component'; -import { SeoService } from '../../../services/seo.service'; -import { IOldestNodes } from '../../../interfaces/node-api.interface'; -import { LightningApiService } from '../../lightning-api.service'; +import { GeolocationData } from '@app/shared/components/geolocation/geolocation.component'; +import { SeoService } from '@app/services/seo.service'; +import { IOldestNodes } from '@app/interfaces/node-api.interface'; +import { LightningApiService } from '@app/lightning/lightning-api.service'; @Component({ selector: 'app-oldest-nodes', diff --git a/frontend/src/app/lightning/nodes-ranking/top-nodes-per-capacity/top-nodes-per-capacity.component.ts b/frontend/src/app/lightning/nodes-ranking/top-nodes-per-capacity/top-nodes-per-capacity.component.ts index 0b8c03bbd..7a1973464 100644 --- a/frontend/src/app/lightning/nodes-ranking/top-nodes-per-capacity/top-nodes-per-capacity.component.ts +++ b/frontend/src/app/lightning/nodes-ranking/top-nodes-per-capacity/top-nodes-per-capacity.component.ts @@ -1,10 +1,10 @@ import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core'; import { combineLatest, map, Observable } from 'rxjs'; -import { INodesRanking, INodesStatistics, ITopNodesPerCapacity } from '../../../interfaces/node-api.interface'; -import { SeoService } from '../../../services/seo.service'; -import { StateService } from '../../../services/state.service'; -import { GeolocationData } from '../../../shared/components/geolocation/geolocation.component'; -import { LightningApiService } from '../../lightning-api.service'; +import { INodesRanking, INodesStatistics, ITopNodesPerCapacity } from '@app/interfaces/node-api.interface'; +import { SeoService } from '@app/services/seo.service'; +import { StateService } from '@app/services/state.service'; +import { GeolocationData } from '@app/shared/components/geolocation/geolocation.component'; +import { LightningApiService } from '@app/lightning/lightning-api.service'; @Component({ selector: 'app-top-nodes-per-capacity', diff --git a/frontend/src/app/lightning/nodes-ranking/top-nodes-per-channels/top-nodes-per-channels.component.ts b/frontend/src/app/lightning/nodes-ranking/top-nodes-per-channels/top-nodes-per-channels.component.ts index 56d55a5d3..4d699f65d 100644 --- a/frontend/src/app/lightning/nodes-ranking/top-nodes-per-channels/top-nodes-per-channels.component.ts +++ b/frontend/src/app/lightning/nodes-ranking/top-nodes-per-channels/top-nodes-per-channels.component.ts @@ -1,10 +1,10 @@ import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core'; import { combineLatest, map, Observable } from 'rxjs'; -import { INodesRanking, INodesStatistics, ITopNodesPerChannels } from '../../../interfaces/node-api.interface'; -import { SeoService } from '../../../services/seo.service'; -import { StateService } from '../../../services/state.service'; -import { GeolocationData } from '../../../shared/components/geolocation/geolocation.component'; -import { LightningApiService } from '../../lightning-api.service'; +import { INodesRanking, INodesStatistics, ITopNodesPerChannels } from '@app/interfaces/node-api.interface'; +import { SeoService } from '@app/services/seo.service'; +import { StateService } from '@app/services/state.service'; +import { GeolocationData } from '@app/shared/components/geolocation/geolocation.component'; +import { LightningApiService } from '@app/lightning/lightning-api.service'; @Component({ selector: 'app-top-nodes-per-channels', diff --git a/frontend/src/app/lightning/nodes-rankings-dashboard/nodes-rankings-dashboard.component.ts b/frontend/src/app/lightning/nodes-rankings-dashboard/nodes-rankings-dashboard.component.ts index 178ca783c..06d6cae68 100644 --- a/frontend/src/app/lightning/nodes-rankings-dashboard/nodes-rankings-dashboard.component.ts +++ b/frontend/src/app/lightning/nodes-rankings-dashboard/nodes-rankings-dashboard.component.ts @@ -1,8 +1,8 @@ import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; import { Observable, share } from 'rxjs'; -import { INodesRanking } from '../../interfaces/node-api.interface'; -import { SeoService } from '../../services/seo.service'; -import { LightningApiService } from '../lightning-api.service'; +import { INodesRanking } from '@app/interfaces/node-api.interface'; +import { SeoService } from '@app/services/seo.service'; +import { LightningApiService } from '@app/lightning/lightning-api.service'; @Component({ selector: 'app-nodes-rankings-dashboard', diff --git a/frontend/src/app/lightning/statistics-chart/lightning-statistics-chart.component.ts b/frontend/src/app/lightning/statistics-chart/lightning-statistics-chart.component.ts index 77ce42f26..08523088c 100644 --- a/frontend/src/app/lightning/statistics-chart/lightning-statistics-chart.component.ts +++ b/frontend/src/app/lightning/statistics-chart/lightning-statistics-chart.component.ts @@ -1,17 +1,17 @@ import { Component, Inject, Input, LOCALE_ID, OnInit, HostBinding, OnChanges, SimpleChanges } from '@angular/core'; -import { echarts, EChartsOption } from '../../graphs/echarts'; +import { echarts, EChartsOption } from '@app/graphs/echarts'; import { Observable, combineLatest, fromEvent } from 'rxjs'; import { map, share, startWith, switchMap, tap } from 'rxjs/operators'; -import { SeoService } from '../../services/seo.service'; +import { SeoService } from '@app/services/seo.service'; import { formatNumber } from '@angular/common'; import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; -import { StorageService } from '../../services/storage.service'; -import { MiningService } from '../../services/mining.service'; -import { download } from '../../shared/graphs.utils'; -import { LightningApiService } from '../lightning-api.service'; -import { AmountShortenerPipe } from '../../shared/pipes/amount-shortener.pipe'; -import { isMobile } from '../../shared/common.utils'; -import { StateService } from '../../services/state.service'; +import { StorageService } from '@app/services/storage.service'; +import { MiningService } from '@app/services/mining.service'; +import { download } from '@app/shared/graphs.utils'; +import { LightningApiService } from '@app/lightning/lightning-api.service'; +import { AmountShortenerPipe } from '@app/shared/pipes/amount-shortener.pipe'; +import { isMobile } from '@app/shared/common.utils'; +import { StateService } from '@app/services/state.service'; @Component({ selector: 'app-lightning-statistics-chart', diff --git a/frontend/src/app/liquid/liquid-graphs.module.ts b/frontend/src/app/liquid/liquid-graphs.module.ts index 3da93fc9d..9cfd7da83 100644 --- a/frontend/src/app/liquid/liquid-graphs.module.ts +++ b/frontend/src/app/liquid/liquid-graphs.module.ts @@ -1,7 +1,7 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { Routes, RouterModule } from '@angular/router'; -import { LiquidMasterPageComponent } from '../components/liquid-master-page/liquid-master-page.component'; +import { LiquidMasterPageComponent } from '@components/liquid-master-page/liquid-master-page.component'; const routes: Routes = [ { diff --git a/frontend/src/app/liquid/liquid-master-page.module.ts b/frontend/src/app/liquid/liquid-master-page.module.ts index 5d5f0b8dd..17c2c8c41 100644 --- a/frontend/src/app/liquid/liquid-master-page.module.ts +++ b/frontend/src/app/liquid/liquid-master-page.module.ts @@ -1,25 +1,25 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { Routes, RouterModule } from '@angular/router'; -import { SharedModule } from '../shared/shared.module'; +import { SharedModule } from '@app/shared/shared.module'; import { NgxEchartsModule } from 'ngx-echarts'; -import { LiquidMasterPageComponent } from '../components/liquid-master-page/liquid-master-page.component'; +import { LiquidMasterPageComponent } from '@components/liquid-master-page/liquid-master-page.component'; -import { StartComponent } from '../components/start/start.component'; -import { PushTransactionComponent } from '../components/push-transaction/push-transaction.component'; -import { BlocksList } from '../components/blocks-list/blocks-list.component'; -import { AssetGroupComponent } from '../components/assets/asset-group/asset-group.component'; -import { AssetsComponent } from '../components/assets/assets.component'; -import { AssetsFeaturedComponent } from '../components/assets/assets-featured/assets-featured.component' -import { AssetComponent } from '../components/asset/asset.component'; -import { AssetsNavComponent } from '../components/assets/assets-nav/assets-nav.component'; -import { RecentPegsListComponent } from '../components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component'; -import { FederationWalletComponent } from '../components/liquid-reserves-audit/federation-wallet/federation-wallet.component'; -import { FederationUtxosListComponent } from '../components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component'; -import { FederationAddressesListComponent } from '../components/liquid-reserves-audit/federation-addresses-list/federation-addresses-list.component'; -import { ServerHealthComponent } from '../components/server-health/server-health.component'; -import { ServerStatusComponent } from '../components/server-health/server-status.component'; +import { StartComponent } from '@components/start/start.component'; +import { PushTransactionComponent } from '@components/push-transaction/push-transaction.component'; +import { BlocksList } from '@components/blocks-list/blocks-list.component'; +import { AssetGroupComponent } from '@components/assets/asset-group/asset-group.component'; +import { AssetsComponent } from '@components/assets/assets.component'; +import { AssetsFeaturedComponent } from '@components/assets/assets-featured/assets-featured.component' +import { AssetComponent } from '@components/asset/asset.component'; +import { AssetsNavComponent } from '@components/assets/assets-nav/assets-nav.component'; +import { RecentPegsListComponent } from '@components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component'; +import { FederationWalletComponent } from '@components/liquid-reserves-audit/federation-wallet/federation-wallet.component'; +import { FederationUtxosListComponent } from '@components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component'; +import { FederationAddressesListComponent } from '@components/liquid-reserves-audit/federation-addresses-list/federation-addresses-list.component'; +import { ServerHealthComponent } from '@components/server-health/server-health.component'; +import { ServerStatusComponent } from '@components/server-health/server-status.component'; const routes: Routes = [ { @@ -32,7 +32,7 @@ const routes: Routes = [ }, { path: 'about', - loadChildren: () => import('../components/about/about.module').then(m => m.AboutModule), + loadChildren: () => import('@components/about/about.module').then(m => m.AboutModule), }, { path: 'blocks/:page', @@ -44,27 +44,27 @@ const routes: Routes = [ }, { path: 'terms-of-service', - loadChildren: () => import('../components/terms-of-service/terms-of-service.module').then(m => m.TermsOfServiceModule), + loadChildren: () => import('@components/terms-of-service/terms-of-service.module').then(m => m.TermsOfServiceModule), }, { path: 'privacy-policy', - loadChildren: () => import('../components/privacy-policy/privacy-policy.module').then(m => m.PrivacyPolicyModule), + loadChildren: () => import('@components/privacy-policy/privacy-policy.module').then(m => m.PrivacyPolicyModule), }, { path: 'trademark-policy', - loadChildren: () => import('../components/trademark-policy/trademark-policy.module').then(m => m.TrademarkModule), + loadChildren: () => import('@components/trademark-policy/trademark-policy.module').then(m => m.TrademarkModule), }, { path: 'tx', component: StartComponent, data: { preload: true, networkSpecific: true }, - loadChildren: () => import('../components/transaction/transaction.module').then(m => m.TransactionModule), + loadChildren: () => import('@components/transaction/transaction.module').then(m => m.TransactionModule), }, { path: 'block', component: StartComponent, data: { preload: true, networkSpecific: true }, - loadChildren: () => import('../components/block/block.module').then(m => m.BlockModule), + loadChildren: () => import('@components/block/block.module').then(m => m.BlockModule), }, { path: 'audit/wallet', @@ -178,4 +178,4 @@ export class LiquidRoutingModule { } FederationUtxosListComponent, ] }) -export class LiquidMasterPageModule { } \ No newline at end of file +export class LiquidMasterPageModule { } diff --git a/frontend/src/app/master-page.module.ts b/frontend/src/app/master-page.module.ts index 510756cbc..feddc9bd9 100644 --- a/frontend/src/app/master-page.module.ts +++ b/frontend/src/app/master-page.module.ts @@ -1,18 +1,18 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { Routes, RouterModule, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router'; -import { MasterPageComponent } from './components/master-page/master-page.component'; +import { MasterPageComponent } from '@components/master-page/master-page.component'; import { SharedModule } from './shared/shared.module'; -import { StartComponent } from './components/start/start.component'; -import { PushTransactionComponent } from './components/push-transaction/push-transaction.component'; -import { TestTransactionsComponent } from './components/test-transactions/test-transactions.component'; -import { CalculatorComponent } from './components/calculator/calculator.component'; -import { BlocksList } from './components/blocks-list/blocks-list.component'; -import { RbfList } from './components/rbf-list/rbf-list.component'; -import { ServerHealthComponent } from './components/server-health/server-health.component'; -import { ServerStatusComponent } from './components/server-health/server-status.component'; -import { FaucetComponent } from './components/faucet/faucet.component' +import { StartComponent } from '@components/start/start.component'; +import { PushTransactionComponent } from '@components/push-transaction/push-transaction.component'; +import { TestTransactionsComponent } from '@components/test-transactions/test-transactions.component'; +import { CalculatorComponent } from '@components/calculator/calculator.component'; +import { BlocksList } from '@components/blocks-list/blocks-list.component'; +import { RbfList } from '@components/rbf-list/rbf-list.component'; +import { ServerHealthComponent } from '@components/server-health/server-health.component'; +import { ServerStatusComponent } from '@components/server-health/server-status.component'; +import { FaucetComponent } from '@components/faucet/faucet.component' const browserWindow = window || {}; // @ts-ignore @@ -42,7 +42,7 @@ const routes: Routes = [ }, { path: 'about', - loadChildren: () => import('./components/about/about.module').then(m => m.AboutModule), + loadChildren: () => import('@components/about/about.module').then(m => m.AboutModule), }, { path: 'blocks/:page', @@ -58,27 +58,27 @@ const routes: Routes = [ }, { path: 'terms-of-service', - loadChildren: () => import('./components/terms-of-service/terms-of-service.module').then(m => m.TermsOfServiceModule), + loadChildren: () => import('@components/terms-of-service/terms-of-service.module').then(m => m.TermsOfServiceModule), }, { path: 'privacy-policy', - loadChildren: () => import('./components/privacy-policy/privacy-policy.module').then(m => m.PrivacyPolicyModule), + loadChildren: () => import('@components/privacy-policy/privacy-policy.module').then(m => m.PrivacyPolicyModule), }, { path: 'trademark-policy', - loadChildren: () => import('./components/trademark-policy/trademark-policy.module').then(m => m.TrademarkModule), + loadChildren: () => import('@components/trademark-policy/trademark-policy.module').then(m => m.TrademarkModule), }, { path: 'tx', component: StartComponent, data: { preload: true, networkSpecific: true }, - loadChildren: () => import('./components/transaction/transaction.module').then(m => m.TransactionModule), + loadChildren: () => import('@components/transaction/transaction.module').then(m => m.TransactionModule), }, { path: 'block', component: StartComponent, data: { preload: true, networkSpecific: true }, - loadChildren: () => import('./components/block/block.module').then(m => m.BlockModule), + loadChildren: () => import('@components/block/block.module').then(m => m.BlockModule), }, { path: 'docs', diff --git a/frontend/src/app/previews.module.ts b/frontend/src/app/previews.module.ts index 95124f232..213ba51cc 100644 --- a/frontend/src/app/previews.module.ts +++ b/frontend/src/app/previews.module.ts @@ -4,12 +4,12 @@ import { SharedModule } from './shared/shared.module'; import { RouterModule } from '@angular/router'; import { GraphsModule } from './graphs/graphs.module'; import { PreviewsRoutingModule } from './previews.routing.module'; -import { TransactionPreviewComponent } from './components/transaction/transaction-preview.component'; -import { BlockPreviewComponent } from './components/block/block-preview.component'; -import { AddressPreviewComponent } from './components/address/address-preview.component'; -import { PoolPreviewComponent } from './components/pool/pool-preview.component'; -import { MasterPagePreviewComponent } from './components/master-page-preview/master-page-preview.component'; -import { TxBowtieModule } from './components/tx-bowtie-graph/tx-bowtie.module'; +import { TransactionPreviewComponent } from '@components/transaction/transaction-preview.component'; +import { BlockPreviewComponent } from '@components/block/block-preview.component'; +import { AddressPreviewComponent } from '@components/address/address-preview.component'; +import { PoolPreviewComponent } from '@components/pool/pool-preview.component'; +import { MasterPagePreviewComponent } from '@components/master-page-preview/master-page-preview.component'; +import { TxBowtieModule } from '@components/tx-bowtie-graph/tx-bowtie.module'; @NgModule({ declarations: [ TransactionPreviewComponent, diff --git a/frontend/src/app/previews.routing.module.ts b/frontend/src/app/previews.routing.module.ts index 6ac44a370..a2ced3e10 100644 --- a/frontend/src/app/previews.routing.module.ts +++ b/frontend/src/app/previews.routing.module.ts @@ -1,10 +1,10 @@ import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; -import { TransactionPreviewComponent } from './components/transaction/transaction-preview.component'; -import { BlockPreviewComponent } from './components/block/block-preview.component'; -import { AddressPreviewComponent } from './components/address/address-preview.component'; -import { PoolPreviewComponent } from './components/pool/pool-preview.component'; -import { MasterPagePreviewComponent } from './components/master-page-preview/master-page-preview.component'; +import { TransactionPreviewComponent } from '@components/transaction/transaction-preview.component'; +import { BlockPreviewComponent } from '@components/block/block-preview.component'; +import { AddressPreviewComponent } from '@components/address/address-preview.component'; +import { PoolPreviewComponent } from '@components/pool/pool-preview.component'; +import { MasterPagePreviewComponent } from '@components/master-page-preview/master-page-preview.component'; const routes: Routes = [ { diff --git a/frontend/src/app/services/api.service.ts b/frontend/src/app/services/api.service.ts index 079eb4034..4828ee32a 100644 --- a/frontend/src/app/services/api.service.ts +++ b/frontend/src/app/services/api.service.ts @@ -3,12 +3,12 @@ import { HttpClient, HttpParams, HttpResponse } from '@angular/common/http'; import { CpfpInfo, OptimizedMempoolStats, AddressInformation, LiquidPegs, ITranslators, PoolStat, BlockExtended, TransactionStripped, RewardStats, AuditScore, BlockSizesAndWeights, RbfTree, BlockAudit, CurrentPegs, AuditStatus, FederationAddress, FederationUtxo, RecentPeg, PegsVolume, AccelerationInfo, TestMempoolAcceptResult, WalletAddress, SubmitPackageResult } from '../interfaces/node-api.interface'; import { BehaviorSubject, Observable, catchError, filter, map, of, shareReplay, take, tap } from 'rxjs'; -import { StateService } from './state.service'; -import { Transaction } from '../interfaces/electrs.interface'; -import { Conversion } from './price.service'; -import { StorageService } from './storage.service'; -import { WebsocketResponse } from '../interfaces/websocket.interface'; -import { TxAuditStatus } from '../components/transaction/transaction.component'; +import { StateService } from '@app/services/state.service'; +import { Transaction } from '@app/interfaces/electrs.interface'; +import { Conversion } from '@app/services/price.service'; +import { StorageService } from '@app/services/storage.service'; +import { WebsocketResponse } from '@app/interfaces/websocket.interface'; +import { TxAuditStatus } from '@components/transaction/transaction.component'; @Injectable({ providedIn: 'root' diff --git a/frontend/src/app/services/assets.service.ts b/frontend/src/app/services/assets.service.ts index 9c6b5dba0..efbe4a789 100644 --- a/frontend/src/app/services/assets.service.ts +++ b/frontend/src/app/services/assets.service.ts @@ -2,9 +2,9 @@ import { Injectable } from '@angular/core'; import { HttpClient } from '@angular/common/http'; import { Observable } from 'rxjs'; import { map, shareReplay, switchMap } from 'rxjs/operators'; -import { StateService } from './state.service'; -import { environment } from '../../../src/environments/environment'; -import { AssetExtended } from '../interfaces/electrs.interface'; +import { StateService } from '@app/services/state.service'; +import { environment } from '@environments/environment'; +import { AssetExtended } from '@app/interfaces/electrs.interface'; @Injectable({ providedIn: 'root' diff --git a/frontend/src/app/services/cache.service.ts b/frontend/src/app/services/cache.service.ts index f15154b46..c0d0dcfed 100644 --- a/frontend/src/app/services/cache.service.ts +++ b/frontend/src/app/services/cache.service.ts @@ -1,9 +1,9 @@ import { Injectable } from '@angular/core'; import { firstValueFrom, Subject, Subscription} from 'rxjs'; -import { Transaction } from '../interfaces/electrs.interface'; -import { BlockExtended } from '../interfaces/node-api.interface'; -import { StateService } from './state.service'; -import { ApiService } from './api.service'; +import { Transaction } from '@app/interfaces/electrs.interface'; +import { BlockExtended } from '@app/interfaces/node-api.interface'; +import { StateService } from '@app/services/state.service'; +import { ApiService } from '@app/services/api.service'; const BLOCK_CACHE_SIZE = 500; const KEEP_RECENT_BLOCKS = 50; @@ -133,4 +133,4 @@ export class CacheService { getCachedBlock(height) { return this.blockCache[height]; } -} \ No newline at end of file +} diff --git a/frontend/src/app/services/electrs-api.service.ts b/frontend/src/app/services/electrs-api.service.ts index 2ae9138b3..ffdd69396 100644 --- a/frontend/src/app/services/electrs-api.service.ts +++ b/frontend/src/app/services/electrs-api.service.ts @@ -2,9 +2,9 @@ import { Injectable } from '@angular/core'; import { HttpClient, HttpParams } from '@angular/common/http'; import { BehaviorSubject, Observable, catchError, filter, from, of, shareReplay, switchMap, take, tap } from 'rxjs'; import { Transaction, Address, Outspend, Recent, Asset, ScriptHash, AddressTxSummary, Utxo } from '../interfaces/electrs.interface'; -import { StateService } from './state.service'; -import { BlockExtended } from '../interfaces/node-api.interface'; -import { calcScriptHash$ } from '../bitcoin.utils'; +import { StateService } from '@app/services/state.service'; +import { BlockExtended } from '@app/interfaces/node-api.interface'; +import { calcScriptHash$ } from '@app/bitcoin.utils'; @Injectable({ providedIn: 'root' diff --git a/frontend/src/app/services/eta.service.ts b/frontend/src/app/services/eta.service.ts index 6834237b6..5ff90ce3e 100644 --- a/frontend/src/app/services/eta.service.ts +++ b/frontend/src/app/services/eta.service.ts @@ -1,11 +1,11 @@ import { Injectable } from '@angular/core'; -import { AccelerationPosition, CpfpInfo, DifficultyAdjustment, MempoolPosition, SinglePoolStats } from '../interfaces/node-api.interface'; -import { StateService } from './state.service'; -import { MempoolBlock } from '../interfaces/websocket.interface'; -import { Transaction } from '../interfaces/electrs.interface'; -import { MiningService, MiningStats } from './mining.service'; -import { getUnacceleratedFeeRate } from '../shared/transaction.utils'; -import { AccelerationEstimate } from '../components/accelerate-checkout/accelerate-checkout.component'; +import { AccelerationPosition, CpfpInfo, DifficultyAdjustment, MempoolPosition, SinglePoolStats } from '@app/interfaces/node-api.interface'; +import { StateService } from '@app/services/state.service'; +import { MempoolBlock } from '@app/interfaces/websocket.interface'; +import { Transaction } from '@app/interfaces/electrs.interface'; +import { MiningService, MiningStats } from '@app/services/mining.service'; +import { getUnacceleratedFeeRate } from '@app/shared/transaction.utils'; +import { AccelerationEstimate } from '@components/accelerate-checkout/accelerate-checkout.component'; import { Observable, combineLatest, map, of, share, shareReplay, tap } from 'rxjs'; export interface ETA { diff --git a/frontend/src/app/services/language.service.ts b/frontend/src/app/services/language.service.ts index 58ba94a00..b0d2f247c 100644 --- a/frontend/src/app/services/language.service.ts +++ b/frontend/src/app/services/language.service.ts @@ -1,6 +1,6 @@ import { DOCUMENT, getLocaleId } from '@angular/common'; import { LOCALE_ID, Inject, Injectable } from '@angular/core'; -import { languages } from '../app.constants'; +import { languages } from '@app/app.constants'; @Injectable({ providedIn: 'root' diff --git a/frontend/src/app/services/mining.service.ts b/frontend/src/app/services/mining.service.ts index 0dffa0b66..f8e835f81 100644 --- a/frontend/src/app/services/mining.service.ts +++ b/frontend/src/app/services/mining.service.ts @@ -1,10 +1,10 @@ import { Injectable } from '@angular/core'; import { Observable, of } from 'rxjs'; import { map, tap } from 'rxjs/operators'; -import { PoolsStats, SinglePoolStats } from '../interfaces/node-api.interface'; -import { ApiService } from '../services/api.service'; -import { StateService } from './state.service'; -import { StorageService } from './storage.service'; +import { PoolsStats, SinglePoolStats } from '@app/interfaces/node-api.interface'; +import { ApiService } from '@app/services/api.service'; +import { StateService } from '@app/services/state.service'; +import { StorageService } from '@app/services/storage.service'; export interface MiningUnits { hashrateDivider: number; diff --git a/frontend/src/app/services/navigation.service.ts b/frontend/src/app/services/navigation.service.ts index 2a3215121..c1b32739a 100644 --- a/frontend/src/app/services/navigation.service.ts +++ b/frontend/src/app/services/navigation.service.ts @@ -2,8 +2,8 @@ import { Injectable } from '@angular/core'; import { Router, NavigationEnd, ActivatedRouteSnapshot } from '@angular/router'; import { BehaviorSubject } from 'rxjs'; import { filter, map } from 'rxjs/operators'; -import { StateService } from './state.service'; -import { RelativeUrlPipe } from '../shared/pipes/relative-url/relative-url.pipe'; +import { StateService } from '@app/services/state.service'; +import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; @Injectable({ providedIn: 'root' diff --git a/frontend/src/app/services/ord-api.service.ts b/frontend/src/app/services/ord-api.service.ts index 5fcd75298..8f87c8000 100644 --- a/frontend/src/app/services/ord-api.service.ts +++ b/frontend/src/app/services/ord-api.service.ts @@ -1,9 +1,9 @@ import { Injectable } from '@angular/core'; import { catchError, forkJoin, map, Observable, of, switchMap, tap } from 'rxjs'; -import { Inscription } from '../shared/ord/inscription.utils'; -import { Transaction } from '../interfaces/electrs.interface'; -import { getNextInscriptionMark, hexToBytes, extractInscriptionData } from '../shared/ord/inscription.utils'; -import { decipherRunestone, Runestone, Etching, UNCOMMON_GOODS } from '../shared/ord/rune.utils'; +import { Inscription } from '@app/shared/ord/inscription.utils'; +import { Transaction } from '@app/interfaces/electrs.interface'; +import { getNextInscriptionMark, hexToBytes, extractInscriptionData } from '@app/shared/ord/inscription.utils'; +import { decipherRunestone, Runestone, Etching, UNCOMMON_GOODS } from '@app/shared/ord/rune.utils'; import { ElectrsApiService } from './electrs-api.service'; diff --git a/frontend/src/app/services/preload.service.ts b/frontend/src/app/services/preload.service.ts index 386d4deb4..2fce9b98c 100644 --- a/frontend/src/app/services/preload.service.ts +++ b/frontend/src/app/services/preload.service.ts @@ -1,7 +1,7 @@ import { Injectable } from '@angular/core'; import { ElectrsApiService } from '../services/electrs-api.service'; import { Subject, debounceTime, switchMap } from 'rxjs'; -import { ApiService } from './api.service'; +import { ApiService } from '@app/services/api.service'; @Injectable({ providedIn: 'root' diff --git a/frontend/src/app/services/services-api.service.ts b/frontend/src/app/services/services-api.service.ts index 5a17026a9..c5eff2000 100644 --- a/frontend/src/app/services/services-api.service.ts +++ b/frontend/src/app/services/services-api.service.ts @@ -1,13 +1,13 @@ import { Router, NavigationStart } from '@angular/router'; import { Injectable } from '@angular/core'; import { HttpClient } from '@angular/common/http'; -import { StateService } from './state.service'; -import { StorageService } from './storage.service'; -import { MenuGroup } from '../interfaces/services.interface'; +import { StateService } from '@app/services/state.service'; +import { StorageService } from '@app/services/storage.service'; +import { MenuGroup } from '@app/interfaces/services.interface'; import { Observable, of, ReplaySubject, tap, catchError, share, filter, switchMap, map } from 'rxjs'; -import { IBackendInfo } from '../interfaces/websocket.interface'; -import { Acceleration, AccelerationHistoryParams } from '../interfaces/node-api.interface'; -import { AccelerationStats } from '../components/acceleration/acceleration-stats/acceleration-stats.component'; +import { IBackendInfo } from '@app/interfaces/websocket.interface'; +import { Acceleration, AccelerationHistoryParams } from '@app/interfaces/node-api.interface'; +import { AccelerationStats } from '@components/acceleration/acceleration-stats/acceleration-stats.component'; export interface IUser { username: string; diff --git a/frontend/src/app/services/state.service.ts b/frontend/src/app/services/state.service.ts index 5e4075a52..d01e95585 100644 --- a/frontend/src/app/services/state.service.ts +++ b/frontend/src/app/services/state.service.ts @@ -1,14 +1,14 @@ import { Inject, Injectable, PLATFORM_ID, LOCALE_ID } from '@angular/core'; import { ReplaySubject, BehaviorSubject, Subject, fromEvent, Observable } from 'rxjs'; -import { AddressTxSummary, Transaction } from '../interfaces/electrs.interface'; -import { AccelerationDelta, HealthCheckHost, IBackendInfo, MempoolBlock, MempoolBlockUpdate, MempoolInfo, Recommendedfees, ReplacedTransaction, ReplacementInfo, isMempoolState } from '../interfaces/websocket.interface'; -import { Acceleration, AccelerationPosition, BlockExtended, CpfpInfo, DifficultyAdjustment, MempoolPosition, OptimizedMempoolStats, RbfTree, TransactionStripped } from '../interfaces/node-api.interface'; +import { AddressTxSummary, Transaction } from '@app/interfaces/electrs.interface'; +import { AccelerationDelta, HealthCheckHost, IBackendInfo, MempoolBlock, MempoolBlockUpdate, MempoolInfo, Recommendedfees, ReplacedTransaction, ReplacementInfo, isMempoolState } from '@app/interfaces/websocket.interface'; +import { Acceleration, AccelerationPosition, BlockExtended, CpfpInfo, DifficultyAdjustment, MempoolPosition, OptimizedMempoolStats, RbfTree, TransactionStripped } from '@app/interfaces/node-api.interface'; import { Router, NavigationStart } from '@angular/router'; import { isPlatformBrowser } from '@angular/common'; import { filter, map, scan, share, shareReplay } from 'rxjs/operators'; import { StorageService } from './storage.service'; -import { hasTouchScreen } from '../shared/pipes/bytes-pipe/utils'; -import { ActiveFilter } from '../shared/filters.utils'; +import { hasTouchScreen } from '@app/shared/pipes/bytes-pipe/utils'; +import { ActiveFilter } from '@app/shared/filters.utils'; export interface MarkBlockState { blockHeight?: number; diff --git a/frontend/src/app/services/theme.service.ts b/frontend/src/app/services/theme.service.ts index 0a0fdc505..6ed9c1027 100644 --- a/frontend/src/app/services/theme.service.ts +++ b/frontend/src/app/services/theme.service.ts @@ -1,8 +1,8 @@ import { Injectable } from '@angular/core'; import { Subject } from 'rxjs'; -import { defaultMempoolFeeColors, contrastMempoolFeeColors } from '../app.constants'; -import { StorageService } from './storage.service'; -import { StateService } from './state.service'; +import { defaultMempoolFeeColors, contrastMempoolFeeColors } from '@app/app.constants'; +import { StorageService } from '@app/services/storage.service'; +import { StateService } from '@app/services/state.service'; @Injectable({ providedIn: 'root' diff --git a/frontend/src/app/services/time.service.ts b/frontend/src/app/services/time.service.ts index 6f7978774..e4804deab 100644 --- a/frontend/src/app/services/time.service.ts +++ b/frontend/src/app/services/time.service.ts @@ -1,6 +1,6 @@ import { Injectable } from '@angular/core'; import { DatePipe } from '@angular/common'; -import { dates } from '../shared/i18n/dates'; +import { dates } from '@app/shared/i18n/dates'; const intervals = { year: 31536000, diff --git a/frontend/src/app/services/websocket.service.ts b/frontend/src/app/services/websocket.service.ts index f3cc6ecae..42f2269ad 100644 --- a/frontend/src/app/services/websocket.service.ts +++ b/frontend/src/app/services/websocket.service.ts @@ -1,14 +1,14 @@ import { Injectable } from '@angular/core'; import { webSocket, WebSocketSubject } from 'rxjs/webSocket'; -import { WebsocketResponse } from '../interfaces/websocket.interface'; -import { StateService } from './state.service'; -import { Transaction } from '../interfaces/electrs.interface'; +import { WebsocketResponse } from '@app/interfaces/websocket.interface'; +import { StateService } from '@app/services/state.service'; +import { Transaction } from '@app/interfaces/electrs.interface'; import { firstValueFrom, Subscription } from 'rxjs'; import { ApiService } from './api.service'; import { take } from 'rxjs/operators'; import { TransferState, makeStateKey } from '@angular/core'; import { CacheService } from './cache.service'; -import { uncompressDeltaChange, uncompressTx } from '../shared/common.utils'; +import { uncompressDeltaChange, uncompressTx } from '@app/shared/common.utils'; const OFFLINE_RETRY_AFTER_MS = 2000; const OFFLINE_PING_CHECK_AFTER_MS = 30000; diff --git a/frontend/src/app/shared/address-utils.ts b/frontend/src/app/shared/address-utils.ts index 59c85014b..f7d89a46d 100644 --- a/frontend/src/app/shared/address-utils.ts +++ b/frontend/src/app/shared/address-utils.ts @@ -1,7 +1,7 @@ import '@angular/localize/init'; -import { ScriptInfo } from './script.utils'; -import { Vin, Vout } from '../interfaces/electrs.interface'; -import { BECH32_CHARS_LW, BASE58_CHARS, HEX_CHARS } from './regex.utils'; +import { ScriptInfo } from '@app/shared/script.utils'; +import { Vin, Vout } from '@app/interfaces/electrs.interface'; +import { BECH32_CHARS_LW, BASE58_CHARS, HEX_CHARS } from '@app/shared/regex.utils'; export type AddressType = 'fee' | 'empty' @@ -217,4 +217,4 @@ export class AddressTypeInfo { this.isMultisig = { m: script.template['m'], n: script.template['n'] }; } } -} \ No newline at end of file +} diff --git a/frontend/src/app/shared/common.utils.ts b/frontend/src/app/shared/common.utils.ts index 080ef5663..43e1cc719 100644 --- a/frontend/src/app/shared/common.utils.ts +++ b/frontend/src/app/shared/common.utils.ts @@ -1,6 +1,6 @@ import { MempoolBlockDelta, MempoolBlockDeltaCompressed, MempoolDeltaChange, TransactionCompressed } from "../interfaces/websocket.interface"; -import { TransactionStripped } from "../interfaces/node-api.interface"; -import { AmountShortenerPipe } from "./pipes/amount-shortener.pipe"; +import { TransactionStripped } from "@app/interfaces/node-api.interface"; +import { AmountShortenerPipe } from "@app/shared/pipes/amount-shortener.pipe"; const amountShortenerPipe = new AmountShortenerPipe(); export function isMobile(): boolean { diff --git a/frontend/src/app/shared/components/address-type/address-type.component.ts b/frontend/src/app/shared/components/address-type/address-type.component.ts index 1a2456c07..d0ae7a8f1 100644 --- a/frontend/src/app/shared/components/address-type/address-type.component.ts +++ b/frontend/src/app/shared/components/address-type/address-type.component.ts @@ -1,5 +1,5 @@ import { Component, Input } from '@angular/core'; -import { AddressTypeInfo } from '../../address-utils'; +import { AddressTypeInfo } from '@app/shared/address-utils'; @Component({ selector: 'app-address-type', diff --git a/frontend/src/app/shared/components/btc/btc.component.ts b/frontend/src/app/shared/components/btc/btc.component.ts index 4e62b07ff..a87be7a4f 100644 --- a/frontend/src/app/shared/components/btc/btc.component.ts +++ b/frontend/src/app/shared/components/btc/btc.component.ts @@ -1,6 +1,6 @@ import { Component, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core'; import { Subscription } from 'rxjs'; -import { StateService } from '../../../services/state.service'; +import { StateService } from '@app/services/state.service'; @Component({ selector: 'app-btc', diff --git a/frontend/src/app/shared/components/fee-rate/fee-rate.component.ts b/frontend/src/app/shared/components/fee-rate/fee-rate.component.ts index b1d143e7f..9a2565cec 100644 --- a/frontend/src/app/shared/components/fee-rate/fee-rate.component.ts +++ b/frontend/src/app/shared/components/fee-rate/fee-rate.component.ts @@ -1,6 +1,6 @@ import { Component, Input, OnInit } from '@angular/core'; import { Observable } from 'rxjs'; -import { StateService } from '../../../services/state.service'; +import { StateService } from '@app/services/state.service'; @Component({ selector: 'app-fee-rate', diff --git a/frontend/src/app/shared/components/geolocation/geolocation.component.ts b/frontend/src/app/shared/components/geolocation/geolocation.component.ts index 85e4b6e53..2d9aa684b 100644 --- a/frontend/src/app/shared/components/geolocation/geolocation.component.ts +++ b/frontend/src/app/shared/components/geolocation/geolocation.component.ts @@ -1,5 +1,5 @@ import { Component, Input, OnChanges } from '@angular/core'; -import { convertRegion, getFlagEmoji } from '../../common.utils'; +import { convertRegion, getFlagEmoji } from '@app/shared/common.utils'; export interface GeolocationData { country: string; diff --git a/frontend/src/app/shared/components/global-footer/global-footer.component.ts b/frontend/src/app/shared/components/global-footer/global-footer.component.ts index 50f9a53d7..e102becad 100644 --- a/frontend/src/app/shared/components/global-footer/global-footer.component.ts +++ b/frontend/src/app/shared/components/global-footer/global-footer.component.ts @@ -2,13 +2,13 @@ import { Input, ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit, O import { Router, ActivatedRoute } from '@angular/router'; import { Observable, merge, of, Subject, Subscription } from 'rxjs'; import { tap, takeUntil } from 'rxjs/operators'; -import { Env, StateService } from '../../../services/state.service'; -import { IBackendInfo } from '../../../interfaces/websocket.interface'; -import { LanguageService } from '../../../services/language.service'; -import { NavigationService } from '../../../services/navigation.service'; -import { StorageService } from '../../../services/storage.service'; -import { WebsocketService } from '../../../services/websocket.service'; -import { EnterpriseService } from '../../../services/enterprise.service'; +import { Env, StateService } from '@app/services/state.service'; +import { IBackendInfo } from '@app/interfaces/websocket.interface'; +import { LanguageService } from '@app/services/language.service'; +import { NavigationService } from '@app/services/navigation.service'; +import { StorageService } from '@app/services/storage.service'; +import { WebsocketService } from '@app/services/websocket.service'; +import { EnterpriseService } from '@app/services/enterprise.service'; @Component({ selector: 'app-global-footer', diff --git a/frontend/src/app/shared/components/sats/sats.component.ts b/frontend/src/app/shared/components/sats/sats.component.ts index 39be66ecd..c9fbc741f 100644 --- a/frontend/src/app/shared/components/sats/sats.component.ts +++ b/frontend/src/app/shared/components/sats/sats.component.ts @@ -1,6 +1,6 @@ import { Component, Input, OnInit } from '@angular/core'; import { Subscription } from 'rxjs'; -import { StateService } from '../../../services/state.service'; +import { StateService } from '@app/services/state.service'; @Component({ selector: 'app-sats', diff --git a/frontend/src/app/shared/components/testnet-alert/testnet-alert.component.ts b/frontend/src/app/shared/components/testnet-alert/testnet-alert.component.ts index 0672fd04b..47d6bbe34 100644 --- a/frontend/src/app/shared/components/testnet-alert/testnet-alert.component.ts +++ b/frontend/src/app/shared/components/testnet-alert/testnet-alert.component.ts @@ -1,6 +1,6 @@ import { ChangeDetectionStrategy, Component } from '@angular/core'; -import { StorageService } from '../../../services/storage.service'; -import { StateService } from '../../../services/state.service'; +import { StorageService } from '@app/services/storage.service'; +import { StateService } from '@app/services/state.service'; @Component({ selector: 'app-testnet-alert', diff --git a/frontend/src/app/shared/components/weight-directives/weight-directives.ts b/frontend/src/app/shared/components/weight-directives/weight-directives.ts index 879b6bee6..7f0d65ff4 100644 --- a/frontend/src/app/shared/components/weight-directives/weight-directives.ts +++ b/frontend/src/app/shared/components/weight-directives/weight-directives.ts @@ -1,6 +1,6 @@ import { Directive, OnDestroy, TemplateRef, ViewContainerRef } from '@angular/core'; import { Subscription } from 'rxjs'; -import { StateService } from '../../../services/state.service'; +import { StateService } from '@app/services/state.service'; function createRateUnitDirective(checkFn: (rateUnit: string) => boolean): any { @Directive() @@ -42,4 +42,4 @@ function createRateUnitDirective(checkFn: (rateUnit: string) => boolean): any { export class OnlyVsizeDirective extends createRateUnitDirective(rateUnit => rateUnit !== 'wu') {} @Directive({ selector: '[only-weight]' }) -export class OnlyWeightDirective extends createRateUnitDirective(rateUnit => rateUnit === 'wu') {} \ No newline at end of file +export class OnlyWeightDirective extends createRateUnitDirective(rateUnit => rateUnit === 'wu') {} diff --git a/frontend/src/app/shared/ord/rune.utils.ts b/frontend/src/app/shared/ord/rune.utils.ts index c23a55264..d6ab42bad 100644 --- a/frontend/src/app/shared/ord/rune.utils.ts +++ b/frontend/src/app/shared/ord/rune.utils.ts @@ -1,4 +1,4 @@ -import { Transaction } from '../../interfaces/electrs.interface'; +import { Transaction } from '@app/interfaces/electrs.interface'; export const U128_MAX_BIGINT = 0xffff_ffff_ffff_ffff_ffff_ffff_ffff_ffffn; diff --git a/frontend/src/app/shared/pipes/fiat-currency.pipe.ts b/frontend/src/app/shared/pipes/fiat-currency.pipe.ts index d22104e46..701426134 100644 --- a/frontend/src/app/shared/pipes/fiat-currency.pipe.ts +++ b/frontend/src/app/shared/pipes/fiat-currency.pipe.ts @@ -1,7 +1,7 @@ import { formatCurrency, getCurrencySymbol } from '@angular/common'; import { Inject, LOCALE_ID, Pipe, PipeTransform } from '@angular/core'; import { Subscription } from 'rxjs'; -import { StateService } from '../../services/state.service'; +import { StateService } from '@app/services/state.service'; @Pipe({ name: 'fiatCurrency' @@ -29,4 +29,4 @@ export class FiatCurrencyPipe implements PipeTransform { return new Intl.NumberFormat(this.locale, { style: 'currency', currency }).format(num); } } -} \ No newline at end of file +} diff --git a/frontend/src/app/shared/pipes/fiat-shortener.pipe.ts b/frontend/src/app/shared/pipes/fiat-shortener.pipe.ts index 4ce171054..7651676b4 100644 --- a/frontend/src/app/shared/pipes/fiat-shortener.pipe.ts +++ b/frontend/src/app/shared/pipes/fiat-shortener.pipe.ts @@ -1,7 +1,7 @@ import { formatCurrency, getCurrencySymbol } from '@angular/common'; import { Inject, LOCALE_ID, Pipe, PipeTransform } from '@angular/core'; import { Subscription } from 'rxjs'; -import { StateService } from '../../services/state.service'; +import { StateService } from '@app/services/state.service'; @Pipe({ name: 'fiatShortener' @@ -44,4 +44,4 @@ export class FiatShortenerPipe implements PipeTransform { return result + item.symbol; } -} \ No newline at end of file +} diff --git a/frontend/src/app/shared/pipes/relative-url/relative-url.pipe.ts b/frontend/src/app/shared/pipes/relative-url/relative-url.pipe.ts index 8eab3eb0b..499345d3c 100644 --- a/frontend/src/app/shared/pipes/relative-url/relative-url.pipe.ts +++ b/frontend/src/app/shared/pipes/relative-url/relative-url.pipe.ts @@ -1,5 +1,5 @@ import { Pipe, PipeTransform } from '@angular/core'; -import { StateService } from '../../../services/state.service'; +import { StateService } from '@app/services/state.service'; @Pipe({ name: 'relativeUrl' diff --git a/frontend/src/app/shared/regex.utils.ts b/frontend/src/app/shared/regex.utils.ts index b3d277c9f..4d3985f56 100644 --- a/frontend/src/app/shared/regex.utils.ts +++ b/frontend/src/app/shared/regex.utils.ts @@ -1,4 +1,4 @@ -import { Env } from '../services/state.service'; +import { Env } from '@app/services/state.service'; // all base58 characters export const BASE58_CHARS = `[a-km-zA-HJ-NP-Z1-9]`; diff --git a/frontend/src/app/shared/shared.module.ts b/frontend/src/app/shared/shared.module.ts index 25a60a70f..a855f11b5 100644 --- a/frontend/src/app/shared/shared.module.ts +++ b/frontend/src/app/shared/shared.module.ts @@ -6,120 +6,120 @@ import { faFilter, faAngleDown, faAngleUp, faAngleRight, faAngleLeft, faBolt, fa faLink, faList, faSearch, faCaretUp, faCaretDown, faTachometerAlt, faThList, faTint, faTv, faClock, faAngleDoubleDown, faSortUp, faAngleDoubleUp, faChevronDown, faFileAlt, faRedoAlt, faArrowAltCircleRight, faExternalLinkAlt, faBook, faListUl, faDownload, faQrcode, faArrowRightArrowLeft, faArrowsRotate, faCircleLeft, faFastForward, faWallet, faUserClock, faWrench, faUserFriends, faQuestionCircle, faHistory, faSignOutAlt, faKey, faSuitcase, faIdCardAlt, faNetworkWired, faUserCheck, faCircleCheck, faUserCircle, faCheck, faRocket, faScaleBalanced, faHourglassStart, faHourglassHalf, faHourglassEnd, faWandMagicSparkles, faFaucetDrip, faTimeline, faCircleXmark, faCalendarCheck } from '@fortawesome/free-solid-svg-icons'; import { InfiniteScrollModule } from 'ngx-infinite-scroll'; -import { MenuComponent } from '../components/menu/menu.component'; -import { PreviewTitleComponent } from '../components/master-page-preview/preview-title.component'; -import { VbytesPipe } from './pipes/bytes-pipe/vbytes.pipe'; -import { ShortenStringPipe } from './pipes/shorten-string-pipe/shorten-string.pipe'; -import { CeilPipe } from './pipes/math-ceil/math-ceil.pipe'; -import { Hex2asciiPipe } from './pipes/hex2ascii/hex2ascii.pipe'; -import { Decimal2HexPipe } from './pipes/decimal2hex/decimal2hex.pipe'; -import { FeeRoundingPipe } from './pipes/fee-rounding/fee-rounding.pipe'; -import { AsmStylerPipe } from './pipes/asm-styler/asm-styler.pipe'; -import { AbsolutePipe } from './pipes/absolute/absolute.pipe'; -import { RelativeUrlPipe } from './pipes/relative-url/relative-url.pipe'; -import { ScriptpubkeyTypePipe } from './pipes/scriptpubkey-type-pipe/scriptpubkey-type.pipe'; -import { BytesPipe } from './pipes/bytes-pipe/bytes.pipe'; -import { WuBytesPipe } from './pipes/bytes-pipe/wubytes.pipe'; -import { FiatCurrencyPipe } from './pipes/fiat-currency.pipe'; -import { HttpErrorPipe } from './pipes/http-error-pipe/http-error.pipe'; -import { BlockchainComponent } from '../components/blockchain/blockchain.component'; -import { TimeComponent } from '../components/time/time.component'; -import { ClipboardComponent } from '../components/clipboard/clipboard.component'; -import { QrcodeComponent } from '../components/qrcode/qrcode.component'; -import { FiatComponent } from '../fiat/fiat.component'; +import { MenuComponent } from '@components/menu/menu.component'; +import { PreviewTitleComponent } from '@components/master-page-preview/preview-title.component'; +import { VbytesPipe } from '@app/shared/pipes/bytes-pipe/vbytes.pipe'; +import { ShortenStringPipe } from '@app/shared/pipes/shorten-string-pipe/shorten-string.pipe'; +import { CeilPipe } from '@app/shared/pipes/math-ceil/math-ceil.pipe'; +import { Hex2asciiPipe } from '@app/shared/pipes/hex2ascii/hex2ascii.pipe'; +import { Decimal2HexPipe } from '@app/shared/pipes/decimal2hex/decimal2hex.pipe'; +import { FeeRoundingPipe } from '@app/shared/pipes/fee-rounding/fee-rounding.pipe'; +import { AsmStylerPipe } from '@app/shared/pipes/asm-styler/asm-styler.pipe'; +import { AbsolutePipe } from '@app/shared/pipes/absolute/absolute.pipe'; +import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; +import { ScriptpubkeyTypePipe } from '@app/shared/pipes/scriptpubkey-type-pipe/scriptpubkey-type.pipe'; +import { BytesPipe } from '@app/shared/pipes/bytes-pipe/bytes.pipe'; +import { WuBytesPipe } from '@app/shared/pipes/bytes-pipe/wubytes.pipe'; +import { FiatCurrencyPipe } from '@app/shared/pipes/fiat-currency.pipe'; +import { HttpErrorPipe } from '@app/shared/pipes/http-error-pipe/http-error.pipe'; +import { BlockchainComponent } from '@components/blockchain/blockchain.component'; +import { TimeComponent } from '@components/time/time.component'; +import { ClipboardComponent } from '@components/clipboard/clipboard.component'; +import { QrcodeComponent } from '@components/qrcode/qrcode.component'; +import { FiatComponent } from '@app/fiat/fiat.component'; import { NgbNavModule, NgbTooltipModule, NgbPaginationModule, NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap'; -import { TxFeaturesComponent } from '../components/tx-features/tx-features.component'; -import { TxFeeRatingComponent } from '../components/tx-fee-rating/tx-fee-rating.component'; +import { TxFeaturesComponent } from '@components/tx-features/tx-features.component'; +import { TxFeeRatingComponent } from '@components/tx-fee-rating/tx-fee-rating.component'; import { ReactiveFormsModule } from '@angular/forms'; -import { LanguageSelectorComponent } from '../components/language-selector/language-selector.component'; -import { FiatSelectorComponent } from '../components/fiat-selector/fiat-selector.component'; -import { RateUnitSelectorComponent } from '../components/rate-unit-selector/rate-unit-selector.component'; -import { ThemeSelectorComponent } from '../components/theme-selector/theme-selector.component'; -import { AmountSelectorComponent } from '../components/amount-selector/amount-selector.component'; -import { BrowserOnlyDirective } from './directives/browser-only.directive'; -import { ServerOnlyDirective } from './directives/server-only.directive'; -import { ColoredPriceDirective } from './directives/colored-price.directive'; -import { NoSanitizePipe } from './pipes/no-sanitize.pipe'; -import { MempoolBlocksComponent } from '../components/mempool-blocks/mempool-blocks.component'; -import { BlockchainBlocksComponent } from '../components/blockchain-blocks/blockchain-blocks.component'; -import { AmountComponent } from '../components/amount/amount.component'; +import { LanguageSelectorComponent } from '@components/language-selector/language-selector.component'; +import { FiatSelectorComponent } from '@components/fiat-selector/fiat-selector.component'; +import { RateUnitSelectorComponent } from '@components/rate-unit-selector/rate-unit-selector.component'; +import { ThemeSelectorComponent } from '@components/theme-selector/theme-selector.component'; +import { AmountSelectorComponent } from '@components/amount-selector/amount-selector.component'; +import { BrowserOnlyDirective } from '@app/shared/directives/browser-only.directive'; +import { ServerOnlyDirective } from '@app/shared/directives/server-only.directive'; +import { ColoredPriceDirective } from '@app/shared/directives/colored-price.directive'; +import { NoSanitizePipe } from '@app/shared/pipes/no-sanitize.pipe'; +import { MempoolBlocksComponent } from '@components/mempool-blocks/mempool-blocks.component'; +import { BlockchainBlocksComponent } from '@components/blockchain-blocks/blockchain-blocks.component'; +import { AmountComponent } from '@components/amount/amount.component'; import { RouterModule } from '@angular/router'; -import { CapAddressPipe } from './pipes/cap-address-pipe/cap-address-pipe'; -import { StartComponent } from '../components/start/start.component'; -import { TransactionsListComponent } from '../components/transactions-list/transactions-list.component'; -import { BlockOverviewGraphComponent } from '../components/block-overview-graph/block-overview-graph.component'; -import { BlockOverviewTooltipComponent } from '../components/block-overview-tooltip/block-overview-tooltip.component'; -import { BlockFiltersComponent } from '../components/block-filters/block-filters.component'; -import { AddressGroupComponent } from '../components/address-group/address-group.component'; -import { SearchFormComponent } from '../components/search-form/search-form.component'; -import { AddressLabelsComponent } from '../components/address-labels/address-labels.component'; -import { FooterComponent } from '../components/footer/footer.component'; -import { AssetComponent } from '../components/asset/asset.component'; -import { AssetsComponent } from '../components/assets/assets.component'; -import { AssetsNavComponent } from '../components/assets/assets-nav/assets-nav.component'; -import { StatusViewComponent } from '../components/status-view/status-view.component'; -import { ServerHealthComponent } from '../components/server-health/server-health.component'; -import { ServerStatusComponent } from '../components/server-health/server-status.component'; -import { FeesBoxComponent } from '../components/fees-box/fees-box.component'; -import { DifficultyComponent } from '../components/difficulty/difficulty.component'; -import { DifficultyTooltipComponent } from '../components/difficulty/difficulty-tooltip.component'; -import { DifficultyMiningComponent } from '../components/difficulty-mining/difficulty-mining.component'; -import { BalanceWidgetComponent } from '../components/balance-widget/balance-widget.component'; -import { AddressTransactionsWidgetComponent } from '../components/address-transactions-widget/address-transactions-widget.component'; -import { RbfTimelineComponent } from '../components/rbf-timeline/rbf-timeline.component'; -import { AccelerationTimelineComponent } from '../components/acceleration-timeline/acceleration-timeline.component'; -import { RbfTimelineTooltipComponent } from '../components/rbf-timeline/rbf-timeline-tooltip.component'; -import { AccelerationTimelineTooltipComponent } from '../components/acceleration-timeline/acceleration-timeline-tooltip.component'; -import { PushTransactionComponent } from '../components/push-transaction/push-transaction.component'; -import { TestTransactionsComponent } from '../components/test-transactions/test-transactions.component'; -import { AssetsFeaturedComponent } from '../components/assets/assets-featured/assets-featured.component'; -import { AssetGroupComponent } from '../components/assets/asset-group/asset-group.component'; -import { AssetCirculationComponent } from '../components/asset-circulation/asset-circulation.component'; -import { AmountShortenerPipe } from '../shared/pipes/amount-shortener.pipe'; -import { DifficultyAdjustmentsTable } from '../components/difficulty-adjustments-table/difficulty-adjustments-table.components'; -import { BlocksList } from '../components/blocks-list/blocks-list.component'; -import { RbfList } from '../components/rbf-list/rbf-list.component'; -import { RewardStatsComponent } from '../components/reward-stats/reward-stats.component'; -import { DataCyDirective } from '../data-cy.directive'; -import { LoadingIndicatorComponent } from '../components/loading-indicator/loading-indicator.component'; -import { IndexingProgressComponent } from '../components/indexing-progress/indexing-progress.component'; -import { SvgImagesComponent } from '../components/svg-images/svg-images.component'; -import { ChangeComponent } from '../components/change/change.component'; -import { SatsComponent } from './components/sats/sats.component'; -import { BtcComponent } from './components/btc/btc.component'; -import { FeeRateComponent } from './components/fee-rate/fee-rate.component'; -import { AddressTypeComponent } from './components/address-type/address-type.component'; -import { TruncateComponent } from './components/truncate/truncate.component'; -import { SearchResultsComponent } from '../components/search-form/search-results/search-results.component'; -import { TimestampComponent } from './components/timestamp/timestamp.component'; -import { ConfirmationsComponent } from './components/confirmations/confirmations.component'; -import { ToggleComponent } from './components/toggle/toggle.component'; -import { GeolocationComponent } from '../shared/components/geolocation/geolocation.component'; -import { TestnetAlertComponent } from './components/testnet-alert/testnet-alert.component'; -import { GlobalFooterComponent } from './components/global-footer/global-footer.component'; -import { MempoolErrorComponent } from './components/mempool-error/mempool-error.component'; -import { AccelerationsListComponent } from '../components/acceleration/accelerations-list/accelerations-list.component'; -import { PendingStatsComponent } from '../components/acceleration/pending-stats/pending-stats.component'; -import { AccelerationStatsComponent } from '../components/acceleration/acceleration-stats/acceleration-stats.component'; -import { AccelerationSparklesComponent } from '../components/acceleration/sparkles/acceleration-sparkles.component'; -import { OrdDataComponent } from '../components/ord-data/ord-data.component'; +import { CapAddressPipe } from '@app/shared/pipes/cap-address-pipe/cap-address-pipe'; +import { StartComponent } from '@components/start/start.component'; +import { TransactionsListComponent } from '@components/transactions-list/transactions-list.component'; +import { BlockOverviewGraphComponent } from '@components/block-overview-graph/block-overview-graph.component'; +import { BlockOverviewTooltipComponent } from '@components/block-overview-tooltip/block-overview-tooltip.component'; +import { BlockFiltersComponent } from '@components/block-filters/block-filters.component'; +import { AddressGroupComponent } from '@components/address-group/address-group.component'; +import { SearchFormComponent } from '@components/search-form/search-form.component'; +import { AddressLabelsComponent } from '@components/address-labels/address-labels.component'; +import { FooterComponent } from '@components/footer/footer.component'; +import { AssetComponent } from '@components/asset/asset.component'; +import { AssetsComponent } from '@components/assets/assets.component'; +import { AssetsNavComponent } from '@components/assets/assets-nav/assets-nav.component'; +import { StatusViewComponent } from '@components/status-view/status-view.component'; +import { ServerHealthComponent } from '@components/server-health/server-health.component'; +import { ServerStatusComponent } from '@components/server-health/server-status.component'; +import { FeesBoxComponent } from '@components/fees-box/fees-box.component'; +import { DifficultyComponent } from '@components/difficulty/difficulty.component'; +import { DifficultyTooltipComponent } from '@components/difficulty/difficulty-tooltip.component'; +import { DifficultyMiningComponent } from '@components/difficulty-mining/difficulty-mining.component'; +import { BalanceWidgetComponent } from '@components/balance-widget/balance-widget.component'; +import { AddressTransactionsWidgetComponent } from '@components/address-transactions-widget/address-transactions-widget.component'; +import { RbfTimelineComponent } from '@components/rbf-timeline/rbf-timeline.component'; +import { AccelerationTimelineComponent } from '@components/acceleration-timeline/acceleration-timeline.component'; +import { RbfTimelineTooltipComponent } from '@components/rbf-timeline/rbf-timeline-tooltip.component'; +import { AccelerationTimelineTooltipComponent } from '@components/acceleration-timeline/acceleration-timeline-tooltip.component'; +import { PushTransactionComponent } from '@components/push-transaction/push-transaction.component'; +import { TestTransactionsComponent } from '@components/test-transactions/test-transactions.component'; +import { AssetsFeaturedComponent } from '@components/assets/assets-featured/assets-featured.component'; +import { AssetGroupComponent } from '@components/assets/asset-group/asset-group.component'; +import { AssetCirculationComponent } from '@components/asset-circulation/asset-circulation.component'; +import { AmountShortenerPipe } from '@app/shared/pipes/amount-shortener.pipe'; +import { DifficultyAdjustmentsTable } from '@components/difficulty-adjustments-table/difficulty-adjustments-table.components'; +import { BlocksList } from '@components/blocks-list/blocks-list.component'; +import { RbfList } from '@components/rbf-list/rbf-list.component'; +import { RewardStatsComponent } from '@components/reward-stats/reward-stats.component'; +import { DataCyDirective } from '@app/data-cy.directive'; +import { LoadingIndicatorComponent } from '@components/loading-indicator/loading-indicator.component'; +import { IndexingProgressComponent } from '@components/indexing-progress/indexing-progress.component'; +import { SvgImagesComponent } from '@components/svg-images/svg-images.component'; +import { ChangeComponent } from '@components/change/change.component'; +import { SatsComponent } from '@app/shared/components/sats/sats.component'; +import { BtcComponent } from '@app/shared/components/btc/btc.component'; +import { FeeRateComponent } from '@app/shared/components/fee-rate/fee-rate.component'; +import { AddressTypeComponent } from '@app/shared/components/address-type/address-type.component'; +import { TruncateComponent } from '@app/shared/components/truncate/truncate.component'; +import { SearchResultsComponent } from '@components/search-form/search-results/search-results.component'; +import { TimestampComponent } from '@app/shared/components/timestamp/timestamp.component'; +import { ConfirmationsComponent } from '@app/shared/components/confirmations/confirmations.component'; +import { ToggleComponent } from '@app/shared/components/toggle/toggle.component'; +import { GeolocationComponent } from '@app/shared/components/geolocation/geolocation.component'; +import { TestnetAlertComponent } from '@app/shared/components/testnet-alert/testnet-alert.component'; +import { GlobalFooterComponent } from '@app/shared/components/global-footer/global-footer.component'; +import { MempoolErrorComponent } from '@app/shared/components/mempool-error/mempool-error.component'; +import { AccelerationsListComponent } from '@components/acceleration/accelerations-list/accelerations-list.component'; +import { PendingStatsComponent } from '@components/acceleration/pending-stats/pending-stats.component'; +import { AccelerationStatsComponent } from '@components/acceleration/acceleration-stats/acceleration-stats.component'; +import { AccelerationSparklesComponent } from '@components/acceleration/sparkles/acceleration-sparkles.component'; +import { OrdDataComponent } from '@components/ord-data/ord-data.component'; -import { BlockViewComponent } from '../components/block-view/block-view.component'; -import { EightBlocksComponent } from '../components/eight-blocks/eight-blocks.component'; -import { MempoolBlockViewComponent } from '../components/mempool-block-view/mempool-block-view.component'; -import { MempoolBlockOverviewComponent } from '../components/mempool-block-overview/mempool-block-overview.component'; -import { ClockchainComponent } from '../components/clockchain/clockchain.component'; -import { ClockFaceComponent } from '../components/clock-face/clock-face.component'; -import { ClockComponent } from '../components/clock/clock.component'; -import { CalculatorComponent } from '../components/calculator/calculator.component'; -import { BitcoinsatoshisPipe } from '../shared/pipes/bitcoinsatoshis.pipe'; -import { HttpErrorComponent } from '../shared/components/http-error/http-error.component'; -import { TwitterWidgetComponent } from '../components/twitter-widget/twitter-widget.component'; -import { FaucetComponent } from '../components/faucet/faucet.component'; -import { TwitterLogin } from '../components/twitter-login/twitter-login.component'; -import { BitcoinInvoiceComponent } from '../components/bitcoin-invoice/bitcoin-invoice.component'; +import { BlockViewComponent } from '@components/block-view/block-view.component'; +import { EightBlocksComponent } from '@components/eight-blocks/eight-blocks.component'; +import { MempoolBlockViewComponent } from '@components/mempool-block-view/mempool-block-view.component'; +import { MempoolBlockOverviewComponent } from '@components/mempool-block-overview/mempool-block-overview.component'; +import { ClockchainComponent } from '@components/clockchain/clockchain.component'; +import { ClockFaceComponent } from '@components/clock-face/clock-face.component'; +import { ClockComponent } from '@components/clock/clock.component'; +import { CalculatorComponent } from '@components/calculator/calculator.component'; +import { BitcoinsatoshisPipe } from '@app/shared/pipes/bitcoinsatoshis.pipe'; +import { HttpErrorComponent } from '@app/shared/components/http-error/http-error.component'; +import { TwitterWidgetComponent } from '@components/twitter-widget/twitter-widget.component'; +import { FaucetComponent } from '@components/faucet/faucet.component'; +import { TwitterLogin } from '@components/twitter-login/twitter-login.component'; +import { BitcoinInvoiceComponent } from '@components/bitcoin-invoice/bitcoin-invoice.component'; -import { OnlyVsizeDirective, OnlyWeightDirective } from './components/weight-directives/weight-directives'; +import { OnlyVsizeDirective, OnlyWeightDirective } from '@app/shared/components/weight-directives/weight-directives'; @NgModule({ declarations: [ diff --git a/frontend/src/app/shared/transaction.utils.ts b/frontend/src/app/shared/transaction.utils.ts index bbf28a250..1a833b28b 100644 --- a/frontend/src/app/shared/transaction.utils.ts +++ b/frontend/src/app/shared/transaction.utils.ts @@ -1,8 +1,8 @@ import { TransactionFlags } from './filters.utils'; import { getVarIntLength, opcodes, parseMultisigScript, isPoint } from './script.utils'; -import { Transaction } from '../interfaces/electrs.interface'; -import { CpfpInfo, RbfInfo, TransactionStripped } from '../interfaces/node-api.interface'; -import { StateService } from '../services/state.service'; +import { Transaction } from '@app/interfaces/electrs.interface'; +import { CpfpInfo, RbfInfo, TransactionStripped } from '@app/interfaces/node-api.interface'; +import { StateService } from '@app/services/state.service'; // Bitcoin Core default policy settings const MAX_STANDARD_TX_WEIGHT = 400_000; @@ -587,4 +587,4 @@ export function identifyPrioritizedTransactions(transactions: TransactionStrippe } return { prioritized, deprioritized }; -} \ No newline at end of file +} diff --git a/frontend/tsconfig.app.json b/frontend/tsconfig.app.json index 44795bd55..2e95ae1e2 100644 --- a/frontend/tsconfig.app.json +++ b/frontend/tsconfig.app.json @@ -2,7 +2,12 @@ "extends": "./tsconfig.base.json", "compilerOptions": { "outDir": "./out-tsc/app", - "types": [] + "types": [], + "paths": { + "@app/*" : ["src/app/*"], + "@components/*" : ["src/app/components/*"], + "@environments/*" : ["src/environments/*"] + } }, "files": [ "src/main.ts", From 221658f6bf69ee678db0e5b26b61ac26dcc81d05 Mon Sep 17 00:00:00 2001 From: wiz Date: Wed, 23 Oct 2024 11:09:38 +0900 Subject: [PATCH 135/147] Change @app/interfaces to new @interfaces path alias --- frontend/src/app/bitcoin.utils.ts | 2 +- frontend/src/app/components/about/about.component.ts | 4 ++-- .../accelerate-checkout/accelerate-checkout.component.ts | 2 +- .../accelerate-checkout/accelerate-fee-graph.component.ts | 2 +- .../acceleration-timeline.component.ts | 4 ++-- .../acceleration-fees-graph.component.ts | 2 +- .../accelerations-list/accelerations-list.component.ts | 2 +- .../accelerator-dashboard.component.ts | 2 +- .../active-acceleration-box.component.ts | 4 ++-- .../acceleration/pending-stats/pending-stats.component.ts | 2 +- .../app/components/address-graph/address-graph.component.ts | 2 +- .../app/components/address-group/address-group.component.ts | 4 ++-- .../components/address-labels/address-labels.component.ts | 2 +- .../address-transactions-widget.component.ts | 2 +- .../src/app/components/address/address-preview.component.ts | 4 ++-- frontend/src/app/components/address/address.component.ts | 4 ++-- .../addresses-treemap/addresses-treemap.component.ts | 2 +- frontend/src/app/components/asset/asset.component.ts | 2 +- .../components/assets/assets-nav/assets-nav.component.ts | 2 +- frontend/src/app/components/assets/assets.component.ts | 2 +- .../components/balance-widget/balance-widget.component.ts | 2 +- .../block-overview-graph/block-overview-graph.component.ts | 2 +- .../src/app/components/block-overview-graph/block-scene.ts | 2 +- frontend/src/app/components/block-overview-graph/tx-view.ts | 2 +- .../block-overview-tooltip.component.ts | 4 ++-- .../src/app/components/block-view/block-view.component.ts | 2 +- .../src/app/components/block/block-preview.component.ts | 2 +- .../app/components/block/block-transactions.component.ts | 2 +- frontend/src/app/components/block/block.component.ts | 2 +- .../blockchain-blocks/blockchain-blocks.component.ts | 2 +- .../src/app/components/blocks-list/blocks-list.component.ts | 2 +- frontend/src/app/components/clock/clock.component.ts | 4 ++-- .../custom-dashboard/custom-dashboard.component.ts | 6 +++--- .../app/components/eight-blocks/eight-blocks.component.ts | 2 +- .../fee-distribution-graph.component.ts | 2 +- frontend/src/app/components/fees-box/fees-box.component.ts | 2 +- frontend/src/app/components/footer/footer.component.ts | 2 +- .../expired-utxos-stats/expired-utxos-stats.component.ts | 2 +- .../federation-addresses-list.component.ts | 2 +- .../federation-utxos-list.component.ts | 2 +- .../recent-pegs-list/recent-pegs-list.component.ts | 2 +- .../recent-pegs-stats/recent-pegs-stats.component.ts | 2 +- .../reserves-ratio/reserves-ratio.component.ts | 2 +- .../reserves-supply-stats.component.ts | 2 +- .../mempool-block-overview.component.ts | 4 ++-- .../app/components/mempool-block/mempool-block.component.ts | 4 ++-- .../components/mempool-blocks/mempool-blocks.component.ts | 4 ++-- .../app/components/mempool-graph/mempool-graph.component.ts | 2 +- frontend/src/app/components/menu/menu.component.ts | 2 +- frontend/src/app/components/pool/pool-preview.component.ts | 2 +- frontend/src/app/components/pool/pool.component.ts | 2 +- .../push-transaction/push-transaction.component.ts | 2 +- frontend/src/app/components/rbf-list/rbf-list.component.ts | 2 +- .../rbf-timeline/rbf-timeline-tooltip.component.ts | 2 +- .../app/components/rbf-timeline/rbf-timeline.component.ts | 2 +- .../app/components/server-health/server-health.component.ts | 2 +- .../app/components/server-health/server-status.component.ts | 2 +- frontend/src/app/components/start/start.component.ts | 2 +- .../src/app/components/statistics/statistics.component.ts | 2 +- .../src/app/components/television/television.component.ts | 2 +- .../test-transactions/test-transactions.component.ts | 2 +- frontend/src/app/components/tracker/tracker.component.ts | 4 ++-- frontend/src/app/components/transaction/liquid-ublinding.ts | 2 +- .../components/transaction/transaction-preview.component.ts | 4 ++-- .../src/app/components/transaction/transaction.component.ts | 4 ++-- .../transactions-list/transactions-list.component.ts | 4 ++-- .../components/tx-bowtie-graph/tx-bowtie-graph.component.ts | 2 +- .../src/app/components/tx-features/tx-features.component.ts | 2 +- .../app/components/tx-fee-rating/tx-fee-rating.component.ts | 4 ++-- .../src/app/components/utxo-graph/utxo-graph.component.ts | 2 +- frontend/src/app/components/wallet/wallet.component.ts | 4 ++-- frontend/src/app/dashboard/dashboard.component.ts | 4 ++-- frontend/src/app/interfaces/electrs.interface.ts | 2 +- frontend/src/app/interfaces/websocket.interface.ts | 2 +- frontend/src/app/lightning/channel/channel.component.ts | 2 +- .../channels-statistics/channels-statistics.component.ts | 2 +- .../app/lightning/justice-list/justice-list.component.ts | 4 ++-- frontend/src/app/lightning/lightning-api.service.ts | 2 +- .../lightning-dashboard/lightning-dashboard.component.ts | 2 +- .../lightning/node-statistics/node-statistics.component.ts | 2 +- .../app/lightning/nodes-ranking/nodes-ranking.component.ts | 2 +- .../nodes-ranking/oldest-nodes/oldest-nodes.component.ts | 2 +- .../top-nodes-per-capacity.component.ts | 2 +- .../top-nodes-per-channels.component.ts | 2 +- .../nodes-rankings-dashboard.component.ts | 2 +- frontend/src/app/services/api.service.ts | 4 ++-- frontend/src/app/services/assets.service.ts | 2 +- frontend/src/app/services/cache.service.ts | 4 ++-- frontend/src/app/services/electrs-api.service.ts | 2 +- frontend/src/app/services/eta.service.ts | 6 +++--- frontend/src/app/services/mining.service.ts | 2 +- frontend/src/app/services/ord-api.service.ts | 2 +- frontend/src/app/services/services-api.service.ts | 6 +++--- frontend/src/app/services/state.service.ts | 6 +++--- frontend/src/app/services/websocket.service.ts | 4 ++-- frontend/src/app/shared/address-utils.ts | 2 +- frontend/src/app/shared/common.utils.ts | 2 +- .../components/global-footer/global-footer.component.ts | 2 +- frontend/src/app/shared/ord/rune.utils.ts | 2 +- frontend/src/app/shared/transaction.utils.ts | 4 ++-- frontend/tsconfig.app.json | 3 ++- 101 files changed, 133 insertions(+), 132 deletions(-) diff --git a/frontend/src/app/bitcoin.utils.ts b/frontend/src/app/bitcoin.utils.ts index 57f952301..b949cde3c 100644 --- a/frontend/src/app/bitcoin.utils.ts +++ b/frontend/src/app/bitcoin.utils.ts @@ -1,4 +1,4 @@ -import { Transaction, Vin } from '@app/interfaces/electrs.interface'; +import { Transaction, Vin } from '@interfaces/electrs.interface'; import { Hash } from '@app/shared/sha256'; const P2SH_P2WPKH_COST = 21 * 4; // the WU cost for the non-witness part of P2SH-P2WPKH diff --git a/frontend/src/app/components/about/about.component.ts b/frontend/src/app/components/about/about.component.ts index d07535708..5963c371c 100644 --- a/frontend/src/app/components/about/about.component.ts +++ b/frontend/src/app/components/about/about.component.ts @@ -5,10 +5,10 @@ import { OpenGraphService } from '@app/services/opengraph.service'; import { StateService } from '@app/services/state.service'; import { Observable } from 'rxjs'; import { ApiService } from '@app/services/api.service'; -import { IBackendInfo } from '@app/interfaces/websocket.interface'; +import { IBackendInfo } from '@interfaces/websocket.interface'; import { Router, ActivatedRoute } from '@angular/router'; import { map, share, tap } from 'rxjs/operators'; -import { ITranslators } from '@app/interfaces/node-api.interface'; +import { ITranslators } from '@interfaces/node-api.interface'; import { DOCUMENT } from '@angular/common'; import { EnterpriseService } from '@app/services/enterprise.service'; diff --git a/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts b/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts index ad76ee8ae..e41fdc13e 100644 --- a/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts +++ b/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts @@ -6,7 +6,7 @@ import { md5, insecureRandomUUID } from '@app/shared/common.utils'; import { StateService } from '@app/services/state.service'; import { AudioService } from '@app/services/audio.service'; import { ETA, EtaService } from '@app/services/eta.service'; -import { Transaction } from '@app/interfaces/electrs.interface'; +import { Transaction } from '@interfaces/electrs.interface'; import { MiningStats } from '@app/services/mining.service'; import { IAuth, AuthServiceMempool } from '@app/services/auth.service'; import { EnterpriseService } from '@app/services/enterprise.service'; diff --git a/frontend/src/app/components/accelerate-checkout/accelerate-fee-graph.component.ts b/frontend/src/app/components/accelerate-checkout/accelerate-fee-graph.component.ts index 16c1a3aa8..5890e6582 100644 --- a/frontend/src/app/components/accelerate-checkout/accelerate-fee-graph.component.ts +++ b/frontend/src/app/components/accelerate-checkout/accelerate-fee-graph.component.ts @@ -1,5 +1,5 @@ import { Component, Input, Output, OnChanges, EventEmitter, HostListener, OnInit, ViewChild, ElementRef, AfterViewInit, OnDestroy, ChangeDetectorRef } from '@angular/core'; -import { Transaction } from '@app/interfaces/electrs.interface'; +import { Transaction } from '@interfaces/electrs.interface'; import { AccelerationEstimate, RateOption } from '@components/accelerate-checkout/accelerate-checkout.component'; interface GraphBar { diff --git a/frontend/src/app/components/acceleration-timeline/acceleration-timeline.component.ts b/frontend/src/app/components/acceleration-timeline/acceleration-timeline.component.ts index 26ddaf260..728992212 100644 --- a/frontend/src/app/components/acceleration-timeline/acceleration-timeline.component.ts +++ b/frontend/src/app/components/acceleration-timeline/acceleration-timeline.component.ts @@ -1,7 +1,7 @@ import { Component, Input, OnInit, OnChanges, HostListener } from '@angular/core'; import { ETA } from '@app/services/eta.service'; -import { Transaction } from '@app/interfaces/electrs.interface'; -import { Acceleration, SinglePoolStats } from '@app/interfaces/node-api.interface'; +import { Transaction } from '@interfaces/electrs.interface'; +import { Acceleration, SinglePoolStats } from '@interfaces/node-api.interface'; import { MiningService } from '@app/services/mining.service'; @Component({ diff --git a/frontend/src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts b/frontend/src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts index cc60de95c..6a99edbf1 100644 --- a/frontend/src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts +++ b/frontend/src/app/components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component.ts @@ -9,7 +9,7 @@ import { download, formatterXAxis, formatterXAxisLabel, formatterXAxisTimeCatego import { StorageService } from '@app/services/storage.service'; import { MiningService } from '@app/services/mining.service'; import { ActivatedRoute, Router } from '@angular/router'; -import { Acceleration } from '@app/interfaces/node-api.interface'; +import { Acceleration } from '@interfaces/node-api.interface'; import { ServicesApiServices } from '@app/services/services-api.service'; import { StateService } from '@app/services/state.service'; import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; diff --git a/frontend/src/app/components/acceleration/accelerations-list/accelerations-list.component.ts b/frontend/src/app/components/acceleration/accelerations-list/accelerations-list.component.ts index 67146051d..ee5303530 100644 --- a/frontend/src/app/components/acceleration/accelerations-list/accelerations-list.component.ts +++ b/frontend/src/app/components/acceleration/accelerations-list/accelerations-list.component.ts @@ -1,6 +1,6 @@ import { Component, OnInit, ChangeDetectionStrategy, Input, ChangeDetectorRef, OnDestroy, Inject, LOCALE_ID } from '@angular/core'; import { BehaviorSubject, Observable, Subscription, catchError, combineLatest, filter, of, switchMap, tap, throttleTime, timer } from 'rxjs'; -import { Acceleration, BlockExtended, SinglePoolStats } from '@app/interfaces/node-api.interface'; +import { Acceleration, BlockExtended, SinglePoolStats } from '@interfaces/node-api.interface'; import { StateService } from '@app/services/state.service'; import { WebsocketService } from '@app/services/websocket.service'; import { ServicesApiServices } from '@app/services/services-api.service'; diff --git a/frontend/src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.ts b/frontend/src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.ts index 2977ab04d..ab7d9122e 100644 --- a/frontend/src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.ts +++ b/frontend/src/app/components/acceleration/accelerator-dashboard/accelerator-dashboard.component.ts @@ -2,7 +2,7 @@ import { ChangeDetectionStrategy, Component, HostListener, Inject, OnDestroy, On import { SeoService } from '@app/services/seo.service'; import { OpenGraphService } from '@app/services/opengraph.service'; import { WebsocketService } from '@app/services/websocket.service'; -import { Acceleration, BlockExtended } from '@app/interfaces/node-api.interface'; +import { Acceleration, BlockExtended } from '@interfaces/node-api.interface'; import { StateService } from '@app/services/state.service'; import { Observable, Subscription, catchError, combineLatest, distinctUntilChanged, map, of, share, switchMap, tap } from 'rxjs'; import { Color } from '@components/block-overview-graph/sprite-types'; diff --git a/frontend/src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.ts b/frontend/src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.ts index cd45a0d94..eae20f7e5 100644 --- a/frontend/src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.ts +++ b/frontend/src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.ts @@ -1,6 +1,6 @@ import { Component, ChangeDetectionStrategy, Input, Output, OnChanges, SimpleChanges, EventEmitter, ChangeDetectorRef } from '@angular/core'; -import { Transaction } from '@app/interfaces/electrs.interface'; -import { Acceleration, SinglePoolStats } from '@app/interfaces/node-api.interface'; +import { Transaction } from '@interfaces/electrs.interface'; +import { Acceleration, SinglePoolStats } from '@interfaces/node-api.interface'; import { EChartsOption, PieSeriesOption } from '@app/graphs/echarts'; import { MiningStats } from '@app/services/mining.service'; diff --git a/frontend/src/app/components/acceleration/pending-stats/pending-stats.component.ts b/frontend/src/app/components/acceleration/pending-stats/pending-stats.component.ts index a7ffb51da..ed63ad098 100644 --- a/frontend/src/app/components/acceleration/pending-stats/pending-stats.component.ts +++ b/frontend/src/app/components/acceleration/pending-stats/pending-stats.component.ts @@ -1,7 +1,7 @@ import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core'; import { Observable, of } from 'rxjs'; import { switchMap } from 'rxjs/operators'; -import { Acceleration } from '@app/interfaces/node-api.interface'; +import { Acceleration } from '@interfaces/node-api.interface'; import { StateService } from '@app/services/state.service'; import { WebsocketService } from '@app/services/websocket.service'; diff --git a/frontend/src/app/components/address-graph/address-graph.component.ts b/frontend/src/app/components/address-graph/address-graph.component.ts index 76a4a2836..e8762fbec 100644 --- a/frontend/src/app/components/address-graph/address-graph.component.ts +++ b/frontend/src/app/components/address-graph/address-graph.component.ts @@ -2,7 +2,7 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, Input, L import { echarts, EChartsOption } from '@app/graphs/echarts'; import { BehaviorSubject, Observable, Subscription, combineLatest, of } from 'rxjs'; import { catchError, map, switchMap, tap } from 'rxjs/operators'; -import { AddressTxSummary, ChainStats } from '@app/interfaces/electrs.interface'; +import { AddressTxSummary, ChainStats } from '@interfaces/electrs.interface'; import { ElectrsApiService } from '@app/services/electrs-api.service'; import { AmountShortenerPipe } from '@app/shared/pipes/amount-shortener.pipe'; import { Router } from '@angular/router'; diff --git a/frontend/src/app/components/address-group/address-group.component.ts b/frontend/src/app/components/address-group/address-group.component.ts index a65fc7d16..560308592 100644 --- a/frontend/src/app/components/address-group/address-group.component.ts +++ b/frontend/src/app/components/address-group/address-group.component.ts @@ -2,14 +2,14 @@ import { Component, OnInit, OnDestroy, ChangeDetectorRef, HostListener } from '@ import { ActivatedRoute, ParamMap } from '@angular/router'; import { ElectrsApiService } from '@app/services/electrs-api.service'; import { switchMap, catchError } from 'rxjs/operators'; -import { Address, Transaction } from '@app/interfaces/electrs.interface'; +import { Address, Transaction } from '@interfaces/electrs.interface'; import { WebsocketService } from '@app/services/websocket.service'; import { StateService } from '@app/services/state.service'; import { AudioService } from '@app/services/audio.service'; import { ApiService } from '@app/services/api.service'; import { of, Subscription, forkJoin } from 'rxjs'; import { SeoService } from '@app/services/seo.service'; -import { AddressInformation } from '@app/interfaces/node-api.interface'; +import { AddressInformation } from '@interfaces/node-api.interface'; @Component({ selector: 'app-address-group', diff --git a/frontend/src/app/components/address-labels/address-labels.component.ts b/frontend/src/app/components/address-labels/address-labels.component.ts index 5e1655841..0669a22e4 100644 --- a/frontend/src/app/components/address-labels/address-labels.component.ts +++ b/frontend/src/app/components/address-labels/address-labels.component.ts @@ -1,5 +1,5 @@ import { Component, ChangeDetectionStrategy, Input, OnChanges } from '@angular/core'; -import { Vin, Vout } from '@app/interfaces/electrs.interface'; +import { Vin, Vout } from '@interfaces/electrs.interface'; import { StateService } from '@app/services/state.service'; import { AddressType, AddressTypeInfo } from '@app/shared/address-utils'; diff --git a/frontend/src/app/components/address-transactions-widget/address-transactions-widget.component.ts b/frontend/src/app/components/address-transactions-widget/address-transactions-widget.component.ts index bde817b8e..ab9b124c3 100644 --- a/frontend/src/app/components/address-transactions-widget/address-transactions-widget.component.ts +++ b/frontend/src/app/components/address-transactions-widget/address-transactions-widget.component.ts @@ -1,6 +1,6 @@ import { Component, Input, OnChanges, OnDestroy, OnInit, SimpleChanges } from '@angular/core'; import { StateService } from '@app/services/state.service'; -import { Address, AddressTxSummary } from '@app/interfaces/electrs.interface'; +import { Address, AddressTxSummary } from '@interfaces/electrs.interface'; import { ElectrsApiService } from '@app/services/electrs-api.service'; import { Observable, Subscription, catchError, map, of, switchMap, zip } from 'rxjs'; import { PriceService } from '@app/services/price.service'; diff --git a/frontend/src/app/components/address/address-preview.component.ts b/frontend/src/app/components/address/address-preview.component.ts index df08ffa48..bcc328787 100644 --- a/frontend/src/app/components/address/address-preview.component.ts +++ b/frontend/src/app/components/address/address-preview.component.ts @@ -2,7 +2,7 @@ import { Component, OnInit, OnDestroy } from '@angular/core'; import { ActivatedRoute, ParamMap } from '@angular/router'; import { ElectrsApiService } from '@app/services/electrs-api.service'; import { switchMap, filter, catchError, map, tap } from 'rxjs/operators'; -import { Address, Transaction } from '@app/interfaces/electrs.interface'; +import { Address, Transaction } from '@interfaces/electrs.interface'; import { StateService } from '@app/services/state.service'; import { OpenGraphService } from '@app/services/opengraph.service'; import { AudioService } from '@app/services/audio.service'; @@ -10,7 +10,7 @@ import { ApiService } from '@app/services/api.service'; import { of, merge, Subscription, Observable } from 'rxjs'; import { SeoService } from '@app/services/seo.service'; import { seoDescriptionNetwork } from '@app/shared/common.utils'; -import { AddressInformation } from '@app/interfaces/node-api.interface'; +import { AddressInformation } from '@interfaces/node-api.interface'; @Component({ selector: 'app-address-preview', diff --git a/frontend/src/app/components/address/address.component.ts b/frontend/src/app/components/address/address.component.ts index 2245e75e8..8786f46ee 100644 --- a/frontend/src/app/components/address/address.component.ts +++ b/frontend/src/app/components/address/address.component.ts @@ -2,7 +2,7 @@ import { Component, OnInit, OnDestroy, HostListener } from '@angular/core'; import { ActivatedRoute, ParamMap } from '@angular/router'; import { ElectrsApiService } from '@app/services/electrs-api.service'; import { switchMap, filter, catchError, map, tap } from 'rxjs/operators'; -import { Address, ChainStats, Transaction, Utxo, Vin } from '@app/interfaces/electrs.interface'; +import { Address, ChainStats, Transaction, Utxo, Vin } from '@interfaces/electrs.interface'; import { WebsocketService } from '@app/services/websocket.service'; import { StateService } from '@app/services/state.service'; import { AudioService } from '@app/services/audio.service'; @@ -10,7 +10,7 @@ import { ApiService } from '@app/services/api.service'; import { of, merge, Subscription, Observable, forkJoin } from 'rxjs'; import { SeoService } from '@app/services/seo.service'; import { seoDescriptionNetwork } from '@app/shared/common.utils'; -import { AddressInformation } from '@app/interfaces/node-api.interface'; +import { AddressInformation } from '@interfaces/node-api.interface'; import { AddressTypeInfo } from '@app/shared/address-utils'; class AddressStats implements ChainStats { diff --git a/frontend/src/app/components/addresses-treemap/addresses-treemap.component.ts b/frontend/src/app/components/addresses-treemap/addresses-treemap.component.ts index 8595a8acc..5ff3cf502 100644 --- a/frontend/src/app/components/addresses-treemap/addresses-treemap.component.ts +++ b/frontend/src/app/components/addresses-treemap/addresses-treemap.component.ts @@ -6,7 +6,7 @@ import { AmountShortenerPipe } from '@app/shared/pipes/amount-shortener.pipe'; import { LightningApiService } from '@app/lightning/lightning-api.service'; import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; import { StateService } from '@app/services/state.service'; -import { Address } from '@app/interfaces/electrs.interface'; +import { Address } from '@interfaces/electrs.interface'; import { formatNumber } from '@angular/common'; @Component({ diff --git a/frontend/src/app/components/asset/asset.component.ts b/frontend/src/app/components/asset/asset.component.ts index 333e4c450..9a3a73eea 100644 --- a/frontend/src/app/components/asset/asset.component.ts +++ b/frontend/src/app/components/asset/asset.component.ts @@ -2,7 +2,7 @@ import { Component, OnInit, OnDestroy } from '@angular/core'; import { ActivatedRoute, ParamMap } from '@angular/router'; import { ElectrsApiService } from '@app/services/electrs-api.service'; import { switchMap, filter, catchError, take } from 'rxjs/operators'; -import { Asset, Transaction } from '@app/interfaces/electrs.interface'; +import { Asset, Transaction } from '@interfaces/electrs.interface'; import { WebsocketService } from '@app/services/websocket.service'; import { StateService } from '@app/services/state.service'; import { AudioService } from '@app/services/audio.service'; diff --git a/frontend/src/app/components/assets/assets-nav/assets-nav.component.ts b/frontend/src/app/components/assets/assets-nav/assets-nav.component.ts index 5ec2888c1..fb280631a 100644 --- a/frontend/src/app/components/assets/assets-nav/assets-nav.component.ts +++ b/frontend/src/app/components/assets/assets-nav/assets-nav.component.ts @@ -4,7 +4,7 @@ import { Router } from '@angular/router'; import { NgbTypeahead } from '@ng-bootstrap/ng-bootstrap'; import { merge, Observable, of, Subject } from 'rxjs'; import { distinctUntilChanged, filter, map, switchMap } from 'rxjs/operators'; -import { AssetExtended } from '@app/interfaces/electrs.interface'; +import { AssetExtended } from '@interfaces/electrs.interface'; import { AssetsService } from '@app/services/assets.service'; import { SeoService } from '@app/services/seo.service'; import { StateService } from '@app/services/state.service'; diff --git a/frontend/src/app/components/assets/assets.component.ts b/frontend/src/app/components/assets/assets.component.ts index 428fd2edd..6a573fcd6 100644 --- a/frontend/src/app/components/assets/assets.component.ts +++ b/frontend/src/app/components/assets/assets.component.ts @@ -5,7 +5,7 @@ import { UntypedFormGroup } from '@angular/forms'; import { filter, map, switchMap, take } from 'rxjs/operators'; import { ActivatedRoute, Router } from '@angular/router'; import { combineLatest, Observable } from 'rxjs'; -import { AssetExtended } from '@app/interfaces/electrs.interface'; +import { AssetExtended } from '@interfaces/electrs.interface'; import { SeoService } from '@app/services/seo.service'; import { StateService } from '@app/services/state.service'; diff --git a/frontend/src/app/components/balance-widget/balance-widget.component.ts b/frontend/src/app/components/balance-widget/balance-widget.component.ts index 5f0bb2e52..bd92a2eb9 100644 --- a/frontend/src/app/components/balance-widget/balance-widget.component.ts +++ b/frontend/src/app/components/balance-widget/balance-widget.component.ts @@ -1,6 +1,6 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core'; import { StateService } from '@app/services/state.service'; -import { Address, AddressTxSummary } from '@app/interfaces/electrs.interface'; +import { Address, AddressTxSummary } from '@interfaces/electrs.interface'; import { ElectrsApiService } from '@app/services/electrs-api.service'; import { Observable, catchError, of } from 'rxjs'; diff --git a/frontend/src/app/components/block-overview-graph/block-overview-graph.component.ts b/frontend/src/app/components/block-overview-graph/block-overview-graph.component.ts index 007b2da62..0a76b3242 100644 --- a/frontend/src/app/components/block-overview-graph/block-overview-graph.component.ts +++ b/frontend/src/app/components/block-overview-graph/block-overview-graph.component.ts @@ -1,5 +1,5 @@ import { Component, ElementRef, ViewChild, HostListener, Input, Output, EventEmitter, NgZone, AfterViewInit, OnDestroy, OnChanges } from '@angular/core'; -import { TransactionStripped } from '@app/interfaces/node-api.interface'; +import { TransactionStripped } from '@interfaces/node-api.interface'; import { FastVertexArray } from './fast-vertex-array'; import BlockScene from './block-scene'; import TxSprite from './tx-sprite'; diff --git a/frontend/src/app/components/block-overview-graph/block-scene.ts b/frontend/src/app/components/block-overview-graph/block-scene.ts index ff507ad64..3606cbca6 100644 --- a/frontend/src/app/components/block-overview-graph/block-scene.ts +++ b/frontend/src/app/components/block-overview-graph/block-scene.ts @@ -1,6 +1,6 @@ import { FastVertexArray } from './fast-vertex-array'; import TxView from './tx-view'; -import { TransactionStripped } from '@app/interfaces/node-api.interface'; +import { TransactionStripped } from '@interfaces/node-api.interface'; import { Color, Position, Square, ViewUpdateParams } from './sprite-types'; import { defaultColorFunction, contrastColorFunction } from './utils'; import { ThemeService } from '@app/services/theme.service'; diff --git a/frontend/src/app/components/block-overview-graph/tx-view.ts b/frontend/src/app/components/block-overview-graph/tx-view.ts index 55831e4c7..b09a0d3e6 100644 --- a/frontend/src/app/components/block-overview-graph/tx-view.ts +++ b/frontend/src/app/components/block-overview-graph/tx-view.ts @@ -3,7 +3,7 @@ import { FastVertexArray } from './fast-vertex-array'; import { SpriteUpdateParams, Square, Color, ViewUpdateParams } from './sprite-types'; import { hexToColor } from './utils'; import BlockScene from './block-scene'; -import { TransactionStripped } from '@app/interfaces/node-api.interface'; +import { TransactionStripped } from '@interfaces/node-api.interface'; import { TransactionFlags } from '@app/shared/filters.utils'; const hoverTransitionTime = 300; diff --git a/frontend/src/app/components/block-overview-tooltip/block-overview-tooltip.component.ts b/frontend/src/app/components/block-overview-tooltip/block-overview-tooltip.component.ts index 580a6f8ad..ffff1b5ed 100644 --- a/frontend/src/app/components/block-overview-tooltip/block-overview-tooltip.component.ts +++ b/frontend/src/app/components/block-overview-tooltip/block-overview-tooltip.component.ts @@ -1,9 +1,9 @@ import { Component, ElementRef, ViewChild, Input, OnChanges, ChangeDetectionStrategy, ChangeDetectorRef } from '@angular/core'; import { Position } from '@components/block-overview-graph/sprite-types.js'; import { Price } from '@app/services/price.service'; -import { TransactionStripped } from '@app/interfaces/node-api.interface.js'; +import { TransactionStripped } from '@interfaces/node-api.interface.js'; import { Filter, FilterMode, TransactionFlags, toFilters } from '@app/shared/filters.utils'; -import { Block } from '@app/interfaces/electrs.interface.js'; +import { Block } from '@interfaces/electrs.interface.js'; @Component({ selector: 'app-block-overview-tooltip', diff --git a/frontend/src/app/components/block-view/block-view.component.ts b/frontend/src/app/components/block-view/block-view.component.ts index a901b40ab..b5d5256ee 100644 --- a/frontend/src/app/components/block-view/block-view.component.ts +++ b/frontend/src/app/components/block-view/block-view.component.ts @@ -5,7 +5,7 @@ import { switchMap, tap, catchError, shareReplay, filter } from 'rxjs/operators' import { of, Subscription } from 'rxjs'; import { StateService } from '@app/services/state.service'; import { SeoService } from '@app/services/seo.service'; -import { BlockExtended, TransactionStripped } from '@app/interfaces/node-api.interface'; +import { BlockExtended, TransactionStripped } from '@interfaces/node-api.interface'; import { ApiService } from '@app/services/api.service'; import { seoDescriptionNetwork } from '@app/shared/common.utils'; import { BlockOverviewGraphComponent } from '@components/block-overview-graph/block-overview-graph.component'; diff --git a/frontend/src/app/components/block/block-preview.component.ts b/frontend/src/app/components/block/block-preview.component.ts index 174da7c67..b2fc3fb6f 100644 --- a/frontend/src/app/components/block/block-preview.component.ts +++ b/frontend/src/app/components/block/block-preview.component.ts @@ -6,7 +6,7 @@ import { of, Subscription, asyncScheduler, forkJoin } from 'rxjs'; import { StateService } from '@app/services/state.service'; import { SeoService } from '@app/services/seo.service'; import { OpenGraphService } from '@app/services/opengraph.service'; -import { BlockExtended, TransactionStripped } from '@app/interfaces/node-api.interface'; +import { BlockExtended, TransactionStripped } from '@interfaces/node-api.interface'; import { ApiService } from '@app/services/api.service'; import { seoDescriptionNetwork } from '@app/shared/common.utils'; import { BlockOverviewGraphComponent } from '@components/block-overview-graph/block-overview-graph.component'; diff --git a/frontend/src/app/components/block/block-transactions.component.ts b/frontend/src/app/components/block/block-transactions.component.ts index f8c63f676..170d8297d 100644 --- a/frontend/src/app/components/block/block-transactions.component.ts +++ b/frontend/src/app/components/block/block-transactions.component.ts @@ -1,6 +1,6 @@ import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core'; import { StateService } from '@app/services/state.service'; -import { Transaction, Vout } from '@app/interfaces/electrs.interface'; +import { Transaction, Vout } from '@interfaces/electrs.interface'; import { Observable, Subscription, catchError, combineLatest, map, of, startWith, switchMap, tap } from 'rxjs'; import { ActivatedRoute, Router } from '@angular/router'; import { ElectrsApiService } from '@app/services/electrs-api.service'; diff --git a/frontend/src/app/components/block/block.component.ts b/frontend/src/app/components/block/block.component.ts index 83c86b99a..dab3c00fa 100644 --- a/frontend/src/app/components/block/block.component.ts +++ b/frontend/src/app/components/block/block.component.ts @@ -8,7 +8,7 @@ import { StateService } from '@app/services/state.service'; import { SeoService } from '@app/services/seo.service'; import { WebsocketService } from '@app/services/websocket.service'; import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; -import { Acceleration, BlockAudit, BlockExtended, TransactionStripped } from '@app/interfaces/node-api.interface'; +import { Acceleration, BlockAudit, BlockExtended, TransactionStripped } from '@interfaces/node-api.interface'; import { ApiService } from '@app/services/api.service'; import { BlockOverviewGraphComponent } from '@components/block-overview-graph/block-overview-graph.component'; import { detectWebGL } from '@app/shared/graphs.utils'; diff --git a/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.ts b/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.ts index cc8a7a6b2..008ab1052 100644 --- a/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.ts +++ b/frontend/src/app/components/blockchain-blocks/blockchain-blocks.component.ts @@ -2,7 +2,7 @@ import { Component, OnInit, OnDestroy, ChangeDetectionStrategy, ChangeDetectorRe import { Observable, Subscription, delay, filter, tap } from 'rxjs'; import { StateService } from '@app/services/state.service'; import { specialBlocks } from '@app/app.constants'; -import { BlockExtended } from '@app/interfaces/node-api.interface'; +import { BlockExtended } from '@interfaces/node-api.interface'; import { Location } from '@angular/common'; import { CacheService } from '@app/services/cache.service'; diff --git a/frontend/src/app/components/blocks-list/blocks-list.component.ts b/frontend/src/app/components/blocks-list/blocks-list.component.ts index d71ccbffc..a5e6486a6 100644 --- a/frontend/src/app/components/blocks-list/blocks-list.component.ts +++ b/frontend/src/app/components/blocks-list/blocks-list.component.ts @@ -2,7 +2,7 @@ import { Component, OnInit, ChangeDetectionStrategy, Input, ChangeDetectorRef, I import { ActivatedRoute, Router } from '@angular/router'; import { BehaviorSubject, combineLatest, Observable, timer, of, Subscription } from 'rxjs'; import { debounceTime, delayWhen, filter, map, retryWhen, scan, skip, switchMap, tap, throttleTime } from 'rxjs/operators'; -import { BlockExtended } from '@app/interfaces/node-api.interface'; +import { BlockExtended } from '@interfaces/node-api.interface'; import { ApiService } from '@app/services/api.service'; import { StateService } from '@app/services/state.service'; import { WebsocketService } from '@app/services/websocket.service'; diff --git a/frontend/src/app/components/clock/clock.component.ts b/frontend/src/app/components/clock/clock.component.ts index 4b7eab9fb..90b3d5d26 100644 --- a/frontend/src/app/components/clock/clock.component.ts +++ b/frontend/src/app/components/clock/clock.component.ts @@ -1,9 +1,9 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, HostListener, Input, OnInit } from '@angular/core'; import { Observable, Subscription, of, switchMap, tap } from 'rxjs'; import { StateService } from '@app/services/state.service'; -import { BlockExtended } from '@app/interfaces/node-api.interface'; +import { BlockExtended } from '@interfaces/node-api.interface'; import { WebsocketService } from '@app/services/websocket.service'; -import { MempoolInfo, Recommendedfees } from '@app/interfaces/websocket.interface'; +import { MempoolInfo, Recommendedfees } from '@interfaces/websocket.interface'; import { ActivatedRoute, ParamMap, Router } from '@angular/router'; import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; diff --git a/frontend/src/app/components/custom-dashboard/custom-dashboard.component.ts b/frontend/src/app/components/custom-dashboard/custom-dashboard.component.ts index 8d7159492..59bbc32ef 100644 --- a/frontend/src/app/components/custom-dashboard/custom-dashboard.component.ts +++ b/frontend/src/app/components/custom-dashboard/custom-dashboard.component.ts @@ -1,15 +1,15 @@ import { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, HostListener, Inject, OnDestroy, OnInit, PLATFORM_ID } from '@angular/core'; import { combineLatest, merge, Observable, of, Subject, Subscription } from 'rxjs'; import { catchError, filter, map, scan, share, shareReplay, startWith, switchMap, tap } from 'rxjs/operators'; -import { BlockExtended, OptimizedMempoolStats, TransactionStripped } from '@app/interfaces/node-api.interface'; -import { MempoolInfo, ReplacementInfo } from '@app/interfaces/websocket.interface'; +import { BlockExtended, OptimizedMempoolStats, TransactionStripped } from '@interfaces/node-api.interface'; +import { MempoolInfo, ReplacementInfo } from '@interfaces/websocket.interface'; import { ApiService } from '@app/services/api.service'; import { StateService } from '@app/services/state.service'; import { WebsocketService } from '@app/services/websocket.service'; import { SeoService } from '@app/services/seo.service'; import { ActiveFilter, FilterMode, GradientMode, toFlags } from '@app/shared/filters.utils'; import { detectWebGL } from '@app/shared/graphs.utils'; -import { Address, AddressTxSummary } from '@app/interfaces/electrs.interface'; +import { Address, AddressTxSummary } from '@interfaces/electrs.interface'; import { ElectrsApiService } from '@app/services/electrs-api.service'; interface MempoolBlocksData { diff --git a/frontend/src/app/components/eight-blocks/eight-blocks.component.ts b/frontend/src/app/components/eight-blocks/eight-blocks.component.ts index 54f52643a..8ca8437ac 100644 --- a/frontend/src/app/components/eight-blocks/eight-blocks.component.ts +++ b/frontend/src/app/components/eight-blocks/eight-blocks.component.ts @@ -5,7 +5,7 @@ import { Subject, Subscription, of } from 'rxjs'; import { StateService } from '@app/services/state.service'; import { WebsocketService } from '@app/services/websocket.service'; import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; -import { BlockExtended, TransactionStripped } from '@app/interfaces/node-api.interface'; +import { BlockExtended, TransactionStripped } from '@interfaces/node-api.interface'; import { ApiService } from '@app/services/api.service'; import { BlockOverviewGraphComponent } from '@components/block-overview-graph/block-overview-graph.component'; import { detectWebGL } from '@app/shared/graphs.utils'; diff --git a/frontend/src/app/components/fee-distribution-graph/fee-distribution-graph.component.ts b/frontend/src/app/components/fee-distribution-graph/fee-distribution-graph.component.ts index 5bae2e275..aa57f92d9 100644 --- a/frontend/src/app/components/fee-distribution-graph/fee-distribution-graph.component.ts +++ b/frontend/src/app/components/fee-distribution-graph/fee-distribution-graph.component.ts @@ -1,6 +1,6 @@ import { HostListener, OnChanges, OnDestroy } from '@angular/core'; import { Component, Input, OnInit, ChangeDetectionStrategy } from '@angular/core'; -import { TransactionStripped } from '@app/interfaces/node-api.interface'; +import { TransactionStripped } from '@interfaces/node-api.interface'; import { StateService } from '@app/services/state.service'; import { VbytesPipe } from '@app/shared/pipes/bytes-pipe/vbytes.pipe'; import { selectPowerOfTen } from '@app/bitcoin.utils'; diff --git a/frontend/src/app/components/fees-box/fees-box.component.ts b/frontend/src/app/components/fees-box/fees-box.component.ts index 9799c45bb..b8689bd3c 100644 --- a/frontend/src/app/components/fees-box/fees-box.component.ts +++ b/frontend/src/app/components/fees-box/fees-box.component.ts @@ -1,7 +1,7 @@ import { Component, OnInit, ChangeDetectionStrategy, OnDestroy, ChangeDetectorRef } from '@angular/core'; import { StateService } from '@app/services/state.service'; import { Observable, combineLatest, Subscription } from 'rxjs'; -import { Recommendedfees } from '@app/interfaces/websocket.interface'; +import { Recommendedfees } from '@interfaces/websocket.interface'; import { feeLevels } from '@app/app.constants'; import { map, startWith, tap } from 'rxjs/operators'; import { ThemeService } from '@app/services/theme.service'; diff --git a/frontend/src/app/components/footer/footer.component.ts b/frontend/src/app/components/footer/footer.component.ts index 347c00e7c..4001a3875 100644 --- a/frontend/src/app/components/footer/footer.component.ts +++ b/frontend/src/app/components/footer/footer.component.ts @@ -2,7 +2,7 @@ import { Component, OnInit, ChangeDetectionStrategy, Input } from '@angular/core import { StateService } from '@app/services/state.service'; import { Observable, combineLatest } from 'rxjs'; import { map } from 'rxjs/operators'; -import { MempoolInfo } from '@app/interfaces/websocket.interface'; +import { MempoolInfo } from '@interfaces/websocket.interface'; interface MempoolBlocksData { blocks: number; diff --git a/frontend/src/app/components/liquid-reserves-audit/expired-utxos-stats/expired-utxos-stats.component.ts b/frontend/src/app/components/liquid-reserves-audit/expired-utxos-stats/expired-utxos-stats.component.ts index 3a266af00..e9de3cce3 100644 --- a/frontend/src/app/components/liquid-reserves-audit/expired-utxos-stats/expired-utxos-stats.component.ts +++ b/frontend/src/app/components/liquid-reserves-audit/expired-utxos-stats/expired-utxos-stats.component.ts @@ -1,6 +1,6 @@ import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core'; import { Observable, map, of } from 'rxjs'; -import { FederationUtxo } from '@app/interfaces/node-api.interface'; +import { FederationUtxo } from '@interfaces/node-api.interface'; @Component({ selector: 'app-expired-utxos-stats', diff --git a/frontend/src/app/components/liquid-reserves-audit/federation-addresses-list/federation-addresses-list.component.ts b/frontend/src/app/components/liquid-reserves-audit/federation-addresses-list/federation-addresses-list.component.ts index 188a21b8c..e098dfc34 100644 --- a/frontend/src/app/components/liquid-reserves-audit/federation-addresses-list/federation-addresses-list.component.ts +++ b/frontend/src/app/components/liquid-reserves-audit/federation-addresses-list/federation-addresses-list.component.ts @@ -3,7 +3,7 @@ import { Observable, Subject, combineLatest, of, timer } from 'rxjs'; import { delayWhen, filter, map, share, shareReplay, switchMap, takeUntil, tap, throttleTime } from 'rxjs/operators'; import { ApiService } from '@app/services/api.service'; import { Env, StateService } from '@app/services/state.service'; -import { AuditStatus, CurrentPegs, FederationAddress } from '@app/interfaces/node-api.interface'; +import { AuditStatus, CurrentPegs, FederationAddress } from '@interfaces/node-api.interface'; import { WebsocketService } from '@app/services/websocket.service'; @Component({ diff --git a/frontend/src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.ts b/frontend/src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.ts index 806ab8a51..44d0e44f8 100644 --- a/frontend/src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.ts +++ b/frontend/src/app/components/liquid-reserves-audit/federation-utxos-list/federation-utxos-list.component.ts @@ -4,7 +4,7 @@ import { BehaviorSubject, Observable, Subject, combineLatest, of, timer } from ' import { delayWhen, filter, map, share, shareReplay, switchMap, takeUntil, tap, throttleTime } from 'rxjs/operators'; import { ApiService } from '@app/services/api.service'; import { Env, StateService } from '@app/services/state.service'; -import { AuditStatus, CurrentPegs, FederationUtxo } from '@app/interfaces/node-api.interface'; +import { AuditStatus, CurrentPegs, FederationUtxo } from '@interfaces/node-api.interface'; import { WebsocketService } from '@app/services/websocket.service'; @Component({ diff --git a/frontend/src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.ts b/frontend/src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.ts index f430f8178..f11e03a28 100644 --- a/frontend/src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.ts +++ b/frontend/src/app/components/liquid-reserves-audit/recent-pegs-list/recent-pegs-list.component.ts @@ -4,7 +4,7 @@ import { BehaviorSubject, Observable, Subject, Subscription, combineLatest, of, import { delayWhen, filter, map, share, shareReplay, switchMap, take, takeUntil, tap, throttleTime } from 'rxjs/operators'; import { ApiService } from '@app/services/api.service'; import { Env, StateService } from '@app/services/state.service'; -import { AuditStatus, CurrentPegs, RecentPeg } from '@app/interfaces/node-api.interface'; +import { AuditStatus, CurrentPegs, RecentPeg } from '@interfaces/node-api.interface'; import { WebsocketService } from '@app/services/websocket.service'; import { SeoService } from '@app/services/seo.service'; diff --git a/frontend/src/app/components/liquid-reserves-audit/recent-pegs-stats/recent-pegs-stats.component.ts b/frontend/src/app/components/liquid-reserves-audit/recent-pegs-stats/recent-pegs-stats.component.ts index 576d3c01d..29033b848 100644 --- a/frontend/src/app/components/liquid-reserves-audit/recent-pegs-stats/recent-pegs-stats.component.ts +++ b/frontend/src/app/components/liquid-reserves-audit/recent-pegs-stats/recent-pegs-stats.component.ts @@ -1,6 +1,6 @@ import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core'; import { Observable } from 'rxjs'; -import { PegsVolume } from '@app/interfaces/node-api.interface'; +import { PegsVolume } from '@interfaces/node-api.interface'; @Component({ selector: 'app-recent-pegs-stats', diff --git a/frontend/src/app/components/liquid-reserves-audit/reserves-ratio/reserves-ratio.component.ts b/frontend/src/app/components/liquid-reserves-audit/reserves-ratio/reserves-ratio.component.ts index 4fde65d63..770940325 100644 --- a/frontend/src/app/components/liquid-reserves-audit/reserves-ratio/reserves-ratio.component.ts +++ b/frontend/src/app/components/liquid-reserves-audit/reserves-ratio/reserves-ratio.component.ts @@ -1,6 +1,6 @@ import { Component, ChangeDetectionStrategy, Input, OnChanges, OnInit, HostListener } from '@angular/core'; import { EChartsOption } from '@app/graphs/echarts'; -import { CurrentPegs } from '@app/interfaces/node-api.interface'; +import { CurrentPegs } from '@interfaces/node-api.interface'; @Component({ diff --git a/frontend/src/app/components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component.ts b/frontend/src/app/components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component.ts index 867e60d3c..97d1b3da0 100644 --- a/frontend/src/app/components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component.ts +++ b/frontend/src/app/components/liquid-reserves-audit/reserves-supply-stats/reserves-supply-stats.component.ts @@ -1,7 +1,7 @@ import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core'; import { Observable } from 'rxjs'; import { Env, StateService } from '@app/services/state.service'; -import { CurrentPegs } from '@app/interfaces/node-api.interface'; +import { CurrentPegs } from '@interfaces/node-api.interface'; @Component({ selector: 'app-reserves-supply-stats', diff --git a/frontend/src/app/components/mempool-block-overview/mempool-block-overview.component.ts b/frontend/src/app/components/mempool-block-overview/mempool-block-overview.component.ts index f124b8b05..fca8b279c 100644 --- a/frontend/src/app/components/mempool-block-overview/mempool-block-overview.component.ts +++ b/frontend/src/app/components/mempool-block-overview/mempool-block-overview.component.ts @@ -1,8 +1,8 @@ import { Component, ViewChild, Input, Output, EventEmitter, OnInit, OnDestroy, OnChanges, ChangeDetectionStrategy, ChangeDetectorRef, AfterViewInit } from '@angular/core'; import { StateService } from '@app/services/state.service'; -import { MempoolBlockDelta, isMempoolDelta } from '@app/interfaces/websocket.interface'; -import { TransactionStripped } from '@app/interfaces/node-api.interface'; +import { MempoolBlockDelta, isMempoolDelta } from '@interfaces/websocket.interface'; +import { TransactionStripped } from '@interfaces/node-api.interface'; import { BlockOverviewGraphComponent } from '@components/block-overview-graph/block-overview-graph.component'; import { Subscription, BehaviorSubject } from 'rxjs'; import { WebsocketService } from '@app/services/websocket.service'; diff --git a/frontend/src/app/components/mempool-block/mempool-block.component.ts b/frontend/src/app/components/mempool-block/mempool-block.component.ts index 767ebd30b..029f9c616 100644 --- a/frontend/src/app/components/mempool-block/mempool-block.component.ts +++ b/frontend/src/app/components/mempool-block/mempool-block.component.ts @@ -3,8 +3,8 @@ import { detectWebGL } from '@app/shared/graphs.utils'; import { StateService } from '@app/services/state.service'; import { ActivatedRoute, ParamMap } from '@angular/router'; import { switchMap, map, tap, filter } from 'rxjs/operators'; -import { MempoolBlock } from '@app/interfaces/websocket.interface'; -import { TransactionStripped } from '@app/interfaces/node-api.interface'; +import { MempoolBlock } from '@interfaces/websocket.interface'; +import { TransactionStripped } from '@interfaces/node-api.interface'; import { Observable, BehaviorSubject } from 'rxjs'; import { SeoService } from '@app/services/seo.service'; import { seoDescriptionNetwork } from '@app/shared/common.utils'; diff --git a/frontend/src/app/components/mempool-blocks/mempool-blocks.component.ts b/frontend/src/app/components/mempool-blocks/mempool-blocks.component.ts index bb16093c0..72d73769c 100644 --- a/frontend/src/app/components/mempool-blocks/mempool-blocks.component.ts +++ b/frontend/src/app/components/mempool-blocks/mempool-blocks.component.ts @@ -1,6 +1,6 @@ import { Component, OnInit, OnDestroy, ChangeDetectionStrategy, ChangeDetectorRef, HostListener, Input, OnChanges, SimpleChanges, Output, EventEmitter, ViewChild, ElementRef } from '@angular/core'; import { Subscription, Observable, of, combineLatest } from 'rxjs'; -import { MempoolBlock } from '@app/interfaces/websocket.interface'; +import { MempoolBlock } from '@interfaces/websocket.interface'; import { StateService } from '@app/services/state.service'; import { EtaService } from '@app/services/eta.service'; import { Router } from '@angular/router'; @@ -9,7 +9,7 @@ import { feeLevels } from '@app/app.constants'; import { specialBlocks } from '@app/app.constants'; import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; import { Location } from '@angular/common'; -import { DifficultyAdjustment, MempoolPosition } from '@app/interfaces/node-api.interface'; +import { DifficultyAdjustment, MempoolPosition } from '@interfaces/node-api.interface'; import { animate, style, transition, trigger } from '@angular/animations'; import { ThemeService } from '@app/services/theme.service'; diff --git a/frontend/src/app/components/mempool-graph/mempool-graph.component.ts b/frontend/src/app/components/mempool-graph/mempool-graph.component.ts index 7f70e0f75..15e6c6f7a 100644 --- a/frontend/src/app/components/mempool-graph/mempool-graph.component.ts +++ b/frontend/src/app/components/mempool-graph/mempool-graph.component.ts @@ -3,7 +3,7 @@ import { VbytesPipe } from '@app/shared/pipes/bytes-pipe/vbytes.pipe'; import { WuBytesPipe } from '@app/shared/pipes/bytes-pipe/wubytes.pipe'; import { AmountShortenerPipe } from '@app/shared/pipes/amount-shortener.pipe'; import { formatNumber } from '@angular/common'; -import { OptimizedMempoolStats } from '@app/interfaces/node-api.interface'; +import { OptimizedMempoolStats } from '@interfaces/node-api.interface'; import { StateService } from '@app/services/state.service'; import { StorageService } from '@app/services/storage.service'; import { EChartsOption } from '@app/graphs/echarts'; diff --git a/frontend/src/app/components/menu/menu.component.ts b/frontend/src/app/components/menu/menu.component.ts index 8bb350a78..278ec46a1 100644 --- a/frontend/src/app/components/menu/menu.component.ts +++ b/frontend/src/app/components/menu/menu.component.ts @@ -1,6 +1,6 @@ import { Component, OnInit, Input, Output, EventEmitter, HostListener, OnDestroy } from '@angular/core'; import { Observable } from 'rxjs'; -import { MenuGroup } from '@app/interfaces/services.interface'; +import { MenuGroup } from '@interfaces/services.interface'; import { StorageService } from '@app/services/storage.service'; import { Router, NavigationStart } from '@angular/router'; import { StateService } from '@app/services/state.service'; diff --git a/frontend/src/app/components/pool/pool-preview.component.ts b/frontend/src/app/components/pool/pool-preview.component.ts index a3d674f14..93077120d 100644 --- a/frontend/src/app/components/pool/pool-preview.component.ts +++ b/frontend/src/app/components/pool/pool-preview.component.ts @@ -3,7 +3,7 @@ import { ActivatedRoute } from '@angular/router'; import { echarts, EChartsOption } from '@app/graphs/echarts'; import { Observable, of } from 'rxjs'; import { map, switchMap, catchError } from 'rxjs/operators'; -import { PoolStat } from '@app/interfaces/node-api.interface'; +import { PoolStat } from '@interfaces/node-api.interface'; import { ApiService } from '@app/services/api.service'; import { StateService } from '@app/services/state.service'; import { formatNumber } from '@angular/common'; diff --git a/frontend/src/app/components/pool/pool.component.ts b/frontend/src/app/components/pool/pool.component.ts index 32947a702..1893f0a48 100644 --- a/frontend/src/app/components/pool/pool.component.ts +++ b/frontend/src/app/components/pool/pool.component.ts @@ -3,7 +3,7 @@ import { ActivatedRoute } from '@angular/router'; import { echarts, EChartsOption } from '@app/graphs/echarts'; import { BehaviorSubject, Observable, Subscription, combineLatest, of } from 'rxjs'; import { catchError, distinctUntilChanged, filter, map, share, switchMap, tap } from 'rxjs/operators'; -import { BlockExtended, PoolStat } from '@app/interfaces/node-api.interface'; +import { BlockExtended, PoolStat } from '@interfaces/node-api.interface'; import { ApiService } from '@app/services/api.service'; import { StateService } from '@app/services/state.service'; import { selectPowerOfTen } from '@app/bitcoin.utils'; diff --git a/frontend/src/app/components/push-transaction/push-transaction.component.ts b/frontend/src/app/components/push-transaction/push-transaction.component.ts index f2c23bc2e..221333edb 100644 --- a/frontend/src/app/components/push-transaction/push-transaction.component.ts +++ b/frontend/src/app/components/push-transaction/push-transaction.component.ts @@ -7,7 +7,7 @@ import { OpenGraphService } from '@app/services/opengraph.service'; import { seoDescriptionNetwork } from '@app/shared/common.utils'; import { ActivatedRoute, Router } from '@angular/router'; import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; -import { TxResult } from '@app/interfaces/node-api.interface'; +import { TxResult } from '@interfaces/node-api.interface'; @Component({ selector: 'app-push-transaction', diff --git a/frontend/src/app/components/rbf-list/rbf-list.component.ts b/frontend/src/app/components/rbf-list/rbf-list.component.ts index d561dd3f5..d835b4a59 100644 --- a/frontend/src/app/components/rbf-list/rbf-list.component.ts +++ b/frontend/src/app/components/rbf-list/rbf-list.component.ts @@ -3,7 +3,7 @@ import { ActivatedRoute, Router } from '@angular/router'; import { BehaviorSubject, EMPTY, merge, Observable, Subscription } from 'rxjs'; import { catchError, switchMap, tap } from 'rxjs/operators'; import { WebsocketService } from '@app/services/websocket.service'; -import { RbfTree } from '@app/interfaces/node-api.interface'; +import { RbfTree } from '@interfaces/node-api.interface'; import { ApiService } from '@app/services/api.service'; import { StateService } from '@app/services/state.service'; import { SeoService } from '@app/services/seo.service'; diff --git a/frontend/src/app/components/rbf-timeline/rbf-timeline-tooltip.component.ts b/frontend/src/app/components/rbf-timeline/rbf-timeline-tooltip.component.ts index d03f3f8d4..3368eeaf3 100644 --- a/frontend/src/app/components/rbf-timeline/rbf-timeline-tooltip.component.ts +++ b/frontend/src/app/components/rbf-timeline/rbf-timeline-tooltip.component.ts @@ -1,5 +1,5 @@ import { Component, ElementRef, ViewChild, Input, OnChanges } from '@angular/core'; -import { RbfTree } from '@app/interfaces/node-api.interface'; +import { RbfTree } from '@interfaces/node-api.interface'; @Component({ selector: 'app-rbf-timeline-tooltip', diff --git a/frontend/src/app/components/rbf-timeline/rbf-timeline.component.ts b/frontend/src/app/components/rbf-timeline/rbf-timeline.component.ts index 766eb30c1..8bf5a0694 100644 --- a/frontend/src/app/components/rbf-timeline/rbf-timeline.component.ts +++ b/frontend/src/app/components/rbf-timeline/rbf-timeline.component.ts @@ -1,6 +1,6 @@ import { Component, Input, OnInit, OnChanges, Inject, LOCALE_ID, HostListener } from '@angular/core'; import { Router } from '@angular/router'; -import { RbfTree, RbfTransaction } from '@app/interfaces/node-api.interface'; +import { RbfTree, RbfTransaction } from '@interfaces/node-api.interface'; import { StateService } from '@app/services/state.service'; import { ApiService } from '@app/services/api.service'; diff --git a/frontend/src/app/components/server-health/server-health.component.ts b/frontend/src/app/components/server-health/server-health.component.ts index 8eff44db0..68dd7f349 100644 --- a/frontend/src/app/components/server-health/server-health.component.ts +++ b/frontend/src/app/components/server-health/server-health.component.ts @@ -2,7 +2,7 @@ import { Component, OnInit, ChangeDetectionStrategy, SecurityContext, ChangeDete import { WebsocketService } from '@app/services/websocket.service'; import { Observable, Subject, map } from 'rxjs'; import { StateService } from '@app/services/state.service'; -import { HealthCheckHost } from '@app/interfaces/websocket.interface'; +import { HealthCheckHost } from '@interfaces/websocket.interface'; import { DomSanitizer } from '@angular/platform-browser'; @Component({ diff --git a/frontend/src/app/components/server-health/server-status.component.ts b/frontend/src/app/components/server-health/server-status.component.ts index 25fb8c074..7941d326d 100644 --- a/frontend/src/app/components/server-health/server-status.component.ts +++ b/frontend/src/app/components/server-health/server-status.component.ts @@ -2,7 +2,7 @@ import { Component, OnInit, ChangeDetectionStrategy, SecurityContext, OnDestroy, import { WebsocketService } from '@app/services/websocket.service'; import { Observable, Subject, Subscription, map, tap } from 'rxjs'; import { StateService } from '@app/services/state.service'; -import { HealthCheckHost } from '@app/interfaces/websocket.interface'; +import { HealthCheckHost } from '@interfaces/websocket.interface'; import { DomSanitizer } from '@angular/platform-browser'; @Component({ diff --git a/frontend/src/app/components/start/start.component.ts b/frontend/src/app/components/start/start.component.ts index 2d4b2a6e4..236a8cda2 100644 --- a/frontend/src/app/components/start/start.component.ts +++ b/frontend/src/app/components/start/start.component.ts @@ -2,7 +2,7 @@ import { Component, ElementRef, HostListener, OnInit, OnDestroy, ViewChild, Inpu import { Subscription } from 'rxjs'; import { MarkBlockState, StateService } from '@app/services/state.service'; import { specialBlocks } from '@app/app.constants'; -import { BlockExtended } from '@app/interfaces/node-api.interface'; +import { BlockExtended } from '@interfaces/node-api.interface'; import { Router } from '@angular/router'; import { sleep$ } from '@app/shared/common.utils'; diff --git a/frontend/src/app/components/statistics/statistics.component.ts b/frontend/src/app/components/statistics/statistics.component.ts index 7aec4414b..9dda3c496 100644 --- a/frontend/src/app/components/statistics/statistics.component.ts +++ b/frontend/src/app/components/statistics/statistics.component.ts @@ -4,7 +4,7 @@ import { UntypedFormGroup, UntypedFormBuilder } from '@angular/forms'; import { of, merge} from 'rxjs'; import { switchMap } from 'rxjs/operators'; -import { OptimizedMempoolStats } from '@app/interfaces/node-api.interface'; +import { OptimizedMempoolStats } from '@interfaces/node-api.interface'; import { WebsocketService } from '@app/services/websocket.service'; import { ApiService } from '@app/services/api.service'; diff --git a/frontend/src/app/components/television/television.component.ts b/frontend/src/app/components/television/television.component.ts index 0df69ce7b..1507f3d97 100644 --- a/frontend/src/app/components/television/television.component.ts +++ b/frontend/src/app/components/television/television.component.ts @@ -1,6 +1,6 @@ import { Component, OnInit, OnDestroy } from '@angular/core'; import { WebsocketService } from '@app/services/websocket.service'; -import { OptimizedMempoolStats } from '@app/interfaces/node-api.interface'; +import { OptimizedMempoolStats } from '@interfaces/node-api.interface'; import { StateService } from '@app/services/state.service'; import { ApiService } from '@app/services/api.service'; import { SeoService } from '@app/services/seo.service'; diff --git a/frontend/src/app/components/test-transactions/test-transactions.component.ts b/frontend/src/app/components/test-transactions/test-transactions.component.ts index 2c6fde5cb..22a0951ea 100644 --- a/frontend/src/app/components/test-transactions/test-transactions.component.ts +++ b/frontend/src/app/components/test-transactions/test-transactions.component.ts @@ -4,7 +4,7 @@ import { ApiService } from '@app/services/api.service'; import { StateService } from '@app/services/state.service'; import { SeoService } from '@app/services/seo.service'; import { OpenGraphService } from '@app/services/opengraph.service'; -import { TestMempoolAcceptResult } from '@app/interfaces/node-api.interface'; +import { TestMempoolAcceptResult } from '@interfaces/node-api.interface'; @Component({ selector: 'app-test-transactions', diff --git a/frontend/src/app/components/tracker/tracker.component.ts b/frontend/src/app/components/tracker/tracker.component.ts index 5bc390700..5ee27771d 100644 --- a/frontend/src/app/components/tracker/tracker.component.ts +++ b/frontend/src/app/components/tracker/tracker.component.ts @@ -12,7 +12,7 @@ import { map, startWith } from 'rxjs/operators'; -import { Transaction } from '@app/interfaces/electrs.interface'; +import { Transaction } from '@interfaces/electrs.interface'; import { of, merge, Subscription, Observable, Subject, throwError, combineLatest, BehaviorSubject } from 'rxjs'; import { StateService } from '@app/services/state.service'; import { CacheService } from '@app/services/cache.service'; @@ -22,7 +22,7 @@ import { ApiService } from '@app/services/api.service'; import { SeoService } from '@app/services/seo.service'; import { seoDescriptionNetwork } from '@app/shared/common.utils'; import { Filter, TransactionFlags } from '@app/shared/filters.utils'; -import { BlockExtended, CpfpInfo, RbfTree, MempoolPosition, DifficultyAdjustment, Acceleration, AccelerationPosition } from '@app/interfaces/node-api.interface'; +import { BlockExtended, CpfpInfo, RbfTree, MempoolPosition, DifficultyAdjustment, Acceleration, AccelerationPosition } from '@interfaces/node-api.interface'; import { PriceService } from '@app/services/price.service'; import { ServicesApiServices } from '@app/services/services-api.service'; import { EnterpriseService } from '@app/services/enterprise.service'; diff --git a/frontend/src/app/components/transaction/liquid-ublinding.ts b/frontend/src/app/components/transaction/liquid-ublinding.ts index a22aa56bd..dcb61fa00 100644 --- a/frontend/src/app/components/transaction/liquid-ublinding.ts +++ b/frontend/src/app/components/transaction/liquid-ublinding.ts @@ -1,4 +1,4 @@ -import { Transaction } from '@app/interfaces/electrs.interface'; +import { Transaction } from '@interfaces/electrs.interface'; // Parse the blinders data from a string encoded as a comma separated list, in the following format: // ,,, diff --git a/frontend/src/app/components/transaction/transaction-preview.component.ts b/frontend/src/app/components/transaction/transaction-preview.component.ts index 3022d42d5..60ba4e900 100644 --- a/frontend/src/app/components/transaction/transaction-preview.component.ts +++ b/frontend/src/app/components/transaction/transaction-preview.component.ts @@ -8,7 +8,7 @@ import { retryWhen, delay, } from 'rxjs/operators'; -import { Transaction, Vout } from '@app/interfaces/electrs.interface'; +import { Transaction, Vout } from '@interfaces/electrs.interface'; import { of, merge, Subscription, Observable, Subject, from } from 'rxjs'; import { StateService } from '@app/services/state.service'; import { CacheService } from '@app/services/cache.service'; @@ -16,7 +16,7 @@ import { OpenGraphService } from '@app/services/opengraph.service'; import { ApiService } from '@app/services/api.service'; import { SeoService } from '@app/services/seo.service'; import { seoDescriptionNetwork } from '@app/shared/common.utils'; -import { CpfpInfo } from '@app/interfaces/node-api.interface'; +import { CpfpInfo } from '@interfaces/node-api.interface'; import { LiquidUnblinding } from './liquid-ublinding'; @Component({ diff --git a/frontend/src/app/components/transaction/transaction.component.ts b/frontend/src/app/components/transaction/transaction.component.ts index 23c173b8c..f17fc558f 100644 --- a/frontend/src/app/components/transaction/transaction.component.ts +++ b/frontend/src/app/components/transaction/transaction.component.ts @@ -15,7 +15,7 @@ import { repeat, take } from 'rxjs/operators'; -import { Transaction } from '@app/interfaces/electrs.interface'; +import { Transaction } from '@interfaces/electrs.interface'; import { of, merge, Subscription, Observable, Subject, from, throwError, combineLatest, BehaviorSubject } from 'rxjs'; import { StateService } from '@app/services/state.service'; import { CacheService } from '@app/services/cache.service'; @@ -27,7 +27,7 @@ import { StorageService } from '@app/services/storage.service'; import { seoDescriptionNetwork } from '@app/shared/common.utils'; import { getTransactionFlags, getUnacceleratedFeeRate } from '@app/shared/transaction.utils'; import { Filter, TransactionFlags, toFilters } from '@app/shared/filters.utils'; -import { BlockExtended, CpfpInfo, RbfTree, MempoolPosition, DifficultyAdjustment, Acceleration, AccelerationPosition } from '@app/interfaces/node-api.interface'; +import { BlockExtended, CpfpInfo, RbfTree, MempoolPosition, DifficultyAdjustment, Acceleration, AccelerationPosition } from '@interfaces/node-api.interface'; import { LiquidUnblinding } from '@components/transaction/liquid-ublinding'; import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; import { PriceService } from '@app/services/price.service'; diff --git a/frontend/src/app/components/transactions-list/transactions-list.component.ts b/frontend/src/app/components/transactions-list/transactions-list.component.ts index d49cb3bd1..b07546e5e 100644 --- a/frontend/src/app/components/transactions-list/transactions-list.component.ts +++ b/frontend/src/app/components/transactions-list/transactions-list.component.ts @@ -2,12 +2,12 @@ import { Component, OnInit, Input, ChangeDetectionStrategy, OnChanges, Output, E import { StateService } from '@app/services/state.service'; import { CacheService } from '@app/services/cache.service'; import { Observable, ReplaySubject, BehaviorSubject, merge, Subscription, of, forkJoin } from 'rxjs'; -import { Outspend, Transaction, Vin, Vout } from '@app/interfaces/electrs.interface'; +import { Outspend, Transaction, Vin, Vout } from '@interfaces/electrs.interface'; import { ElectrsApiService } from '@app/services/electrs-api.service'; import { environment } from '@environments/environment'; import { AssetsService } from '@app/services/assets.service'; import { filter, map, tap, switchMap, catchError } from 'rxjs/operators'; -import { BlockExtended } from '@app/interfaces/node-api.interface'; +import { BlockExtended } from '@interfaces/node-api.interface'; import { ApiService } from '@app/services/api.service'; import { PriceService } from '@app/services/price.service'; import { StorageService } from '@app/services/storage.service'; diff --git a/frontend/src/app/components/tx-bowtie-graph/tx-bowtie-graph.component.ts b/frontend/src/app/components/tx-bowtie-graph/tx-bowtie-graph.component.ts index 3641875ce..6720bbd2e 100644 --- a/frontend/src/app/components/tx-bowtie-graph/tx-bowtie-graph.component.ts +++ b/frontend/src/app/components/tx-bowtie-graph/tx-bowtie-graph.component.ts @@ -1,6 +1,6 @@ import { Component, OnInit, Input, OnChanges, HostListener, Inject, LOCALE_ID } from '@angular/core'; import { StateService } from '@app/services/state.service'; -import { Outspend, Transaction, Vin, Vout } from '@app/interfaces/electrs.interface'; +import { Outspend, Transaction, Vin, Vout } from '@interfaces/electrs.interface'; import { Router } from '@angular/router'; import { ReplaySubject, merge, Subscription, of } from 'rxjs'; import { tap, switchMap } from 'rxjs/operators'; diff --git a/frontend/src/app/components/tx-features/tx-features.component.ts b/frontend/src/app/components/tx-features/tx-features.component.ts index ec3e2a9bd..8cda2bfdf 100644 --- a/frontend/src/app/components/tx-features/tx-features.component.ts +++ b/frontend/src/app/components/tx-features/tx-features.component.ts @@ -1,6 +1,6 @@ import { Component, ChangeDetectionStrategy, OnChanges, Input } from '@angular/core'; import { calcSegwitFeeGains, isFeatureActive } from '@app/bitcoin.utils'; -import { Transaction } from '@app/interfaces/electrs.interface'; +import { Transaction } from '@interfaces/electrs.interface'; import { StateService } from '@app/services/state.service'; @Component({ diff --git a/frontend/src/app/components/tx-fee-rating/tx-fee-rating.component.ts b/frontend/src/app/components/tx-fee-rating/tx-fee-rating.component.ts index 0242e5e9d..5eec72800 100644 --- a/frontend/src/app/components/tx-fee-rating/tx-fee-rating.component.ts +++ b/frontend/src/app/components/tx-fee-rating/tx-fee-rating.component.ts @@ -1,8 +1,8 @@ import { Component, ChangeDetectionStrategy, OnChanges, Input, OnInit, ChangeDetectorRef, OnDestroy } from '@angular/core'; -import { Transaction } from '@app/interfaces/electrs.interface'; +import { Transaction } from '@interfaces/electrs.interface'; import { StateService } from '@app/services/state.service'; import { Subscription } from 'rxjs'; -import { BlockExtended } from '@app/interfaces/node-api.interface'; +import { BlockExtended } from '@interfaces/node-api.interface'; import { CacheService } from '@app/services/cache.service'; @Component({ diff --git a/frontend/src/app/components/utxo-graph/utxo-graph.component.ts b/frontend/src/app/components/utxo-graph/utxo-graph.component.ts index fa4c55105..b712fcf87 100644 --- a/frontend/src/app/components/utxo-graph/utxo-graph.component.ts +++ b/frontend/src/app/components/utxo-graph/utxo-graph.component.ts @@ -1,7 +1,7 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, NgZone, OnChanges, OnDestroy, SimpleChanges } from '@angular/core'; import { EChartsOption } from '@app/graphs/echarts'; import { Subscription } from 'rxjs'; -import { Utxo } from '@app/interfaces/electrs.interface'; +import { Utxo } from '@interfaces/electrs.interface'; import { StateService } from '@app/services/state.service'; import { Router } from '@angular/router'; import { RelativeUrlPipe } from '@app/shared/pipes/relative-url/relative-url.pipe'; diff --git a/frontend/src/app/components/wallet/wallet.component.ts b/frontend/src/app/components/wallet/wallet.component.ts index 4c1ef1a9d..ce44250e9 100644 --- a/frontend/src/app/components/wallet/wallet.component.ts +++ b/frontend/src/app/components/wallet/wallet.component.ts @@ -1,14 +1,14 @@ import { Component, OnInit, OnDestroy } from '@angular/core'; import { ActivatedRoute, ParamMap } from '@angular/router'; import { switchMap, catchError, map, tap, shareReplay, startWith, scan } from 'rxjs/operators'; -import { Address, AddressTxSummary, ChainStats, Transaction } from '@app/interfaces/electrs.interface'; +import { Address, AddressTxSummary, ChainStats, Transaction } from '@interfaces/electrs.interface'; import { WebsocketService } from '@app/services/websocket.service'; import { StateService } from '@app/services/state.service'; import { ApiService } from '@app/services/api.service'; import { of, Observable, Subscription } from 'rxjs'; import { SeoService } from '@app/services/seo.service'; import { seoDescriptionNetwork } from '@app/shared/common.utils'; -import { WalletAddress } from '@app/interfaces/node-api.interface'; +import { WalletAddress } from '@interfaces/node-api.interface'; class WalletStats implements ChainStats { addresses: string[]; diff --git a/frontend/src/app/dashboard/dashboard.component.ts b/frontend/src/app/dashboard/dashboard.component.ts index ae38a6858..79b0118a9 100644 --- a/frontend/src/app/dashboard/dashboard.component.ts +++ b/frontend/src/app/dashboard/dashboard.component.ts @@ -1,8 +1,8 @@ import { AfterViewInit, ChangeDetectionStrategy, Component, HostListener, Inject, OnDestroy, OnInit, PLATFORM_ID } from '@angular/core'; import { combineLatest, EMPTY, fromEvent, interval, merge, Observable, of, Subject, Subscription, timer } from 'rxjs'; import { catchError, delayWhen, distinctUntilChanged, filter, map, scan, share, shareReplay, startWith, switchMap, takeUntil, tap, throttleTime } from 'rxjs/operators'; -import { AuditStatus, BlockExtended, CurrentPegs, FederationAddress, FederationUtxo, OptimizedMempoolStats, PegsVolume, RecentPeg, TransactionStripped } from '@app/interfaces/node-api.interface'; -import { MempoolInfo, ReplacementInfo } from '@app/interfaces/websocket.interface'; +import { AuditStatus, BlockExtended, CurrentPegs, FederationAddress, FederationUtxo, OptimizedMempoolStats, PegsVolume, RecentPeg, TransactionStripped } from '@interfaces/node-api.interface'; +import { MempoolInfo, ReplacementInfo } from '@interfaces/websocket.interface'; import { ApiService } from '@app/services/api.service'; import { StateService } from '@app/services/state.service'; import { WebsocketService } from '@app/services/websocket.service'; diff --git a/frontend/src/app/interfaces/electrs.interface.ts b/frontend/src/app/interfaces/electrs.interface.ts index ac4bc1845..5a707d889 100644 --- a/frontend/src/app/interfaces/electrs.interface.ts +++ b/frontend/src/app/interfaces/electrs.interface.ts @@ -1,5 +1,5 @@ import { Price } from '@app/services/price.service'; -import { IChannel } from '@app/interfaces/node-api.interface'; +import { IChannel } from '@interfaces/node-api.interface'; export interface Transaction { txid: string; diff --git a/frontend/src/app/interfaces/websocket.interface.ts b/frontend/src/app/interfaces/websocket.interface.ts index da75a4c0c..e991b2da2 100644 --- a/frontend/src/app/interfaces/websocket.interface.ts +++ b/frontend/src/app/interfaces/websocket.interface.ts @@ -1,6 +1,6 @@ import { SafeResourceUrl } from '@angular/platform-browser'; import { ILoadingIndicators } from '@app/services/state.service'; -import { Transaction } from '@app/interfaces/electrs.interface'; +import { Transaction } from '@interfaces/electrs.interface'; import { Acceleration, BlockExtended, DifficultyAdjustment, RbfTree, TransactionStripped } from './node-api.interface'; export interface WebsocketResponse { diff --git a/frontend/src/app/lightning/channel/channel.component.ts b/frontend/src/app/lightning/channel/channel.component.ts index 4970c298c..501fc74f6 100644 --- a/frontend/src/app/lightning/channel/channel.component.ts +++ b/frontend/src/app/lightning/channel/channel.component.ts @@ -2,7 +2,7 @@ import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; import { ActivatedRoute, ParamMap } from '@angular/router'; import { Observable, of, zip } from 'rxjs'; import { catchError, map, shareReplay, switchMap, tap } from 'rxjs/operators'; -import { IChannel } from '@app/interfaces/node-api.interface'; +import { IChannel } from '@interfaces/node-api.interface'; import { ElectrsApiService } from '@app/services/electrs-api.service'; import { SeoService } from '@app/services/seo.service'; import { LightningApiService } from '@app/lightning/lightning-api.service'; diff --git a/frontend/src/app/lightning/channels-statistics/channels-statistics.component.ts b/frontend/src/app/lightning/channels-statistics/channels-statistics.component.ts index cee0be28f..ee3e13d10 100644 --- a/frontend/src/app/lightning/channels-statistics/channels-statistics.component.ts +++ b/frontend/src/app/lightning/channels-statistics/channels-statistics.component.ts @@ -1,6 +1,6 @@ import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core'; import { Observable } from 'rxjs'; -import { INodesStatistics } from '@app/interfaces/node-api.interface'; +import { INodesStatistics } from '@interfaces/node-api.interface'; @Component({ selector: 'app-channels-statistics', diff --git a/frontend/src/app/lightning/justice-list/justice-list.component.ts b/frontend/src/app/lightning/justice-list/justice-list.component.ts index 9da2f18e1..e075aed93 100644 --- a/frontend/src/app/lightning/justice-list/justice-list.component.ts +++ b/frontend/src/app/lightning/justice-list/justice-list.component.ts @@ -1,8 +1,8 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core'; import { map, Observable, of, Subject, Subscription, switchMap, tap, zip } from 'rxjs'; -import { IChannel } from '@app/interfaces/node-api.interface'; +import { IChannel } from '@interfaces/node-api.interface'; import { LightningApiService } from '@app/lightning/lightning-api.service'; -import { Transaction } from '@app/interfaces/electrs.interface'; +import { Transaction } from '@interfaces/electrs.interface'; import { ElectrsApiService } from '@app/services/electrs-api.service'; @Component({ diff --git a/frontend/src/app/lightning/lightning-api.service.ts b/frontend/src/app/lightning/lightning-api.service.ts index 8ef6f34b5..14276dc12 100644 --- a/frontend/src/app/lightning/lightning-api.service.ts +++ b/frontend/src/app/lightning/lightning-api.service.ts @@ -2,7 +2,7 @@ import { Injectable } from '@angular/core'; import { HttpClient, HttpParams } from '@angular/common/http'; import { BehaviorSubject, Observable, catchError, filter, of, shareReplay, take, tap } from 'rxjs'; import { StateService } from '@app/services/state.service'; -import { IChannel, INodesRanking, IOldestNodes, ITopNodesPerCapacity, ITopNodesPerChannels } from '@app/interfaces/node-api.interface'; +import { IChannel, INodesRanking, IOldestNodes, ITopNodesPerCapacity, ITopNodesPerChannels } from '@interfaces/node-api.interface'; @Injectable({ providedIn: 'root' diff --git a/frontend/src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts b/frontend/src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts index 2fc8fa62f..47b7700a4 100644 --- a/frontend/src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts +++ b/frontend/src/app/lightning/lightning-dashboard/lightning-dashboard.component.ts @@ -1,7 +1,7 @@ import { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, HostListener, OnInit } from '@angular/core'; import { Observable, merge } from 'rxjs'; import { share } from 'rxjs/operators'; -import { INodesRanking, INodesStatistics } from '@app/interfaces/node-api.interface'; +import { INodesRanking, INodesStatistics } from '@interfaces/node-api.interface'; import { SeoService } from '@app/services/seo.service'; import { OpenGraphService } from '@app/services/opengraph.service'; import { StateService } from '@app/services/state.service'; diff --git a/frontend/src/app/lightning/node-statistics/node-statistics.component.ts b/frontend/src/app/lightning/node-statistics/node-statistics.component.ts index 07cb8593d..a4b061e38 100644 --- a/frontend/src/app/lightning/node-statistics/node-statistics.component.ts +++ b/frontend/src/app/lightning/node-statistics/node-statistics.component.ts @@ -1,6 +1,6 @@ import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core'; import { Observable } from 'rxjs'; -import { INodesStatistics } from '@app/interfaces/node-api.interface'; +import { INodesStatistics } from '@interfaces/node-api.interface'; @Component({ selector: 'app-node-statistics', diff --git a/frontend/src/app/lightning/nodes-ranking/nodes-ranking.component.ts b/frontend/src/app/lightning/nodes-ranking/nodes-ranking.component.ts index 368b69c96..569bd8827 100644 --- a/frontend/src/app/lightning/nodes-ranking/nodes-ranking.component.ts +++ b/frontend/src/app/lightning/nodes-ranking/nodes-ranking.component.ts @@ -3,7 +3,7 @@ import { ActivatedRoute } from '@angular/router'; import { LightningApiService } from '@app/lightning/lightning-api.service'; import { share } from 'rxjs/operators'; import { Observable } from 'rxjs'; -import { INodesStatistics } from '@app/interfaces/node-api.interface'; +import { INodesStatistics } from '@interfaces/node-api.interface'; @Component({ selector: 'app-nodes-ranking', diff --git a/frontend/src/app/lightning/nodes-ranking/oldest-nodes/oldest-nodes.component.ts b/frontend/src/app/lightning/nodes-ranking/oldest-nodes/oldest-nodes.component.ts index d4b726815..a554341b9 100644 --- a/frontend/src/app/lightning/nodes-ranking/oldest-nodes/oldest-nodes.component.ts +++ b/frontend/src/app/lightning/nodes-ranking/oldest-nodes/oldest-nodes.component.ts @@ -2,7 +2,7 @@ import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core import { map, Observable } from 'rxjs'; import { GeolocationData } from '@app/shared/components/geolocation/geolocation.component'; import { SeoService } from '@app/services/seo.service'; -import { IOldestNodes } from '@app/interfaces/node-api.interface'; +import { IOldestNodes } from '@interfaces/node-api.interface'; import { LightningApiService } from '@app/lightning/lightning-api.service'; @Component({ diff --git a/frontend/src/app/lightning/nodes-ranking/top-nodes-per-capacity/top-nodes-per-capacity.component.ts b/frontend/src/app/lightning/nodes-ranking/top-nodes-per-capacity/top-nodes-per-capacity.component.ts index 7a1973464..24c8757b6 100644 --- a/frontend/src/app/lightning/nodes-ranking/top-nodes-per-capacity/top-nodes-per-capacity.component.ts +++ b/frontend/src/app/lightning/nodes-ranking/top-nodes-per-capacity/top-nodes-per-capacity.component.ts @@ -1,6 +1,6 @@ import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core'; import { combineLatest, map, Observable } from 'rxjs'; -import { INodesRanking, INodesStatistics, ITopNodesPerCapacity } from '@app/interfaces/node-api.interface'; +import { INodesRanking, INodesStatistics, ITopNodesPerCapacity } from '@interfaces/node-api.interface'; import { SeoService } from '@app/services/seo.service'; import { StateService } from '@app/services/state.service'; import { GeolocationData } from '@app/shared/components/geolocation/geolocation.component'; diff --git a/frontend/src/app/lightning/nodes-ranking/top-nodes-per-channels/top-nodes-per-channels.component.ts b/frontend/src/app/lightning/nodes-ranking/top-nodes-per-channels/top-nodes-per-channels.component.ts index 4d699f65d..6dbcb9c3e 100644 --- a/frontend/src/app/lightning/nodes-ranking/top-nodes-per-channels/top-nodes-per-channels.component.ts +++ b/frontend/src/app/lightning/nodes-ranking/top-nodes-per-channels/top-nodes-per-channels.component.ts @@ -1,6 +1,6 @@ import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core'; import { combineLatest, map, Observable } from 'rxjs'; -import { INodesRanking, INodesStatistics, ITopNodesPerChannels } from '@app/interfaces/node-api.interface'; +import { INodesRanking, INodesStatistics, ITopNodesPerChannels } from '@interfaces/node-api.interface'; import { SeoService } from '@app/services/seo.service'; import { StateService } from '@app/services/state.service'; import { GeolocationData } from '@app/shared/components/geolocation/geolocation.component'; diff --git a/frontend/src/app/lightning/nodes-rankings-dashboard/nodes-rankings-dashboard.component.ts b/frontend/src/app/lightning/nodes-rankings-dashboard/nodes-rankings-dashboard.component.ts index 06d6cae68..5561d086e 100644 --- a/frontend/src/app/lightning/nodes-rankings-dashboard/nodes-rankings-dashboard.component.ts +++ b/frontend/src/app/lightning/nodes-rankings-dashboard/nodes-rankings-dashboard.component.ts @@ -1,6 +1,6 @@ import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; import { Observable, share } from 'rxjs'; -import { INodesRanking } from '@app/interfaces/node-api.interface'; +import { INodesRanking } from '@interfaces/node-api.interface'; import { SeoService } from '@app/services/seo.service'; import { LightningApiService } from '@app/lightning/lightning-api.service'; diff --git a/frontend/src/app/services/api.service.ts b/frontend/src/app/services/api.service.ts index 4828ee32a..08251ddae 100644 --- a/frontend/src/app/services/api.service.ts +++ b/frontend/src/app/services/api.service.ts @@ -4,10 +4,10 @@ import { CpfpInfo, OptimizedMempoolStats, AddressInformation, LiquidPegs, ITrans RbfTree, BlockAudit, CurrentPegs, AuditStatus, FederationAddress, FederationUtxo, RecentPeg, PegsVolume, AccelerationInfo, TestMempoolAcceptResult, WalletAddress, SubmitPackageResult } from '../interfaces/node-api.interface'; import { BehaviorSubject, Observable, catchError, filter, map, of, shareReplay, take, tap } from 'rxjs'; import { StateService } from '@app/services/state.service'; -import { Transaction } from '@app/interfaces/electrs.interface'; +import { Transaction } from '@interfaces/electrs.interface'; import { Conversion } from '@app/services/price.service'; import { StorageService } from '@app/services/storage.service'; -import { WebsocketResponse } from '@app/interfaces/websocket.interface'; +import { WebsocketResponse } from '@interfaces/websocket.interface'; import { TxAuditStatus } from '@components/transaction/transaction.component'; @Injectable({ diff --git a/frontend/src/app/services/assets.service.ts b/frontend/src/app/services/assets.service.ts index efbe4a789..bb8756bd7 100644 --- a/frontend/src/app/services/assets.service.ts +++ b/frontend/src/app/services/assets.service.ts @@ -4,7 +4,7 @@ import { Observable } from 'rxjs'; import { map, shareReplay, switchMap } from 'rxjs/operators'; import { StateService } from '@app/services/state.service'; import { environment } from '@environments/environment'; -import { AssetExtended } from '@app/interfaces/electrs.interface'; +import { AssetExtended } from '@interfaces/electrs.interface'; @Injectable({ providedIn: 'root' diff --git a/frontend/src/app/services/cache.service.ts b/frontend/src/app/services/cache.service.ts index c0d0dcfed..246008043 100644 --- a/frontend/src/app/services/cache.service.ts +++ b/frontend/src/app/services/cache.service.ts @@ -1,7 +1,7 @@ import { Injectable } from '@angular/core'; import { firstValueFrom, Subject, Subscription} from 'rxjs'; -import { Transaction } from '@app/interfaces/electrs.interface'; -import { BlockExtended } from '@app/interfaces/node-api.interface'; +import { Transaction } from '@interfaces/electrs.interface'; +import { BlockExtended } from '@interfaces/node-api.interface'; import { StateService } from '@app/services/state.service'; import { ApiService } from '@app/services/api.service'; diff --git a/frontend/src/app/services/electrs-api.service.ts b/frontend/src/app/services/electrs-api.service.ts index ffdd69396..3cd5b5abd 100644 --- a/frontend/src/app/services/electrs-api.service.ts +++ b/frontend/src/app/services/electrs-api.service.ts @@ -3,7 +3,7 @@ import { HttpClient, HttpParams } from '@angular/common/http'; import { BehaviorSubject, Observable, catchError, filter, from, of, shareReplay, switchMap, take, tap } from 'rxjs'; import { Transaction, Address, Outspend, Recent, Asset, ScriptHash, AddressTxSummary, Utxo } from '../interfaces/electrs.interface'; import { StateService } from '@app/services/state.service'; -import { BlockExtended } from '@app/interfaces/node-api.interface'; +import { BlockExtended } from '@interfaces/node-api.interface'; import { calcScriptHash$ } from '@app/bitcoin.utils'; @Injectable({ diff --git a/frontend/src/app/services/eta.service.ts b/frontend/src/app/services/eta.service.ts index 5ff90ce3e..cf7719327 100644 --- a/frontend/src/app/services/eta.service.ts +++ b/frontend/src/app/services/eta.service.ts @@ -1,8 +1,8 @@ import { Injectable } from '@angular/core'; -import { AccelerationPosition, CpfpInfo, DifficultyAdjustment, MempoolPosition, SinglePoolStats } from '@app/interfaces/node-api.interface'; +import { AccelerationPosition, CpfpInfo, DifficultyAdjustment, MempoolPosition, SinglePoolStats } from '@interfaces/node-api.interface'; import { StateService } from '@app/services/state.service'; -import { MempoolBlock } from '@app/interfaces/websocket.interface'; -import { Transaction } from '@app/interfaces/electrs.interface'; +import { MempoolBlock } from '@interfaces/websocket.interface'; +import { Transaction } from '@interfaces/electrs.interface'; import { MiningService, MiningStats } from '@app/services/mining.service'; import { getUnacceleratedFeeRate } from '@app/shared/transaction.utils'; import { AccelerationEstimate } from '@components/accelerate-checkout/accelerate-checkout.component'; diff --git a/frontend/src/app/services/mining.service.ts b/frontend/src/app/services/mining.service.ts index f8e835f81..87e9374ea 100644 --- a/frontend/src/app/services/mining.service.ts +++ b/frontend/src/app/services/mining.service.ts @@ -1,7 +1,7 @@ import { Injectable } from '@angular/core'; import { Observable, of } from 'rxjs'; import { map, tap } from 'rxjs/operators'; -import { PoolsStats, SinglePoolStats } from '@app/interfaces/node-api.interface'; +import { PoolsStats, SinglePoolStats } from '@interfaces/node-api.interface'; import { ApiService } from '@app/services/api.service'; import { StateService } from '@app/services/state.service'; import { StorageService } from '@app/services/storage.service'; diff --git a/frontend/src/app/services/ord-api.service.ts b/frontend/src/app/services/ord-api.service.ts index 8f87c8000..e2dffba8f 100644 --- a/frontend/src/app/services/ord-api.service.ts +++ b/frontend/src/app/services/ord-api.service.ts @@ -1,7 +1,7 @@ import { Injectable } from '@angular/core'; import { catchError, forkJoin, map, Observable, of, switchMap, tap } from 'rxjs'; import { Inscription } from '@app/shared/ord/inscription.utils'; -import { Transaction } from '@app/interfaces/electrs.interface'; +import { Transaction } from '@interfaces/electrs.interface'; import { getNextInscriptionMark, hexToBytes, extractInscriptionData } from '@app/shared/ord/inscription.utils'; import { decipherRunestone, Runestone, Etching, UNCOMMON_GOODS } from '@app/shared/ord/rune.utils'; import { ElectrsApiService } from './electrs-api.service'; diff --git a/frontend/src/app/services/services-api.service.ts b/frontend/src/app/services/services-api.service.ts index c5eff2000..2b0f884ff 100644 --- a/frontend/src/app/services/services-api.service.ts +++ b/frontend/src/app/services/services-api.service.ts @@ -3,10 +3,10 @@ import { Injectable } from '@angular/core'; import { HttpClient } from '@angular/common/http'; import { StateService } from '@app/services/state.service'; import { StorageService } from '@app/services/storage.service'; -import { MenuGroup } from '@app/interfaces/services.interface'; +import { MenuGroup } from '@interfaces/services.interface'; import { Observable, of, ReplaySubject, tap, catchError, share, filter, switchMap, map } from 'rxjs'; -import { IBackendInfo } from '@app/interfaces/websocket.interface'; -import { Acceleration, AccelerationHistoryParams } from '@app/interfaces/node-api.interface'; +import { IBackendInfo } from '@interfaces/websocket.interface'; +import { Acceleration, AccelerationHistoryParams } from '@interfaces/node-api.interface'; import { AccelerationStats } from '@components/acceleration/acceleration-stats/acceleration-stats.component'; export interface IUser { diff --git a/frontend/src/app/services/state.service.ts b/frontend/src/app/services/state.service.ts index d01e95585..dd7b642aa 100644 --- a/frontend/src/app/services/state.service.ts +++ b/frontend/src/app/services/state.service.ts @@ -1,8 +1,8 @@ import { Inject, Injectable, PLATFORM_ID, LOCALE_ID } from '@angular/core'; import { ReplaySubject, BehaviorSubject, Subject, fromEvent, Observable } from 'rxjs'; -import { AddressTxSummary, Transaction } from '@app/interfaces/electrs.interface'; -import { AccelerationDelta, HealthCheckHost, IBackendInfo, MempoolBlock, MempoolBlockUpdate, MempoolInfo, Recommendedfees, ReplacedTransaction, ReplacementInfo, isMempoolState } from '@app/interfaces/websocket.interface'; -import { Acceleration, AccelerationPosition, BlockExtended, CpfpInfo, DifficultyAdjustment, MempoolPosition, OptimizedMempoolStats, RbfTree, TransactionStripped } from '@app/interfaces/node-api.interface'; +import { AddressTxSummary, Transaction } from '@interfaces/electrs.interface'; +import { AccelerationDelta, HealthCheckHost, IBackendInfo, MempoolBlock, MempoolBlockUpdate, MempoolInfo, Recommendedfees, ReplacedTransaction, ReplacementInfo, isMempoolState } from '@interfaces/websocket.interface'; +import { Acceleration, AccelerationPosition, BlockExtended, CpfpInfo, DifficultyAdjustment, MempoolPosition, OptimizedMempoolStats, RbfTree, TransactionStripped } from '@interfaces/node-api.interface'; import { Router, NavigationStart } from '@angular/router'; import { isPlatformBrowser } from '@angular/common'; import { filter, map, scan, share, shareReplay } from 'rxjs/operators'; diff --git a/frontend/src/app/services/websocket.service.ts b/frontend/src/app/services/websocket.service.ts index 42f2269ad..3713b8d85 100644 --- a/frontend/src/app/services/websocket.service.ts +++ b/frontend/src/app/services/websocket.service.ts @@ -1,8 +1,8 @@ import { Injectable } from '@angular/core'; import { webSocket, WebSocketSubject } from 'rxjs/webSocket'; -import { WebsocketResponse } from '@app/interfaces/websocket.interface'; +import { WebsocketResponse } from '@interfaces/websocket.interface'; import { StateService } from '@app/services/state.service'; -import { Transaction } from '@app/interfaces/electrs.interface'; +import { Transaction } from '@interfaces/electrs.interface'; import { firstValueFrom, Subscription } from 'rxjs'; import { ApiService } from './api.service'; import { take } from 'rxjs/operators'; diff --git a/frontend/src/app/shared/address-utils.ts b/frontend/src/app/shared/address-utils.ts index f7d89a46d..0a7f2df02 100644 --- a/frontend/src/app/shared/address-utils.ts +++ b/frontend/src/app/shared/address-utils.ts @@ -1,6 +1,6 @@ import '@angular/localize/init'; import { ScriptInfo } from '@app/shared/script.utils'; -import { Vin, Vout } from '@app/interfaces/electrs.interface'; +import { Vin, Vout } from '@interfaces/electrs.interface'; import { BECH32_CHARS_LW, BASE58_CHARS, HEX_CHARS } from '@app/shared/regex.utils'; export type AddressType = 'fee' diff --git a/frontend/src/app/shared/common.utils.ts b/frontend/src/app/shared/common.utils.ts index 43e1cc719..e708789ae 100644 --- a/frontend/src/app/shared/common.utils.ts +++ b/frontend/src/app/shared/common.utils.ts @@ -1,5 +1,5 @@ import { MempoolBlockDelta, MempoolBlockDeltaCompressed, MempoolDeltaChange, TransactionCompressed } from "../interfaces/websocket.interface"; -import { TransactionStripped } from "@app/interfaces/node-api.interface"; +import { TransactionStripped } from "@interfaces/node-api.interface"; import { AmountShortenerPipe } from "@app/shared/pipes/amount-shortener.pipe"; const amountShortenerPipe = new AmountShortenerPipe(); diff --git a/frontend/src/app/shared/components/global-footer/global-footer.component.ts b/frontend/src/app/shared/components/global-footer/global-footer.component.ts index e102becad..2fad96d24 100644 --- a/frontend/src/app/shared/components/global-footer/global-footer.component.ts +++ b/frontend/src/app/shared/components/global-footer/global-footer.component.ts @@ -3,7 +3,7 @@ import { Router, ActivatedRoute } from '@angular/router'; import { Observable, merge, of, Subject, Subscription } from 'rxjs'; import { tap, takeUntil } from 'rxjs/operators'; import { Env, StateService } from '@app/services/state.service'; -import { IBackendInfo } from '@app/interfaces/websocket.interface'; +import { IBackendInfo } from '@interfaces/websocket.interface'; import { LanguageService } from '@app/services/language.service'; import { NavigationService } from '@app/services/navigation.service'; import { StorageService } from '@app/services/storage.service'; diff --git a/frontend/src/app/shared/ord/rune.utils.ts b/frontend/src/app/shared/ord/rune.utils.ts index d6ab42bad..3cd9617e4 100644 --- a/frontend/src/app/shared/ord/rune.utils.ts +++ b/frontend/src/app/shared/ord/rune.utils.ts @@ -1,4 +1,4 @@ -import { Transaction } from '@app/interfaces/electrs.interface'; +import { Transaction } from '@interfaces/electrs.interface'; export const U128_MAX_BIGINT = 0xffff_ffff_ffff_ffff_ffff_ffff_ffff_ffffn; diff --git a/frontend/src/app/shared/transaction.utils.ts b/frontend/src/app/shared/transaction.utils.ts index 1a833b28b..afae1a102 100644 --- a/frontend/src/app/shared/transaction.utils.ts +++ b/frontend/src/app/shared/transaction.utils.ts @@ -1,7 +1,7 @@ import { TransactionFlags } from './filters.utils'; import { getVarIntLength, opcodes, parseMultisigScript, isPoint } from './script.utils'; -import { Transaction } from '@app/interfaces/electrs.interface'; -import { CpfpInfo, RbfInfo, TransactionStripped } from '@app/interfaces/node-api.interface'; +import { Transaction } from '@interfaces/electrs.interface'; +import { CpfpInfo, RbfInfo, TransactionStripped } from '@interfaces/node-api.interface'; import { StateService } from '@app/services/state.service'; // Bitcoin Core default policy settings diff --git a/frontend/tsconfig.app.json b/frontend/tsconfig.app.json index 2e95ae1e2..df2bfb201 100644 --- a/frontend/tsconfig.app.json +++ b/frontend/tsconfig.app.json @@ -6,7 +6,8 @@ "paths": { "@app/*" : ["src/app/*"], "@components/*" : ["src/app/components/*"], - "@environments/*" : ["src/environments/*"] + "@environments/*" : ["src/environments/*"], + "@interfaces/*" : ["src/app/interfaces/*"] } }, "files": [ From a22d07ae607f52972de28bfc0848d8de0ffc6e99 Mon Sep 17 00:00:00 2001 From: wiz Date: Wed, 23 Oct 2024 11:34:59 +0900 Subject: [PATCH 136/147] Rename some more relative paths to use @app path alias --- frontend/src/app/app-routing.module.ts | 42 +++++++++---------- frontend/src/app/bitcoin-graphs.module.ts | 2 +- .../block-overview-graph.component.ts | 10 ++--- .../block-overview-graph/block-scene.ts | 8 ++-- .../block-overview-graph/fast-vertex-array.ts | 2 +- .../block-overview-graph/tx-sprite.ts | 4 +- .../block-overview-graph/tx-view.ts | 10 ++--- .../components/block-overview-graph/utils.ts | 4 +- .../ngx-bootstrap-multiselect.component.ts | 4 +- .../search-filter.pipe.ts | 2 +- .../transaction/liquid-ublinding.ts | 2 +- .../transaction-preview.component.ts | 2 +- .../docs/api-docs/api-docs-nav.component.ts | 4 +- frontend/src/app/graphs/graphs.module.ts | 4 +- .../src/app/graphs/graphs.routing.module.ts | 2 +- .../src/app/interfaces/websocket.interface.ts | 2 +- frontend/src/app/master-page.module.ts | 8 ++-- frontend/src/app/previews.module.ts | 6 +-- frontend/src/app/previews.routing.module.ts | 2 +- frontend/src/app/route-guards.ts | 4 +- frontend/src/app/services/auth.service.ts | 2 +- .../src/app/services/enterprise.service.ts | 6 +-- .../src/app/services/opengraph.service.ts | 4 +- frontend/src/app/services/ord-api.service.ts | 2 +- frontend/src/app/services/price.service.ts | 6 +-- frontend/src/app/services/seo.service.ts | 2 +- frontend/src/app/services/state.service.ts | 2 +- .../src/app/services/websocket.service.ts | 4 +- .../app/shared/pipes/bytes-pipe/bytes.pipe.ts | 2 +- .../shared/pipes/bytes-pipe/vbytes.pipe.ts | 2 +- .../shared/pipes/bytes-pipe/wubytes.pipe.ts | 2 +- frontend/src/app/shared/transaction.utils.ts | 4 +- 32 files changed, 81 insertions(+), 81 deletions(-) diff --git a/frontend/src/app/app-routing.module.ts b/frontend/src/app/app-routing.module.ts index b4c9ed1ac..d1748312d 100644 --- a/frontend/src/app/app-routing.module.ts +++ b/frontend/src/app/app-routing.module.ts @@ -60,12 +60,12 @@ let routes: Routes = [ { path: '', pathMatch: 'full', - loadChildren: () => import('./bitcoin-graphs.module').then(m => m.BitcoinGraphsModule), + loadChildren: () => import('@app/bitcoin-graphs.module').then(m => m.BitcoinGraphsModule), data: { preload: true }, }, { path: '', - loadChildren: () => import('./master-page.module').then(m => m.MasterPageModule), + loadChildren: () => import('@app/master-page.module').then(m => m.MasterPageModule), data: { preload: true }, }, { @@ -83,7 +83,7 @@ let routes: Routes = [ }, { path: '', - loadChildren: () => import('./bitcoin-graphs.module').then(m => m.BitcoinGraphsModule), + loadChildren: () => import('@app/bitcoin-graphs.module').then(m => m.BitcoinGraphsModule), data: { preload: true }, }, { @@ -103,12 +103,12 @@ let routes: Routes = [ { path: '', pathMatch: 'full', - loadChildren: () => import('./bitcoin-graphs.module').then(m => m.BitcoinGraphsModule), + loadChildren: () => import('@app/bitcoin-graphs.module').then(m => m.BitcoinGraphsModule), data: { preload: true }, }, { path: '', - loadChildren: () => import('./master-page.module').then(m => m.MasterPageModule), + loadChildren: () => import('@app/master-page.module').then(m => m.MasterPageModule), data: { preload: true }, }, { @@ -126,7 +126,7 @@ let routes: Routes = [ }, { path: '', - loadChildren: () => import('./bitcoin-graphs.module').then(m => m.BitcoinGraphsModule), + loadChildren: () => import('@app/bitcoin-graphs.module').then(m => m.BitcoinGraphsModule), data: { preload: true }, }, { @@ -138,7 +138,7 @@ let routes: Routes = [ { path: '', pathMatch: 'full', - loadChildren: () => import('./bitcoin-graphs.module').then(m => m.BitcoinGraphsModule), + loadChildren: () => import('@app/bitcoin-graphs.module').then(m => m.BitcoinGraphsModule), data: { preload: true }, }, { @@ -149,7 +149,7 @@ let routes: Routes = [ }, { path: '', - loadChildren: () => import('./master-page.module').then(m => m.MasterPageModule), + loadChildren: () => import('@app/master-page.module').then(m => m.MasterPageModule), data: { preload: true }, }, { @@ -165,19 +165,19 @@ let routes: Routes = [ children: [ { path: '', - loadChildren: () => import('./previews.module').then(m => m.PreviewsModule) + loadChildren: () => import('@app/previews.module').then(m => m.PreviewsModule) }, { path: 'testnet', - loadChildren: () => import('./previews.module').then(m => m.PreviewsModule) + loadChildren: () => import('@app/previews.module').then(m => m.PreviewsModule) }, { path: 'testnet4', - loadChildren: () => import('./previews.module').then(m => m.PreviewsModule) + loadChildren: () => import('@app/previews.module').then(m => m.PreviewsModule) }, { path: 'signet', - loadChildren: () => import('./previews.module').then(m => m.PreviewsModule) + loadChildren: () => import('@app/previews.module').then(m => m.PreviewsModule) }, ], }, @@ -212,7 +212,7 @@ let routes: Routes = [ }, { path: '', - loadChildren: () => import('./bitcoin-graphs.module').then(m => m.BitcoinGraphsModule), + loadChildren: () => import('@app/bitcoin-graphs.module').then(m => m.BitcoinGraphsModule), data: { preload: true }, }, ]; @@ -225,12 +225,12 @@ if (browserWindowEnv && browserWindowEnv.BASE_MODULE === 'liquid') { { path: '', pathMatch: 'full', - loadChildren: () => import('./liquid/liquid-graphs.module').then(m => m.LiquidGraphsModule), + loadChildren: () => import('@app/liquid/liquid-graphs.module').then(m => m.LiquidGraphsModule), data: { preload: true }, }, { path: '', - loadChildren: () => import ('./liquid/liquid-master-page.module').then(m => m.LiquidMasterPageModule), + loadChildren: () => import ('@app/liquid/liquid-master-page.module').then(m => m.LiquidMasterPageModule), data: { preload: true }, }, { @@ -248,7 +248,7 @@ if (browserWindowEnv && browserWindowEnv.BASE_MODULE === 'liquid') { }, { path: '', - loadChildren: () => import('./liquid/liquid-graphs.module').then(m => m.LiquidGraphsModule), + loadChildren: () => import('@app/liquid/liquid-graphs.module').then(m => m.LiquidGraphsModule), data: { preload: true }, }, { @@ -260,12 +260,12 @@ if (browserWindowEnv && browserWindowEnv.BASE_MODULE === 'liquid') { { path: '', pathMatch: 'full', - loadChildren: () => import('./liquid/liquid-graphs.module').then(m => m.LiquidGraphsModule), + loadChildren: () => import('@app/liquid/liquid-graphs.module').then(m => m.LiquidGraphsModule), data: { preload: true }, }, { path: '', - loadChildren: () => import ('./liquid/liquid-master-page.module').then(m => m.LiquidMasterPageModule), + loadChildren: () => import ('@app/liquid/liquid-master-page.module').then(m => m.LiquidMasterPageModule), data: { preload: true }, }, { @@ -281,11 +281,11 @@ if (browserWindowEnv && browserWindowEnv.BASE_MODULE === 'liquid') { children: [ { path: '', - loadChildren: () => import('./previews.module').then(m => m.PreviewsModule) + loadChildren: () => import('@app/previews.module').then(m => m.PreviewsModule) }, { path: 'testnet', - loadChildren: () => import('./previews.module').then(m => m.PreviewsModule) + loadChildren: () => import('@app/previews.module').then(m => m.PreviewsModule) }, ], }, @@ -296,7 +296,7 @@ if (browserWindowEnv && browserWindowEnv.BASE_MODULE === 'liquid') { }, { path: '', - loadChildren: () => import('./liquid/liquid-graphs.module').then(m => m.LiquidGraphsModule), + loadChildren: () => import('@app/liquid/liquid-graphs.module').then(m => m.LiquidGraphsModule), data: { preload: true }, }, ]; diff --git a/frontend/src/app/bitcoin-graphs.module.ts b/frontend/src/app/bitcoin-graphs.module.ts index f161c8531..f5b1557b1 100644 --- a/frontend/src/app/bitcoin-graphs.module.ts +++ b/frontend/src/app/bitcoin-graphs.module.ts @@ -7,7 +7,7 @@ const routes: Routes = [ { path: '', component: MasterPageComponent, - loadChildren: () => import('./graphs/graphs.module').then(m => m.GraphsModule), + loadChildren: () => import('@app/graphs/graphs.module').then(m => m.GraphsModule), data: { preload: true }, } ]; diff --git a/frontend/src/app/components/block-overview-graph/block-overview-graph.component.ts b/frontend/src/app/components/block-overview-graph/block-overview-graph.component.ts index 0a76b3242..d59e38c13 100644 --- a/frontend/src/app/components/block-overview-graph/block-overview-graph.component.ts +++ b/frontend/src/app/components/block-overview-graph/block-overview-graph.component.ts @@ -1,15 +1,15 @@ import { Component, ElementRef, ViewChild, HostListener, Input, Output, EventEmitter, NgZone, AfterViewInit, OnDestroy, OnChanges } from '@angular/core'; import { TransactionStripped } from '@interfaces/node-api.interface'; -import { FastVertexArray } from './fast-vertex-array'; -import BlockScene from './block-scene'; -import TxSprite from './tx-sprite'; -import TxView from './tx-view'; +import { FastVertexArray } from '@components/block-overview-graph/fast-vertex-array'; +import BlockScene from '@components/block-overview-graph/block-scene'; +import TxSprite from '@components/block-overview-graph/tx-sprite'; +import TxView from '@components/block-overview-graph/tx-view'; import { Color, Position } from '@components/block-overview-graph/sprite-types'; import { Price } from '@app/services/price.service'; import { StateService } from '@app/services/state.service'; import { ThemeService } from '@app/services/theme.service'; import { Subscription } from 'rxjs'; -import { defaultColorFunction, setOpacity, defaultAuditColors, defaultColors, ageColorFunction, contrastColorFunction, contrastAuditColors, contrastColors } from './utils'; +import { defaultColorFunction, setOpacity, defaultAuditColors, defaultColors, ageColorFunction, contrastColorFunction, contrastAuditColors, contrastColors } from '@components/block-overview-graph/utils'; import { ActiveFilter, FilterMode, toFlags } from '@app/shared/filters.utils'; import { detectWebGL } from '@app/shared/graphs.utils'; diff --git a/frontend/src/app/components/block-overview-graph/block-scene.ts b/frontend/src/app/components/block-overview-graph/block-scene.ts index 3606cbca6..575f45bd6 100644 --- a/frontend/src/app/components/block-overview-graph/block-scene.ts +++ b/frontend/src/app/components/block-overview-graph/block-scene.ts @@ -1,8 +1,8 @@ -import { FastVertexArray } from './fast-vertex-array'; -import TxView from './tx-view'; +import { FastVertexArray } from '@components/block-overview-graph/fast-vertex-array'; +import TxView from '@components/block-overview-graph/tx-view'; import { TransactionStripped } from '@interfaces/node-api.interface'; -import { Color, Position, Square, ViewUpdateParams } from './sprite-types'; -import { defaultColorFunction, contrastColorFunction } from './utils'; +import { Color, Position, Square, ViewUpdateParams } from '@components/block-overview-graph/sprite-types'; +import { defaultColorFunction, contrastColorFunction } from '@components/block-overview-graph/utils'; import { ThemeService } from '@app/services/theme.service'; export default class BlockScene { diff --git a/frontend/src/app/components/block-overview-graph/fast-vertex-array.ts b/frontend/src/app/components/block-overview-graph/fast-vertex-array.ts index bc0900238..42439ef8d 100644 --- a/frontend/src/app/components/block-overview-graph/fast-vertex-array.ts +++ b/frontend/src/app/components/block-overview-graph/fast-vertex-array.ts @@ -8,7 +8,7 @@ or compacting into a smaller Float32Array when there's space to do so. */ -import TxSprite from './tx-sprite'; +import TxSprite from '@components/block-overview-graph/tx-sprite'; export class FastVertexArray { length: number; diff --git a/frontend/src/app/components/block-overview-graph/tx-sprite.ts b/frontend/src/app/components/block-overview-graph/tx-sprite.ts index 75c1577fc..d713cbd77 100644 --- a/frontend/src/app/components/block-overview-graph/tx-sprite.ts +++ b/frontend/src/app/components/block-overview-graph/tx-sprite.ts @@ -1,5 +1,5 @@ -import { FastVertexArray } from './fast-vertex-array'; -import { InterpolatedAttribute, Attributes, OptionalAttributes, SpriteUpdateParams, Update } from './sprite-types'; +import { FastVertexArray } from '@components/block-overview-graph/fast-vertex-array'; +import { InterpolatedAttribute, Attributes, OptionalAttributes, SpriteUpdateParams, Update } from '@components/block-overview-graph/sprite-types'; const attribKeys = ['a', 'b', 't', 'v']; const updateKeys = ['x', 'y', 's', 'r', 'g', 'b', 'a']; diff --git a/frontend/src/app/components/block-overview-graph/tx-view.ts b/frontend/src/app/components/block-overview-graph/tx-view.ts index b09a0d3e6..53ce684ed 100644 --- a/frontend/src/app/components/block-overview-graph/tx-view.ts +++ b/frontend/src/app/components/block-overview-graph/tx-view.ts @@ -1,8 +1,8 @@ -import TxSprite from './tx-sprite'; -import { FastVertexArray } from './fast-vertex-array'; -import { SpriteUpdateParams, Square, Color, ViewUpdateParams } from './sprite-types'; -import { hexToColor } from './utils'; -import BlockScene from './block-scene'; +import TxSprite from '@components/block-overview-graph/tx-sprite'; +import { FastVertexArray } from '@components/block-overview-graph/fast-vertex-array'; +import { SpriteUpdateParams, Square, Color, ViewUpdateParams } from '@components/block-overview-graph/sprite-types'; +import { hexToColor } from '@components/block-overview-graph/utils'; +import BlockScene from '@components/block-overview-graph/block-scene'; import { TransactionStripped } from '@interfaces/node-api.interface'; import { TransactionFlags } from '@app/shared/filters.utils'; diff --git a/frontend/src/app/components/block-overview-graph/utils.ts b/frontend/src/app/components/block-overview-graph/utils.ts index 91faf553d..f051e9d51 100644 --- a/frontend/src/app/components/block-overview-graph/utils.ts +++ b/frontend/src/app/components/block-overview-graph/utils.ts @@ -1,6 +1,6 @@ import { feeLevels, defaultMempoolFeeColors, contrastMempoolFeeColors } from '@app/app.constants'; -import { Color } from './sprite-types'; -import TxView from './tx-view'; +import { Color } from '@components/block-overview-graph/sprite-types'; +import TxView from '@components/block-overview-graph/tx-view'; export function hexToColor(hex: string): Color { return { diff --git a/frontend/src/app/components/ngx-bootstrap-multiselect/ngx-bootstrap-multiselect.component.ts b/frontend/src/app/components/ngx-bootstrap-multiselect/ngx-bootstrap-multiselect.component.ts index 8c5dcbfcb..bc835b4d2 100644 --- a/frontend/src/app/components/ngx-bootstrap-multiselect/ngx-bootstrap-multiselect.component.ts +++ b/frontend/src/app/components/ngx-bootstrap-multiselect/ngx-bootstrap-multiselect.component.ts @@ -24,8 +24,8 @@ import { } from '@angular/forms'; import { takeUntil } from 'rxjs/operators'; -import { MultiSelectSearchFilter } from './search-filter.pipe'; -import { IMultiSelectOption, IMultiSelectSettings, IMultiSelectTexts, } from './types'; +import { MultiSelectSearchFilter } from '@components/ngx-bootstrap-multiselect/search-filter.pipe'; +import { IMultiSelectOption, IMultiSelectSettings, IMultiSelectTexts, } from '@components/ngx-bootstrap-multiselect/types'; import { Subject, Observable } from 'rxjs'; const MULTISELECT_VALUE_ACCESSOR: any = { diff --git a/frontend/src/app/components/ngx-bootstrap-multiselect/search-filter.pipe.ts b/frontend/src/app/components/ngx-bootstrap-multiselect/search-filter.pipe.ts index 1dfb57ffd..8c9232501 100644 --- a/frontend/src/app/components/ngx-bootstrap-multiselect/search-filter.pipe.ts +++ b/frontend/src/app/components/ngx-bootstrap-multiselect/search-filter.pipe.ts @@ -1,5 +1,5 @@ import { Pipe, PipeTransform } from '@angular/core'; -import { IMultiSelectOption } from './types'; +import { IMultiSelectOption } from '@components/ngx-bootstrap-multiselect/types'; interface StringHashMap { [k: string]: T; diff --git a/frontend/src/app/components/transaction/liquid-ublinding.ts b/frontend/src/app/components/transaction/liquid-ublinding.ts index dcb61fa00..259b06a0b 100644 --- a/frontend/src/app/components/transaction/liquid-ublinding.ts +++ b/frontend/src/app/components/transaction/liquid-ublinding.ts @@ -34,7 +34,7 @@ export class LiquidUnblinding { } async makeCommitmentMap(blinders: any) { - const libwally = await import('./libwally.js'); + const libwally = await import('@components/transaction/libwally.js'); await libwally.load(); const commitments = new Map(); blinders.forEach(b => { diff --git a/frontend/src/app/components/transaction/transaction-preview.component.ts b/frontend/src/app/components/transaction/transaction-preview.component.ts index 60ba4e900..0c51e0064 100644 --- a/frontend/src/app/components/transaction/transaction-preview.component.ts +++ b/frontend/src/app/components/transaction/transaction-preview.component.ts @@ -17,7 +17,7 @@ import { ApiService } from '@app/services/api.service'; import { SeoService } from '@app/services/seo.service'; import { seoDescriptionNetwork } from '@app/shared/common.utils'; import { CpfpInfo } from '@interfaces/node-api.interface'; -import { LiquidUnblinding } from './liquid-ublinding'; +import { LiquidUnblinding } from '@components/transaction/liquid-ublinding'; @Component({ selector: 'app-transaction-preview', diff --git a/frontend/src/app/docs/api-docs/api-docs-nav.component.ts b/frontend/src/app/docs/api-docs/api-docs-nav.component.ts index de882b464..11e39b518 100644 --- a/frontend/src/app/docs/api-docs/api-docs-nav.component.ts +++ b/frontend/src/app/docs/api-docs/api-docs-nav.component.ts @@ -1,7 +1,7 @@ import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core'; import { Env, StateService } from '@app/services/state.service'; -import { restApiDocsData } from './api-docs-data'; -import { faqData } from './api-docs-data'; +import { restApiDocsData } from '@app/docs/api-docs/api-docs-data'; +import { faqData } from '@app/docs/api-docs/api-docs-data'; @Component({ selector: 'app-api-docs-nav', diff --git a/frontend/src/app/graphs/graphs.module.ts b/frontend/src/app/graphs/graphs.module.ts index fdf566aea..4e6b00637 100644 --- a/frontend/src/app/graphs/graphs.module.ts +++ b/frontend/src/app/graphs/graphs.module.ts @@ -1,6 +1,6 @@ import { NgModule } from '@angular/core'; import { NgxEchartsModule } from 'ngx-echarts'; -import { GraphsRoutingModule } from './graphs.routing.module'; +import { GraphsRoutingModule } from '@app/graphs/graphs.routing.module'; import { SharedModule } from '@app/shared/shared.module'; import { AccelerationFeesGraphComponent } from '@components/acceleration/acceleration-fees-graph/acceleration-fees-graph.component'; @@ -89,7 +89,7 @@ import { CommonModule } from '@angular/common'; SharedModule, GraphsRoutingModule, NgxEchartsModule.forRoot({ - echarts: () => import('./echarts').then(m => m.echarts), + echarts: () => import('@app/graphs/echarts').then(m => m.echarts), }) ], exports: [ diff --git a/frontend/src/app/graphs/graphs.routing.module.ts b/frontend/src/app/graphs/graphs.routing.module.ts index b6ba7a86a..886d55072 100644 --- a/frontend/src/app/graphs/graphs.routing.module.ts +++ b/frontend/src/app/graphs/graphs.routing.module.ts @@ -156,7 +156,7 @@ const routes: Routes = [ { path: 'lightning', data: { preload: true, networks: ['bitcoin'] }, - loadChildren: () => import ('./lightning-graphs.module').then(m => m.LightningGraphsModule), + loadChildren: () => import ('@app/graphs/lightning-graphs.module').then(m => m.LightningGraphsModule), }, { path: '', diff --git a/frontend/src/app/interfaces/websocket.interface.ts b/frontend/src/app/interfaces/websocket.interface.ts index e991b2da2..89c8e3884 100644 --- a/frontend/src/app/interfaces/websocket.interface.ts +++ b/frontend/src/app/interfaces/websocket.interface.ts @@ -1,7 +1,7 @@ import { SafeResourceUrl } from '@angular/platform-browser'; import { ILoadingIndicators } from '@app/services/state.service'; import { Transaction } from '@interfaces/electrs.interface'; -import { Acceleration, BlockExtended, DifficultyAdjustment, RbfTree, TransactionStripped } from './node-api.interface'; +import { Acceleration, BlockExtended, DifficultyAdjustment, RbfTree, TransactionStripped } from '@interfaces/node-api.interface'; export interface WebsocketResponse { backend?: 'esplora' | 'electrum' | 'none'; diff --git a/frontend/src/app/master-page.module.ts b/frontend/src/app/master-page.module.ts index feddc9bd9..2ee2e0bd8 100644 --- a/frontend/src/app/master-page.module.ts +++ b/frontend/src/app/master-page.module.ts @@ -2,7 +2,7 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { Routes, RouterModule, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router'; import { MasterPageComponent } from '@components/master-page/master-page.component'; -import { SharedModule } from './shared/shared.module'; +import { SharedModule } from '@app/shared/shared.module'; import { StartComponent } from '@components/start/start.component'; import { PushTransactionComponent } from '@components/push-transaction/push-transaction.component'; @@ -82,16 +82,16 @@ const routes: Routes = [ }, { path: 'docs', - loadChildren: () => import('./docs/docs.module').then(m => m.DocsModule), + loadChildren: () => import('@app/docs/docs.module').then(m => m.DocsModule), data: { preload: true }, }, { path: 'api', - loadChildren: () => import('./docs/docs.module').then(m => m.DocsModule) + loadChildren: () => import('@app/docs/docs.module').then(m => m.DocsModule) }, { path: 'lightning', - loadChildren: () => import('./lightning/lightning.module').then(m => m.LightningModule), + loadChildren: () => import('@app/lightning/lightning.module').then(m => m.LightningModule), data: { preload: browserWindowEnv && browserWindowEnv.LIGHTNING === true, networks: ['bitcoin'] }, }, { diff --git a/frontend/src/app/previews.module.ts b/frontend/src/app/previews.module.ts index 213ba51cc..42ea7ac22 100644 --- a/frontend/src/app/previews.module.ts +++ b/frontend/src/app/previews.module.ts @@ -1,9 +1,9 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; -import { SharedModule } from './shared/shared.module'; +import { SharedModule } from '@app/shared/shared.module'; import { RouterModule } from '@angular/router'; -import { GraphsModule } from './graphs/graphs.module'; -import { PreviewsRoutingModule } from './previews.routing.module'; +import { GraphsModule } from '@app/graphs/graphs.module'; +import { PreviewsRoutingModule } from '@app/previews.routing.module'; import { TransactionPreviewComponent } from '@components/transaction/transaction-preview.component'; import { BlockPreviewComponent } from '@components/block/block-preview.component'; import { AddressPreviewComponent } from '@components/address/address-preview.component'; diff --git a/frontend/src/app/previews.routing.module.ts b/frontend/src/app/previews.routing.module.ts index a2ced3e10..92ea113b8 100644 --- a/frontend/src/app/previews.routing.module.ts +++ b/frontend/src/app/previews.routing.module.ts @@ -31,7 +31,7 @@ const routes: Routes = [ }, { path: 'lightning', - loadChildren: () => import('./lightning/lightning-previews.module').then(m => m.LightningPreviewsModule), + loadChildren: () => import('@app/lightning/lightning-previews.module').then(m => m.LightningPreviewsModule), data: { preload: true }, }, ], diff --git a/frontend/src/app/route-guards.ts b/frontend/src/app/route-guards.ts index 7ed44176a..780e997db 100644 --- a/frontend/src/app/route-guards.ts +++ b/frontend/src/app/route-guards.ts @@ -1,6 +1,6 @@ import { Injectable, inject } from '@angular/core'; import { CanMatchFn, Route, Router, UrlSegment } from '@angular/router'; -import { NavigationService } from './services/navigation.service'; +import { NavigationService } from '@app/services/navigation.service'; @Injectable({ providedIn: 'root' @@ -20,4 +20,4 @@ class GuardService { export const TrackerGuard: CanMatchFn = (route: Route, segments: UrlSegment[]): boolean => { return inject(GuardService).trackerGuard(route, segments); -}; \ No newline at end of file +}; diff --git a/frontend/src/app/services/auth.service.ts b/frontend/src/app/services/auth.service.ts index 100ddbdc4..db910779e 100644 --- a/frontend/src/app/services/auth.service.ts +++ b/frontend/src/app/services/auth.service.ts @@ -1,7 +1,7 @@ import { Injectable } from '@angular/core'; import { Router } from '@angular/router'; import { catchError, map, Observable, of, ReplaySubject, switchMap, tap } from 'rxjs'; -import { ServicesApiServices } from './services-api.service'; +import { ServicesApiServices } from '@app/services/services-api.service'; export interface IAuth { token: string; diff --git a/frontend/src/app/services/enterprise.service.ts b/frontend/src/app/services/enterprise.service.ts index 4ea890f1f..d7695b94f 100644 --- a/frontend/src/app/services/enterprise.service.ts +++ b/frontend/src/app/services/enterprise.service.ts @@ -1,8 +1,8 @@ import { DOCUMENT } from '@angular/common'; import { Inject, Injectable } from '@angular/core'; -import { ApiService } from './api.service'; -import { SeoService } from './seo.service'; -import { StateService } from './state.service'; +import { ApiService } from '@app/services/api.service'; +import { SeoService } from '@app/services/seo.service'; +import { StateService } from '@app/services/state.service'; import { ActivatedRoute } from '@angular/router'; import { BehaviorSubject } from 'rxjs'; diff --git a/frontend/src/app/services/opengraph.service.ts b/frontend/src/app/services/opengraph.service.ts index 5e429ed70..e969dd07a 100644 --- a/frontend/src/app/services/opengraph.service.ts +++ b/frontend/src/app/services/opengraph.service.ts @@ -3,8 +3,8 @@ import { Meta } from '@angular/platform-browser'; import { Router, ActivatedRoute, NavigationEnd } from '@angular/router'; import { filter, map, switchMap } from 'rxjs/operators'; import { combineLatest } from 'rxjs'; -import { StateService } from './state.service'; -import { LanguageService } from './language.service'; +import { StateService } from '@app/services/state.service'; +import { LanguageService } from '@app/services/language.service'; @Injectable({ providedIn: 'root' diff --git a/frontend/src/app/services/ord-api.service.ts b/frontend/src/app/services/ord-api.service.ts index e2dffba8f..ae0076906 100644 --- a/frontend/src/app/services/ord-api.service.ts +++ b/frontend/src/app/services/ord-api.service.ts @@ -4,7 +4,7 @@ import { Inscription } from '@app/shared/ord/inscription.utils'; import { Transaction } from '@interfaces/electrs.interface'; import { getNextInscriptionMark, hexToBytes, extractInscriptionData } from '@app/shared/ord/inscription.utils'; import { decipherRunestone, Runestone, Etching, UNCOMMON_GOODS } from '@app/shared/ord/rune.utils'; -import { ElectrsApiService } from './electrs-api.service'; +import { ElectrsApiService } from '@app/services/electrs-api.service'; @Injectable({ diff --git a/frontend/src/app/services/price.service.ts b/frontend/src/app/services/price.service.ts index c342796e0..e5a0c86c8 100644 --- a/frontend/src/app/services/price.service.ts +++ b/frontend/src/app/services/price.service.ts @@ -1,7 +1,7 @@ import { Injectable } from '@angular/core'; import { map, Observable, of, share, shareReplay, tap } from 'rxjs'; -import { ApiService } from './api.service'; -import { StateService } from './state.service'; +import { ApiService } from '@app/services/api.service'; +import { StateService } from '@app/services/state.service'; // nodejs backend interfaces export interface ApiPrice { @@ -320,4 +320,4 @@ export class PriceService { return prices; })); } -} \ No newline at end of file +} diff --git a/frontend/src/app/services/seo.service.ts b/frontend/src/app/services/seo.service.ts index af12e8b47..e5ede4db3 100644 --- a/frontend/src/app/services/seo.service.ts +++ b/frontend/src/app/services/seo.service.ts @@ -2,7 +2,7 @@ import { Injectable } from '@angular/core'; import { Title, Meta } from '@angular/platform-browser'; import { ActivatedRoute, NavigationEnd, Router } from '@angular/router'; import { filter, map, switchMap } from 'rxjs'; -import { StateService } from './state.service'; +import { StateService } from '@app/services/state.service'; @Injectable({ providedIn: 'root' diff --git a/frontend/src/app/services/state.service.ts b/frontend/src/app/services/state.service.ts index dd7b642aa..21c865f04 100644 --- a/frontend/src/app/services/state.service.ts +++ b/frontend/src/app/services/state.service.ts @@ -6,7 +6,7 @@ import { Acceleration, AccelerationPosition, BlockExtended, CpfpInfo, Difficulty import { Router, NavigationStart } from '@angular/router'; import { isPlatformBrowser } from '@angular/common'; import { filter, map, scan, share, shareReplay } from 'rxjs/operators'; -import { StorageService } from './storage.service'; +import { StorageService } from '@app/services/storage.service'; import { hasTouchScreen } from '@app/shared/pipes/bytes-pipe/utils'; import { ActiveFilter } from '@app/shared/filters.utils'; diff --git a/frontend/src/app/services/websocket.service.ts b/frontend/src/app/services/websocket.service.ts index 3713b8d85..5ec13c03f 100644 --- a/frontend/src/app/services/websocket.service.ts +++ b/frontend/src/app/services/websocket.service.ts @@ -4,10 +4,10 @@ import { WebsocketResponse } from '@interfaces/websocket.interface'; import { StateService } from '@app/services/state.service'; import { Transaction } from '@interfaces/electrs.interface'; import { firstValueFrom, Subscription } from 'rxjs'; -import { ApiService } from './api.service'; +import { ApiService } from '@app/services/api.service'; import { take } from 'rxjs/operators'; import { TransferState, makeStateKey } from '@angular/core'; -import { CacheService } from './cache.service'; +import { CacheService } from '@app/services/cache.service'; import { uncompressDeltaChange, uncompressTx } from '@app/shared/common.utils'; const OFFLINE_RETRY_AFTER_MS = 2000; diff --git a/frontend/src/app/shared/pipes/bytes-pipe/bytes.pipe.ts b/frontend/src/app/shared/pipes/bytes-pipe/bytes.pipe.ts index b2140f0dc..7870572bb 100644 --- a/frontend/src/app/shared/pipes/bytes-pipe/bytes.pipe.ts +++ b/frontend/src/app/shared/pipes/bytes-pipe/bytes.pipe.ts @@ -1,6 +1,6 @@ /* tslint:disable */ import { Pipe, PipeTransform } from '@angular/core'; -import { isNumberFinite, isPositive, isInteger, toDecimal, toSigFigs } from './utils'; +import { isNumberFinite, isPositive, isInteger, toDecimal, toSigFigs } from '@app/shared/pipes/bytes-pipe/utils'; export type ByteUnit = 'B' | 'kB' | 'MB' | 'GB' | 'TB'; diff --git a/frontend/src/app/shared/pipes/bytes-pipe/vbytes.pipe.ts b/frontend/src/app/shared/pipes/bytes-pipe/vbytes.pipe.ts index b88791851..4af011201 100644 --- a/frontend/src/app/shared/pipes/bytes-pipe/vbytes.pipe.ts +++ b/frontend/src/app/shared/pipes/bytes-pipe/vbytes.pipe.ts @@ -1,6 +1,6 @@ /* tslint:disable */ import { Pipe, PipeTransform } from '@angular/core'; -import { isNumberFinite, isPositive, isInteger, toDecimal } from './utils'; +import { isNumberFinite, isPositive, isInteger, toDecimal } from '@app/shared/pipes/bytes-pipe/utils'; export type ByteUnit = 'vB' | 'kvB' | 'MvB' | 'GvB' | 'TvB'; diff --git a/frontend/src/app/shared/pipes/bytes-pipe/wubytes.pipe.ts b/frontend/src/app/shared/pipes/bytes-pipe/wubytes.pipe.ts index b6566ac0a..ab82dea01 100644 --- a/frontend/src/app/shared/pipes/bytes-pipe/wubytes.pipe.ts +++ b/frontend/src/app/shared/pipes/bytes-pipe/wubytes.pipe.ts @@ -1,6 +1,6 @@ /* tslint:disable */ import { Pipe, PipeTransform } from '@angular/core'; -import { isNumberFinite, isPositive, isInteger, toDecimal } from './utils'; +import { isNumberFinite, isPositive, isInteger, toDecimal } from '@app/shared/pipes/bytes-pipe/utils'; export type ByteUnit = 'WU' | 'kWU' | 'MWU' | 'GWU' | 'TWU'; diff --git a/frontend/src/app/shared/transaction.utils.ts b/frontend/src/app/shared/transaction.utils.ts index afae1a102..b3678986b 100644 --- a/frontend/src/app/shared/transaction.utils.ts +++ b/frontend/src/app/shared/transaction.utils.ts @@ -1,5 +1,5 @@ -import { TransactionFlags } from './filters.utils'; -import { getVarIntLength, opcodes, parseMultisigScript, isPoint } from './script.utils'; +import { TransactionFlags } from '@app/shared/filters.utils'; +import { getVarIntLength, opcodes, parseMultisigScript, isPoint } from '@app/shared/script.utils'; import { Transaction } from '@interfaces/electrs.interface'; import { CpfpInfo, RbfInfo, TransactionStripped } from '@interfaces/node-api.interface'; import { StateService } from '@app/services/state.service'; From 23475c7a1b4223321b1a8dfa09c4ed2546a8096e Mon Sep 17 00:00:00 2001 From: Mononaut Date: Wed, 23 Oct 2024 08:56:27 +0000 Subject: [PATCH 137/147] Refactor transaction page component --- .../transaction-details.component.html | 324 ++++++++++++++++ .../transaction-details.component.scss | 183 +++++++++ .../transaction-details.component.ts | 52 +++ .../transaction/transaction-extras.module.ts | 11 + .../transaction/transaction.component.html | 355 ++---------------- .../transaction/transaction.component.scss | 18 +- .../transaction/transaction.component.ts | 2 +- .../transaction/transaction.module.ts | 5 + 8 files changed, 609 insertions(+), 341 deletions(-) create mode 100644 frontend/src/app/components/transaction/transaction-details/transaction-details.component.html create mode 100644 frontend/src/app/components/transaction/transaction-details/transaction-details.component.scss create mode 100644 frontend/src/app/components/transaction/transaction-details/transaction-details.component.ts create mode 100644 frontend/src/app/components/transaction/transaction-extras.module.ts diff --git a/frontend/src/app/components/transaction/transaction-details/transaction-details.component.html b/frontend/src/app/components/transaction/transaction-details/transaction-details.component.html new file mode 100644 index 000000000..d86d32a50 --- /dev/null +++ b/frontend/src/app/components/transaction/transaction-details/transaction-details.component.html @@ -0,0 +1,324 @@ +
+
+ @if (isMobile) { +
+ + + + + +
+
+ } @else { +
+ + + + +
+
+
+ + + + +
+
+ } +
+
+ + + @if (tx?.status?.confirmed) { + + + } @else { + + + } + + @if (tx?.status?.confirmed) { + + } + + + + + + + @if (!isLoadingTx && !tx?.status?.confirmed && isAcceleration && ((cpfpInfo && hasEffectiveFeeRate) || accelerationInfo)) { + + } @else { + + } + @if (tx?.status?.confirmed) { + + } + + + + @if (!isLoadingTx) { +
Timestamp + ‎{{ tx.status.block_time * 1000 | date:'yyyy-MM-dd HH:mm:ss' }} +
+ () +
+
Confirmed
First seen
First seen
Features + +
Audit + + @if (auditStatus.coinbase) { + Coinbase + } @else if (auditStatus.expected) { + Expected in Block + } @else if (auditStatus.seen) { + Seen in Mempool + } @else if (!auditStatus.conflict) { + Not seen in Mempool + } + @if (auditStatus.added) { + Added + } + @if (auditStatus.prioritized) { + Prioritized + } + @if (auditStatus.conflict) { + Conflict + } + +
ETA + + @if (network === 'liquid' || network === 'liquidtestnet') { + + } @else { + + @if (eta.blocks >= 7) { + Not any time soon + } @else { + + } + @if (!tx?.acceleration && acceleratorAvailable && accelerateCtaType === 'button' && !showAccelerationSummary && notAcceleratedOnLoad) { + + } + + } + + + + +
+ + + @if (isAcceleration) { + Accelerated + } + + {{ filter.label }} + +
Fee{{ tx.fee | number }} sats + @if (accelerationInfo?.bidBoost ?? tx.feeDelta > 0) { + +{{ accelerationInfo?.bidBoost ?? tx.feeDelta | number }} sats + } + +
Fee rate + + @if (tx?.status?.confirmed && tx.fee && !hasEffectiveFeeRate && !accelerationInfo) { +   + + } +
Accelerated fee rateEffective fee rate +
+ @if (accelerationInfo?.acceleratedFeeRate && (!tx.effectiveFeePerVsize || accelerationInfo.acceleratedFeeRate >= tx.effectiveFeePerVsize || tx.acceleration)) { + + } @else { + + } + + @if (tx?.status?.confirmed && !tx.acceleration && !accelerationInfo && tx.fee && tx.effectiveFeePerVsize) { + + } +
+ @if (hasCpfp) { + + } +
+ +
Miner + + + @if (pool.minerNames[1].length > 16) { + {{ pool.minerNames[1].slice(0, 15) }}… + } @else { + {{ pool.minerNames[1] }} + } + + + {{ pool.name }} + + + +
- - - - -
-
- } @else { -
- - - - -
-
-
- - - - -
-
- } -
-
+ } @@ -416,299 +416,4 @@ -
- - - @if (tx?.status?.confirmed) { - - - } @else { - - - } - - @if (tx?.status?.confirmed) { - - } - - - - - - - @if (!isLoadingTx && !tx?.status?.confirmed && isAcceleration && ((cpfpInfo && hasEffectiveFeeRate) || accelerationInfo)) { - - } @else { - - } - @if (tx?.status?.confirmed) { - - } - - - - @if (!isLoadingTx) { - - Timestamp - - ‎{{ tx.status.block_time * 1000 | date:'yyyy-MM-dd HH:mm:ss' }} -
- () -
- - - } @else { - - } -
- - - @if (!isLoadingTx) { - @if (transactionTime > 0) { - - Confirmed - - - } - } @else { - - } - - - - @if (isLoadingTx) { - - } @else if (transactionTime > 0) { - - First seen - - - } @else if (isLoadingFirstSeen) { - - First seen - - - } - - - - @if (network !== 'liquid' && network !== 'liquidtestnet') { - @if (!isLoadingTx) { - @if (featuresEnabled) { - - Features - - - - - } - } @else { - - } - } - - - - @if (network === '') { - @if (!isLoadingTx) { - @if (auditStatus) { - - Audit - - - @if (auditStatus.coinbase) { - Coinbase - } @else if (auditStatus.expected) { - Expected in Block - } @else if (auditStatus.seen) { - Seen in Mempool - } @else if (!auditStatus.conflict) { - Not seen in Mempool - } - @if (auditStatus.added) { - Added - } - @if (auditStatus.prioritized) { - Prioritized - } - @if (auditStatus.conflict) { - Conflict - } - - - - } - } @else { - - } - } - - - - @if (!isLoadingTx) { - @if (!replaced && !isCached) { - - ETA - - - @if (network === 'liquid' || network === 'liquidtestnet') { - - } @else { - - @if (eta.blocks >= 7) { - Not any time soon - } @else { - - } - @if (!tx?.acceleration && acceleratorAvailable && accelerateCtaType === 'button' && !showAccelerationSummary && notAcceleratedOnLoad) { - - } - - } - - - - - - - } - } @else { - - } - - - - @if (!isLoadingTx) { - @if (isAcceleration || filters.length) { - - - - - - @if (isAcceleration) { - Accelerated - } - - {{ filter.label }} - - - - } - } - - - - @if (!isLoadingTx) { - - Fee - {{ tx.fee | number }} sats - @if (accelerationInfo?.bidBoost ?? tx.feeDelta > 0) { - +{{ accelerationInfo?.bidBoost ?? tx.feeDelta | number }} sats - } - - - - } @else { - - } - - - - @if (!isLoadingTx) { - - Fee rate - - - @if (tx?.status?.confirmed && tx.fee && !hasEffectiveFeeRate && !accelerationInfo) { -   - - } - - - } @else { - - } - - - - @if (!isLoadingTx) { - @if ((cpfpInfo && hasEffectiveFeeRate) || accelerationInfo) { - - @if (isAcceleration) { - Accelerated fee rate - } @else { - Effective fee rate - } - -
- @if (accelerationInfo?.acceleratedFeeRate && (!tx.effectiveFeePerVsize || accelerationInfo.acceleratedFeeRate >= tx.effectiveFeePerVsize || tx.acceleration)) { - - } @else { - - } - - @if (tx?.status?.confirmed && !tx.acceleration && !accelerationInfo && tx.fee && tx.effectiveFeePerVsize) { - - } -
- @if (hasCpfp) { - - } - - - } - } @else { - - } -
- - - - - - - - - - - - @if (network === '') { - @if (!isLoadingTx) { - - Miner - @if (pool) { - - - - @if (pool.minerNames[1].length > 16) { - {{ pool.minerNames[1].slice(0, 15) }}… - } @else { - {{ pool.minerNames[1] }} - } - - - {{ pool.name }} - - - } @else { - - - - } - - } @else { - - } - } - - - - - - - \ No newline at end of file +
\ No newline at end of file diff --git a/frontend/src/app/components/transaction/transaction.component.scss b/frontend/src/app/components/transaction/transaction.component.scss index 42325a1b4..7125a6b46 100644 --- a/frontend/src/app/components/transaction/transaction.component.scss +++ b/frontend/src/app/components/transaction/transaction.component.scss @@ -18,6 +18,7 @@ line-height: 1; } } + .tx-link { display: flex; flex-direction: row; @@ -60,19 +61,6 @@ top: -1px; } -.miner-name { - margin-right: 4px; - vertical-align: top; -} - -.pool-logo { - width: 25px; - height: 25px; - position: relative; - top: -1px; - margin-right: 2px; -} - .badge.badge-accelerated { background-color: var(--tertiary); color: white; @@ -94,7 +82,7 @@ margin-bottom: 40px; } -.row{ +.row { flex-direction: column; @media (min-width: 850px) { flex-direction: row; @@ -337,4 +325,4 @@ .disabled { opacity: 0.5; pointer-events: none; -} \ No newline at end of file +} diff --git a/frontend/src/app/components/transaction/transaction.component.ts b/frontend/src/app/components/transaction/transaction.component.ts index f17fc558f..5f5ef4fa7 100644 --- a/frontend/src/app/components/transaction/transaction.component.ts +++ b/frontend/src/app/components/transaction/transaction.component.ts @@ -38,7 +38,7 @@ import { ZONE_SERVICE } from '@app/injection-tokens'; import { MiningService, MiningStats } from '@app/services/mining.service'; import { ETA, EtaService } from '@app/services/eta.service'; -interface Pool { +export interface Pool { id: number; name: string; slug: string; diff --git a/frontend/src/app/components/transaction/transaction.module.ts b/frontend/src/app/components/transaction/transaction.module.ts index 5313b6a44..80de0cf40 100644 --- a/frontend/src/app/components/transaction/transaction.module.ts +++ b/frontend/src/app/components/transaction/transaction.module.ts @@ -2,8 +2,10 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { Routes, RouterModule } from '@angular/router'; import { TransactionComponent } from '@components/transaction/transaction.component'; +import { TransactionDetailsComponent } from '@components/transaction/transaction-details/transaction-details.component'; import { SharedModule } from '@app/shared/shared.module'; import { TxBowtieModule } from '@components/tx-bowtie-graph/tx-bowtie.module'; +import { TransactionExtrasModule } from '@components/transaction/transaction-extras.module'; import { GraphsModule } from '@app/graphs/graphs.module'; import { AccelerateCheckout } from '@components/accelerate-checkout/accelerate-checkout.component'; import { AccelerateFeeGraphComponent } from '@components/accelerate-checkout/accelerate-fee-graph.component'; @@ -40,14 +42,17 @@ export class TransactionRoutingModule { } SharedModule, GraphsModule, TxBowtieModule, + TransactionExtrasModule, ], declarations: [ TransactionComponent, + TransactionDetailsComponent, AccelerateCheckout, AccelerateFeeGraphComponent, ], exports: [ TransactionComponent, + TransactionDetailsComponent, AccelerateCheckout, AccelerateFeeGraphComponent, ] From 96c2b0a2f7cfe0d0208030ddca4a5403077fb187 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Wed, 23 Oct 2024 12:28:40 +0000 Subject: [PATCH 138/147] fix cpfp button --- .../transaction-details/transaction-details.component.html | 2 +- .../transaction-details/transaction-details.component.ts | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/frontend/src/app/components/transaction/transaction-details/transaction-details.component.html b/frontend/src/app/components/transaction/transaction-details/transaction-details.component.html index d86d32a50..7311bf8f4 100644 --- a/frontend/src/app/components/transaction/transaction-details/transaction-details.component.html +++ b/frontend/src/app/components/transaction/transaction-details/transaction-details.component.html @@ -267,7 +267,7 @@ }
@if (hasCpfp) { - + } diff --git a/frontend/src/app/components/transaction/transaction-details/transaction-details.component.ts b/frontend/src/app/components/transaction/transaction-details/transaction-details.component.ts index 59770d97e..fad607ffb 100644 --- a/frontend/src/app/components/transaction/transaction-details/transaction-details.component.ts +++ b/frontend/src/app/components/transaction/transaction-details/transaction-details.component.ts @@ -41,6 +41,7 @@ export class TransactionDetailsComponent implements OnInit { @Input() ETA$: Observable; @Output() accelerateClicked = new EventEmitter(); + @Output() toggleCpfp$ = new EventEmitter(); constructor() {} @@ -49,4 +50,8 @@ export class TransactionDetailsComponent implements OnInit { onAccelerateClicked(): void { this.accelerateClicked.emit(true); } + + toggleCpfp(): void { + this.toggleCpfp$.emit(); + } } From cb63d17a2fccb6a5ddffd129494e0bc0554f4037 Mon Sep 17 00:00:00 2001 From: wiz Date: Wed, 23 Oct 2024 22:12:26 +0900 Subject: [PATCH 139/147] ops: Don't always set frameoptions in nginx --- production/nginx/server-common.conf | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/production/nginx/server-common.conf b/production/nginx/server-common.conf index 2f84cda7f..9a2a582c0 100644 --- a/production/nginx/server-common.conf +++ b/production/nginx/server-common.conf @@ -8,8 +8,11 @@ add_header Onion-Location http://$onion.onion$request_uri; add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"; # generate frame configuration from origin header -set $frameOptions "DENY"; -set $contentSecurityPolicy "frame-ancestors 'none'"; +if ($frameOptions = '') +{ + set $frameOptions "DENY"; + set $contentSecurityPolicy "frame-ancestors 'none'"; +} # used for iframes on https://mempool.space/network if ($http_referer ~ ^https://mempool.space/) From 1a7f47522018d4a205fb0e38f3aaa34ec5eaf025 Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Wed, 23 Oct 2024 22:51:04 +0900 Subject: [PATCH 140/147] make prod domains configurable --- .../accelerate-checkout/accelerate-checkout.component.ts | 9 ++------- frontend/src/app/services/state.service.ts | 6 ++++++ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts b/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts index e41fdc13e..9d2d2ad46 100644 --- a/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts +++ b/frontend/src/app/components/accelerate-checkout/accelerate-checkout.component.ts @@ -84,13 +84,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { timePaid: number = 0; // time acceleration requested math = Math; isMobile: boolean = window.innerWidth <= 767.98; - isProdDomain = ['mempool.space', - 'mempool-staging.va1.mempool.space', - 'mempool-staging.fmt.mempool.space', - 'mempool-staging.fra.mempool.space', - 'mempool-staging.tk7.mempool.space', - 'mempool-staging.sg1.mempool.space' - ].indexOf(document.location.hostname) > -1; + isProdDomain = false; private _step: CheckoutStep = 'summary'; simpleMode: boolean = true; @@ -143,6 +137,7 @@ export class AccelerateCheckout implements OnInit, OnDestroy { private authService: AuthServiceMempool, private enterpriseService: EnterpriseService, ) { + this.isProdDomain = this.stateService.env.PROD_DOMAINS.indexOf(document.location.hostname) > -1; this.accelerationUUID = insecureRandomUUID(); // Check if Apple Pay available diff --git a/frontend/src/app/services/state.service.ts b/frontend/src/app/services/state.service.ts index 21c865f04..8dd17cf75 100644 --- a/frontend/src/app/services/state.service.ts +++ b/frontend/src/app/services/state.service.ts @@ -78,6 +78,7 @@ export interface Env { PACKAGE_JSON_VERSION_MEMPOOL_SPACE?: string; SERVICES_API?: string; customize?: Customization; + PROD_DOMAINS: string[]; } const defaultEnv: Env = { @@ -113,6 +114,7 @@ const defaultEnv: Env = { 'PUBLIC_ACCELERATIONS': false, 'ADDITIONAL_CURRENCIES': false, 'SERVICES_API': 'https://mempool.space/api/v1/services', + 'PROD_DOMAINS': [], }; @Injectable({ @@ -206,6 +208,10 @@ export class StateService { const browserWindow = window || {}; // @ts-ignore const browserWindowEnv = browserWindow.__env || {}; + if (browserWindowEnv.PROD_DOMAINS && typeof(browserWindowEnv.PROD_DOMAINS) === 'string') { + browserWindowEnv.PROD_DOMAINS = browserWindowEnv.PROD_DOMAINS.split(','); + } + this.env = Object.assign(defaultEnv, browserWindowEnv); if (defaultEnv.BASE_MODULE !== 'mempool') { From 99cc47cf00c35ab73cd652c6da63cc7736627224 Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Thu, 24 Oct 2024 16:52:47 +0900 Subject: [PATCH 141/147] [demo] better? demo mode --- .../app/components/graphs/graphs.component.ts | 8 +++++- .../app/components/start/start.component.ts | 27 ++++--------------- .../lightning-wrapper.component.ts | 6 +++++ frontend/src/app/shared/common.utils.ts | 16 +++++++++++ 4 files changed, 34 insertions(+), 23 deletions(-) diff --git a/frontend/src/app/components/graphs/graphs.component.ts b/frontend/src/app/components/graphs/graphs.component.ts index b2acac85d..c8c620f54 100644 --- a/frontend/src/app/components/graphs/graphs.component.ts +++ b/frontend/src/app/components/graphs/graphs.component.ts @@ -1,6 +1,8 @@ import { Component, OnInit } from '@angular/core'; import { StateService } from '@app/services/state.service'; import { WebsocketService } from '@app/services/websocket.service'; +import { Router, ActivatedRoute } from '@angular/router'; +import { handleDemoRedirect } from '../../shared/common.utils'; @Component({ selector: 'app-graphs', @@ -13,7 +15,9 @@ export class GraphsComponent implements OnInit { constructor( public stateService: StateService, - private websocketService: WebsocketService + private websocketService: WebsocketService, + private router: Router, + private route: ActivatedRoute ) { } ngOnInit(): void { @@ -22,5 +26,7 @@ export class GraphsComponent implements OnInit { if (this.stateService.env.ACCELERATOR === true && (this.stateService.env.MINING_DASHBOARD === true || this.stateService.env.LIGHTNING === true)) { this.flexWrap = true; } + + handleDemoRedirect(this.route, this.router); } } diff --git a/frontend/src/app/components/start/start.component.ts b/frontend/src/app/components/start/start.component.ts index 236a8cda2..31317cab5 100644 --- a/frontend/src/app/components/start/start.component.ts +++ b/frontend/src/app/components/start/start.component.ts @@ -3,8 +3,8 @@ import { Subscription } from 'rxjs'; import { MarkBlockState, StateService } from '@app/services/state.service'; import { specialBlocks } from '@app/app.constants'; import { BlockExtended } from '@interfaces/node-api.interface'; -import { Router } from '@angular/router'; -import { sleep$ } from '@app/shared/common.utils'; +import { Router, ActivatedRoute } from '@angular/router'; +import { handleDemoRedirect } from '../../shared/common.utils'; @Component({ selector: 'app-start', @@ -63,7 +63,8 @@ export class StartComponent implements OnInit, AfterViewChecked, OnDestroy { constructor( public stateService: StateService, private cd: ChangeDetectorRef, - private router: Router + private router: Router, + private route: ActivatedRoute ) { this.isiOS = ['iPhone','iPod','iPad'].includes((navigator as any)?.userAgentData?.platform || navigator.platform); if (this.stateService.network === '') { @@ -71,26 +72,8 @@ export class StartComponent implements OnInit, AfterViewChecked, OnDestroy { } } - async demoMode() { - // @ts-ignore - if (!window.demoMode) { - // @ts-ignore - window.demoMode = true; - const paths = ['', 'acceleration', 'mining', 'lightning']; - let i = 0; - while ('Bitcoin is still alive') { - i = (i + 1) % paths.length; - this.router.navigateByUrl(paths[i]); - await sleep$(30000); - } - } - } - ngOnInit() { - // @ts-ignore - if (window.location.search === '?demo=1') { - this.demoMode(); - } + handleDemoRedirect(this.route, this.router); this.firstPageWidth = 40 + (this.blockWidth * this.dynamicBlocksAmount); this.blockCounterSubscription = this.stateService.blocks$.subscribe((blocks) => { diff --git a/frontend/src/app/lightning/lightning-wrapper/lightning-wrapper.component.ts b/frontend/src/app/lightning/lightning-wrapper/lightning-wrapper.component.ts index 3e83f0785..220e7eebd 100644 --- a/frontend/src/app/lightning/lightning-wrapper/lightning-wrapper.component.ts +++ b/frontend/src/app/lightning/lightning-wrapper/lightning-wrapper.component.ts @@ -1,5 +1,7 @@ import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; import { WebsocketService } from '@app/services/websocket.service'; +import { Router, ActivatedRoute } from '@angular/router'; +import { handleDemoRedirect } from '../../shared/common.utils'; @Component({ selector: 'app-lightning-wrapper', @@ -11,10 +13,14 @@ export class LightningWrapperComponent implements OnInit { constructor( private websocketService: WebsocketService, + private router: Router, + private route: ActivatedRoute ) { } ngOnInit() { this.websocketService.want(['blocks']); + + handleDemoRedirect(this.route, this.router); } } diff --git a/frontend/src/app/shared/common.utils.ts b/frontend/src/app/shared/common.utils.ts index e708789ae..11581ee03 100644 --- a/frontend/src/app/shared/common.utils.ts +++ b/frontend/src/app/shared/common.utils.ts @@ -1,6 +1,7 @@ import { MempoolBlockDelta, MempoolBlockDeltaCompressed, MempoolDeltaChange, TransactionCompressed } from "../interfaces/websocket.interface"; import { TransactionStripped } from "@interfaces/node-api.interface"; import { AmountShortenerPipe } from "@app/shared/pipes/amount-shortener.pipe"; +import { Router, ActivatedRoute } from '@angular/router'; const amountShortenerPipe = new AmountShortenerPipe(); export function isMobile(): boolean { @@ -234,6 +235,21 @@ export function sleep$(ms: number): Promise { }); } +export function handleDemoRedirect(route: ActivatedRoute, router: Router) { + route.queryParams + .subscribe(params => { + if (params.next) { + const path = ['/', '/acceleration', '/mining', '/lightning', '/graphs']; + const index = path.indexOf(params.next); + if (index >= 0) { + const nextPath = path[(index + 1) % path.length]; + setTimeout(() => { window.location.replace(`${params.next}?next=${nextPath}`) }, 3000); + } + } + } + ); +} + // https://stackoverflow.com/a/60467595 export function md5(inputString): string { var hc="0123456789abcdef"; From c950e3d0aea7ec898f2bdee626dab1c0fb1de67c Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Fri, 25 Oct 2024 13:54:40 +0900 Subject: [PATCH 142/147] [core routes] /api/internal -> /api/v1/internal --- backend/src/api/bitcoin/bitcoin-core.routes.ts | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/backend/src/api/bitcoin/bitcoin-core.routes.ts b/backend/src/api/bitcoin/bitcoin-core.routes.ts index 7933dc17b..14640515d 100644 --- a/backend/src/api/bitcoin/bitcoin-core.routes.ts +++ b/backend/src/api/bitcoin/bitcoin-core.routes.ts @@ -11,15 +11,15 @@ class BitcoinBackendRoutes { public initRoutes(app: Application) { app - .get('/api/internal/bitcoin-core/' + 'get-mempool-entry', this.disableCache, this.$getMempoolEntry) - .post('/api/internal/bitcoin-core/' + 'decode-raw-transaction', this.disableCache, this.$decodeRawTransaction) - .get('/api/internal/bitcoin-core/' + 'get-raw-transaction', this.disableCache, this.$getRawTransaction) - .post('/api/internal/bitcoin-core/' + 'send-raw-transaction', this.disableCache, this.$sendRawTransaction) - .post('/api/internal/bitcoin-core/' + 'test-mempool-accept', this.disableCache, this.$testMempoolAccept) - .get('/api/internal/bitcoin-core/' + 'get-mempool-ancestors', this.disableCache, this.$getMempoolAncestors) - .get('/api/internal/bitcoin-core/' + 'get-block', this.disableCache, this.$getBlock) - .get('/api/internal/bitcoin-core/' + 'get-block-hash', this.disableCache, this.$getBlockHash) - .get('/api/internal/bitcoin-core/' + 'get-block-count', this.disableCache, this.$getBlockCount) + .get('/api/v1/internal/bitcoin-core/' + 'get-mempool-entry', this.disableCache, this.$getMempoolEntry) + .post('/api/v1/internal/bitcoin-core/' + 'decode-raw-transaction', this.disableCache, this.$decodeRawTransaction) + .get('/api/v1/internal/bitcoin-core/' + 'get-raw-transaction', this.disableCache, this.$getRawTransaction) + .post('/api/v1/internal/bitcoin-core/' + 'send-raw-transaction', this.disableCache, this.$sendRawTransaction) + .post('/api/v1/internal/bitcoin-core/' + 'test-mempool-accept', this.disableCache, this.$testMempoolAccept) + .get('/api/v1/internal/bitcoin-core/' + 'get-mempool-ancestors', this.disableCache, this.$getMempoolAncestors) + .get('/api/v1/internal/bitcoin-core/' + 'get-block', this.disableCache, this.$getBlock) + .get('/api/v1/internal/bitcoin-core/' + 'get-block-hash', this.disableCache, this.$getBlockHash) + .get('/api/v1/internal/bitcoin-core/' + 'get-block-count', this.disableCache, this.$getBlockCount) ; } From 185be3d598a282d6117d7b643db983413c310f7a Mon Sep 17 00:00:00 2001 From: nymkappa <1612910616@pm.me> Date: Fri, 25 Oct 2024 14:02:09 +0900 Subject: [PATCH 143/147] [core routes] use config.MEMPOOL.API_URL_PREFIX --- .../src/api/bitcoin/bitcoin-core.routes.ts | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/backend/src/api/bitcoin/bitcoin-core.routes.ts b/backend/src/api/bitcoin/bitcoin-core.routes.ts index 14640515d..2c3dd08f6 100644 --- a/backend/src/api/bitcoin/bitcoin-core.routes.ts +++ b/backend/src/api/bitcoin/bitcoin-core.routes.ts @@ -1,6 +1,7 @@ import { Application, NextFunction, Request, Response } from 'express'; import logger from '../../logger'; import bitcoinClient from './bitcoin-client'; +import config from '../../config'; /** * Define a set of routes used by the accelerator server @@ -11,15 +12,15 @@ class BitcoinBackendRoutes { public initRoutes(app: Application) { app - .get('/api/v1/internal/bitcoin-core/' + 'get-mempool-entry', this.disableCache, this.$getMempoolEntry) - .post('/api/v1/internal/bitcoin-core/' + 'decode-raw-transaction', this.disableCache, this.$decodeRawTransaction) - .get('/api/v1/internal/bitcoin-core/' + 'get-raw-transaction', this.disableCache, this.$getRawTransaction) - .post('/api/v1/internal/bitcoin-core/' + 'send-raw-transaction', this.disableCache, this.$sendRawTransaction) - .post('/api/v1/internal/bitcoin-core/' + 'test-mempool-accept', this.disableCache, this.$testMempoolAccept) - .get('/api/v1/internal/bitcoin-core/' + 'get-mempool-ancestors', this.disableCache, this.$getMempoolAncestors) - .get('/api/v1/internal/bitcoin-core/' + 'get-block', this.disableCache, this.$getBlock) - .get('/api/v1/internal/bitcoin-core/' + 'get-block-hash', this.disableCache, this.$getBlockHash) - .get('/api/v1/internal/bitcoin-core/' + 'get-block-count', this.disableCache, this.$getBlockCount) + .get(config.MEMPOOL.API_URL_PREFIX + 'internal/bitcoin-core/' + 'get-mempool-entry', this.disableCache, this.$getMempoolEntry) + .post(config.MEMPOOL.API_URL_PREFIX + 'internal/bitcoin-core/' + 'decode-raw-transaction', this.disableCache, this.$decodeRawTransaction) + .get(config.MEMPOOL.API_URL_PREFIX + 'internal/bitcoin-core/' + 'get-raw-transaction', this.disableCache, this.$getRawTransaction) + .post(config.MEMPOOL.API_URL_PREFIX + 'internal/bitcoin-core/' + 'send-raw-transaction', this.disableCache, this.$sendRawTransaction) + .post(config.MEMPOOL.API_URL_PREFIX + 'internal/bitcoin-core/' + 'test-mempool-accept', this.disableCache, this.$testMempoolAccept) + .get(config.MEMPOOL.API_URL_PREFIX + 'internal/bitcoin-core/' + 'get-mempool-ancestors', this.disableCache, this.$getMempoolAncestors) + .get(config.MEMPOOL.API_URL_PREFIX + 'internal/bitcoin-core/' + 'get-block', this.disableCache, this.$getBlock) + .get(config.MEMPOOL.API_URL_PREFIX + 'internal/bitcoin-core/' + 'get-block-hash', this.disableCache, this.$getBlockHash) + .get(config.MEMPOOL.API_URL_PREFIX + 'internal/bitcoin-core/' + 'get-block-count', this.disableCache, this.$getBlockCount) ; } From c1d17dac4361af3b82f831b41e2cd7136d16aff2 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Fri, 25 Oct 2024 05:39:52 +0000 Subject: [PATCH 144/147] fix purple pie chart with single pool --- .../active-acceleration-box.component.ts | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/frontend/src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.ts b/frontend/src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.ts index eae20f7e5..739760017 100644 --- a/frontend/src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.ts +++ b/frontend/src/app/components/acceleration/active-acceleration-box/active-acceleration-box.component.ts @@ -76,15 +76,21 @@ export class ActiveAccelerationBox implements OnChanges { acceleratingPools.forEach((poolId, index) => { const pool = pools[poolId]; const poolShare = ((pool.lastEstimatedHashrate / this.miningStats.lastEstimatedHashrate) * 100).toFixed(1); + let color = 'white'; + if (index >= firstSignificantPool) { + if (numSignificantPools > 1) { + color = toRGB(lighten({ r: 147, g: 57, b: 244 }, 1 - (index - firstSignificantPool) / Math.max((numSignificantPools - 1), 1))); + } else { + color = toRGB({ r: 147, g: 57, b: 244 }); + } + } data.push(getDataItem( pool.lastEstimatedHashrate, - index >= firstSignificantPool - ? toRGB(lighten({ r: 147, g: 57, b: 244 }, 1 - (index - firstSignificantPool) / (numSignificantPools - 1))) - : 'white', + color, `${pool.name} (${poolShare}%)`, true, ) as PieSeriesOption); - }) + }); this.acceleratedByPercentage = ((totalAcceleratedHashrate / this.miningStats.lastEstimatedHashrate) * 100).toFixed(1) + '%'; const notAcceleratedByPercentage = ((1 - (totalAcceleratedHashrate / this.miningStats.lastEstimatedHashrate)) * 100).toFixed(1) + '%'; data.push(getDataItem( From 57299e086e1516235949fa5782b059d7bfdc2b1f Mon Sep 17 00:00:00 2001 From: wiz Date: Fri, 25 Oct 2024 14:45:45 +0900 Subject: [PATCH 145/147] Remove /graphs from demo routes --- frontend/src/app/shared/common.utils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/app/shared/common.utils.ts b/frontend/src/app/shared/common.utils.ts index 11581ee03..6cb23ccf3 100644 --- a/frontend/src/app/shared/common.utils.ts +++ b/frontend/src/app/shared/common.utils.ts @@ -239,7 +239,7 @@ export function handleDemoRedirect(route: ActivatedRoute, router: Router) { route.queryParams .subscribe(params => { if (params.next) { - const path = ['/', '/acceleration', '/mining', '/lightning', '/graphs']; + const path = ['/', '/acceleration', '/mining', '/lightning']; const index = path.indexOf(params.next); if (index >= 0) { const nextPath = path[(index + 1) % path.length]; From 8b01a839483fe54cb130191c6896f8394c5a3bef Mon Sep 17 00:00:00 2001 From: wiz Date: Fri, 25 Oct 2024 16:49:07 +0900 Subject: [PATCH 146/147] Increase time of demo mode from 3s to 15s --- frontend/src/app/shared/common.utils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/app/shared/common.utils.ts b/frontend/src/app/shared/common.utils.ts index 6cb23ccf3..f329b55e4 100644 --- a/frontend/src/app/shared/common.utils.ts +++ b/frontend/src/app/shared/common.utils.ts @@ -243,7 +243,7 @@ export function handleDemoRedirect(route: ActivatedRoute, router: Router) { const index = path.indexOf(params.next); if (index >= 0) { const nextPath = path[(index + 1) % path.length]; - setTimeout(() => { window.location.replace(`${params.next}?next=${nextPath}`) }, 3000); + setTimeout(() => { window.location.replace(`${params.next}?next=${nextPath}`) }, 15000); } } } From 3a4a4d9ffd3bdd2e741a325c572bfb71ce0df81b Mon Sep 17 00:00:00 2001 From: Mononaut Date: Sun, 27 Oct 2024 02:39:55 +0000 Subject: [PATCH 147/147] don't allow overriding critical @app imports --- frontend/src/app/app.module.server.ts | 2 +- frontend/src/app/app.module.ts | 2 +- frontend/src/app/components/asset/asset.component.ts | 2 +- frontend/src/app/previews.module.ts | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/frontend/src/app/app.module.server.ts b/frontend/src/app/app.module.server.ts index 44cfe674d..56096891d 100644 --- a/frontend/src/app/app.module.server.ts +++ b/frontend/src/app/app.module.server.ts @@ -3,7 +3,7 @@ import { NgModule } from '@angular/core'; import { ServerModule } from '@angular/platform-server'; import { ZONE_SERVICE } from '@app/injection-tokens'; -import { AppModule } from '@app/app.module'; +import { AppModule } from './app.module'; import { AppComponent } from '@components/app/app.component'; import { HttpCacheInterceptor } from '@app/services/http-cache.interceptor'; import { ZoneService } from '@app/services/zone.service'; diff --git a/frontend/src/app/app.module.ts b/frontend/src/app/app.module.ts index 7a97c27e3..1b764c003 100644 --- a/frontend/src/app/app.module.ts +++ b/frontend/src/app/app.module.ts @@ -3,7 +3,7 @@ import { ModuleWithProviders, NgModule } from '@angular/core'; import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; import { ZONE_SERVICE } from '@app/injection-tokens'; -import { AppRoutingModule } from '@app/app-routing.module'; +import { AppRoutingModule } from './app-routing.module'; import { AppComponent } from '@components/app/app.component'; import { ElectrsApiService } from '@app/services/electrs-api.service'; import { OrdApiService } from '@app/services/ord-api.service'; diff --git a/frontend/src/app/components/asset/asset.component.ts b/frontend/src/app/components/asset/asset.component.ts index 9a3a73eea..30bbd594b 100644 --- a/frontend/src/app/components/asset/asset.component.ts +++ b/frontend/src/app/components/asset/asset.component.ts @@ -9,7 +9,7 @@ import { AudioService } from '@app/services/audio.service'; import { ApiService } from '@app/services/api.service'; import { of, merge, Subscription, combineLatest } from 'rxjs'; import { SeoService } from '@app/services/seo.service'; -import { environment } from '@app/../environments/environment'; +import { environment } from '@environments/environment'; import { AssetsService } from '@app/services/assets.service'; import { moveDec } from '@app/bitcoin.utils'; diff --git a/frontend/src/app/previews.module.ts b/frontend/src/app/previews.module.ts index 42ea7ac22..abfdced59 100644 --- a/frontend/src/app/previews.module.ts +++ b/frontend/src/app/previews.module.ts @@ -3,7 +3,7 @@ import { CommonModule } from '@angular/common'; import { SharedModule } from '@app/shared/shared.module'; import { RouterModule } from '@angular/router'; import { GraphsModule } from '@app/graphs/graphs.module'; -import { PreviewsRoutingModule } from '@app/previews.routing.module'; +import { PreviewsRoutingModule } from './previews.routing.module'; import { TransactionPreviewComponent } from '@components/transaction/transaction-preview.component'; import { BlockPreviewComponent } from '@components/block/block-preview.component'; import { AddressPreviewComponent } from '@components/address/address-preview.component';