Initial commit

This commit is contained in:
Arne
2023-04-02 20:35:10 +02:00
parent 80ffb8b70c
commit 7611f10b1c
55 changed files with 1678 additions and 683 deletions

View File

@@ -0,0 +1,48 @@
import { app, shell } from 'electron';
import { Window } from './window';
export class App {
static launch() {
app.on('window-all-closed', App.quit);
app.on('activate', App.start);
app.on('ready', App.start);
// Limit navigation and open external links in default browser
app.on('web-contents-created', App.openExternalLinksInDefaultBrowser);
}
static get electronWindow() {
return this._wrapper ? this._wrapper.electronWindow : undefined;
}
static start() {
// On MacOS it is common to re-create a window from app even after all windows have been closed
if (!App.electronWindow) {
App._wrapper = new Window();
}
}
static quit() {
// On MacOS it is common for applications to stay open until the user explicitly quits
// But WebDriverIO Test Runner does handle that behaviour yet
if (
process.platform !== 'darwin' ||
global.appConfig.configId === 'e2e-test'
) {
app.quit();
}
}
}
App.openExternalLinksInDefaultBrowser = (event, contents) => {
// Disabling creation of new windows
contents.setWindowOpenHandler((handler) => {
// Telling the user platform to open this event's url in the default browser
shell.openExternal(handler.url);
// Blocking this event from loading in current app
return { action: 'deny' };
});
// Limiting navigation
contents.on('will-navigate', (event, navigationUrl) => {
const parsedUrl = new URL(navigationUrl);
// Allowing local navigation only
if (parsedUrl.origin !== 'http://localhost:4200') {
event.preventDefault();
}
});
};
//# sourceMappingURL=app.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../../../workspaces/electron-app/main/components/app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAiB,KAAK,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAIlC,MAAM,OAAO,GAAG;IAGR,MAAM,CAAC,MAAM;QACnB,GAAG,CAAC,EAAE,CAAC,mBAAmB,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QACtC,GAAG,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;QAC9B,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;QAE3B,8DAA8D;QAC9D,GAAG,CAAC,EAAE,CAAC,sBAAsB,EAAE,GAAG,CAAC,iCAAiC,CAAC,CAAC;IACvE,CAAC;IAEM,MAAM,KAAK,cAAc;QAC/B,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC;IACjE,CAAC;IAEO,MAAM,CAAC,KAAK;QACnB,+FAA+F;QAC/F,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE;YACxB,GAAG,CAAC,QAAQ,GAAG,IAAI,MAAM,EAAE,CAAC;SAC5B;IACF,CAAC;IAEO,MAAM,CAAC,IAAI;QAClB,sFAAsF;QACtF,6DAA6D;QAC7D,IACC,OAAO,CAAC,QAAQ,KAAK,QAAQ;YAC7B,MAAM,CAAC,SAAS,CAAC,QAAQ,KAAK,UAAU,EACvC;YACD,GAAG,CAAC,IAAI,EAAE,CAAC;SACX;IACF,CAAC;;AAEc,qCAAiC,GAAG,CAClD,KAAqB,EACrB,QAA8B,EAC7B,EAAE;IACH,oCAAoC;IACpC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,OAAgC,EAAE,EAAE;QAClE,4EAA4E;QAC5E,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAEhC,kDAAkD;QAClD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,sBAAsB;IACtB,QAAQ,CAAC,EAAE,CACV,eAAe,EACf,CAAC,KAAqB,EAAE,aAAqB,EAAE,EAAE;QAChD,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC;QACzC,iCAAiC;QACjC,IAAI,SAAS,CAAC,MAAM,KAAK,uBAAuB,EAAE;YACjD,KAAK,CAAC,cAAc,EAAE,CAAC;SACvB;IACF,CAAC,CACD,CAAC;AACH,CAAC,CAAC"}

View File

@@ -0,0 +1,141 @@
var __awaiter =
(this && this.__awaiter) ||
function (thisArg, _arguments, P, generator) {
function adopt(value) {
return value instanceof P
? value
: new P(function (resolve) {
resolve(value);
});
}
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) {
try {
step(generator.next(value));
} catch (e) {
reject(e);
}
}
function rejected(value) {
try {
step(generator['throw'](value));
} catch (e) {
reject(e);
}
}
function step(result) {
result.done
? resolve(result.value)
: adopt(result.value).then(fulfilled, rejected);
}
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
import * as remoteMain from '@electron/remote/main';
import { app, BrowserWindow, ipcMain, nativeImage } from 'electron';
import * as path from 'node:path';
import { FileListService } from '../services/file-list-service';
import { Logger } from '../utils/logger';
export class Window {
constructor() {
this.createWindow();
this.loadRenderer();
this.registerService(new FileListService());
}
createWindow() {
this._electronWindow = new BrowserWindow({
width: 1280,
height: 720,
backgroundColor: '#FFFFFF',
icon: this.loadIcon(),
webPreferences: {
// Default behavior in Electron since 5, that
// limits the powers granted to remote content
// except in e2e test when those powers are required
nodeIntegration: global.appConfig.isNodeIntegration,
// Isolate window context to protect against prototype pollution
// except in e2e test when that access is required
contextIsolation: global.appConfig.isContextIsolation,
// Introduced in Electron 20 and enabled by default
// Among others security constraints, it prevents from required
// CommonJS modules imports into preload script
// which is not bundled yet in dev mode
sandbox: global.appConfig.isSandbox,
// Use a preload script to enhance security
preload: MAIN_WINDOW_PRELOAD_WEBPACK_ENTRY,
},
});
// Disable the remote module to enhance security
// except in e2e test when that access is required
if (global.appConfig.isEnableRemoteModule) {
remoteMain.enable(this._electronWindow.webContents);
}
}
loadIcon() {
let iconObject;
if (global.appConfig.isIconAvailable) {
const iconPath = path.join(__dirname, 'icons/icon.png');
Logger.debug('Icon Path', iconPath);
iconObject = nativeImage.createFromPath(iconPath);
// Change dock icon on MacOS
if (iconObject && process.platform === 'darwin') {
app.dock.setIcon(iconObject);
}
}
return iconObject;
}
loadRenderer() {
if (global.appConfig.configId === 'development') {
// Dev mode, take advantage of the live reload by loading local URL
this.electronWindow.loadURL(`http://localhost:4200`);
} else {
// Else mode, we simply load angular bundle
const indexPath = path.join(
__dirname,
'../renderer/angular_window/index.html'
);
this.electronWindow.loadURL(`file://${indexPath}`);
}
if (global.appConfig.isOpenDevTools) {
this.openDevTools();
}
// When the window is closed`
this._electronWindow.on('closed', () => {
// Remove IPC Main listeners
ipcMain.removeAllListeners();
// Delete current reference
delete this._electronWindow;
});
}
openDevTools() {
this._electronWindow.webContents.openDevTools();
this._electronWindow.webContents.on('devtools-opened', () => {
this._electronWindow.focus();
setImmediate(() => {
this._electronWindow.focus();
});
});
}
registerService(service) {
ipcMain.on(service.receptionChannel(), (event, ...parameters) =>
__awaiter(this, void 0, void 0, function* () {
// Handling input
const input = parameters[0];
Logger.debug(`[${service.receptionChannel()}] =====> `, input);
const output = service.process(input);
// Handling output
if (service.sendingChannel()) {
Logger.debug(`[${service.sendingChannel()}] =====> `, output);
this._electronWindow.webContents.send(
service.sendingChannel(),
output
);
}
})
);
}
get electronWindow() {
return this._electronWindow;
}
}
//# sourceMappingURL=window.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"window.js","sourceRoot":"","sources":["../../../../workspaces/electron-app/main/components/window.ts"],"names":[],"mappings":"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"}

View File

@@ -0,0 +1,16 @@
import * as fs from 'fs-extra';
import _ from 'lodash';
import * as path from 'node:path';
import { App } from './components/app';
// Load config
const currentEnvironment = process.env.X_NODE_ENV || process.env.NODE_ENV;
const appConfigs = fs.readJsonSync(path.join(__dirname, 'config.json'));
const defaultConfig = appConfigs.development;
const currentConfig = appConfigs[currentEnvironment];
global.appConfig =
currentEnvironment === 'development'
? defaultConfig
: _.merge(defaultConfig, currentConfig);
// Launch app
App.launch();
//# sourceMappingURL=index.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../workspaces/electron-app/main/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,CAAC,MAAM,QAAQ,CAAC;AACvB,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAWvC,cAAc;AACd,MAAM,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC1E,MAAM,UAAU,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;AACxE,MAAM,aAAa,GAAG,UAAU,CAAC,WAAW,CAAC;AAC7C,MAAM,aAAa,GAAG,UAAU,CAAC,kBAAkB,CAAC,CAAC;AACrD,MAAM,CAAC,SAAS;IACf,kBAAkB,KAAK,aAAa;QACnC,CAAC,CAAC,aAAa;QACf,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;AAE1C,aAAa;AACb,GAAG,CAAC,MAAM,EAAE,CAAC"}

View File

@@ -0,0 +1,13 @@
const NOT_IMPEMENTED_YET = 'Method not implemented yet.';
export class AbstractService {
receptionChannel() {
throw new Error(NOT_IMPEMENTED_YET);
}
sendingChannel() {
throw new Error(NOT_IMPEMENTED_YET);
}
process(_input) {
throw new Error(NOT_IMPEMENTED_YET);
}
}
//# sourceMappingURL=abstract-service.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"abstract-service.js","sourceRoot":"","sources":["../../../../workspaces/electron-app/main/services/abstract-service.ts"],"names":[],"mappings":"AAAA,MAAM,kBAAkB,GAAG,6BAA6B,CAAC;AACzD,MAAM,OAAO,eAAe;IAC3B,gBAAgB;QACf,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACrC,CAAC;IAED,cAAc;QACb,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACrC,CAAC;IAED,OAAO,CAAC,MAAU;QACjB,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACrC,CAAC;CACD"}

View File

@@ -0,0 +1,24 @@
import { readdir } from 'node:fs';
import { WindowApiConst } from 'shared-lib';
import { AbstractService } from './abstract-service';
export class FileListService extends AbstractService {
receptionChannel() {
return WindowApiConst.FILELIST_INPUT;
}
sendingChannel() {
return WindowApiConst.FILELIST_OUTPUT;
}
process() {
readdir('./', (error, fileList) => {
if (!error) {
const newList = {};
for (const file in fileList) {
newList[file] = [];
}
return newList;
}
return {};
});
}
}
//# sourceMappingURL=file-list-service.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"file-list-service.js","sourceRoot":"","sources":["../../../../workspaces/electron-app/main/services/file-list-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,cAAc,EAAQ,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,OAAO,eAAgB,SAAQ,eAA8C;IAClF,gBAAgB;QACf,OAAO,cAAc,CAAC,cAAc,CAAC;IACtC,CAAC;IAED,cAAc;QACb,OAAO,cAAc,CAAC,eAAe,CAAC;IACvC,CAAC;IAED,OAAO;QACA,QAAQ,CAAC;QACT,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,QAAkB,EAAE,EAAE;YACxC,IAAI,CAAC,KAAK,EAAE;gBACR,MAAO,OAAO,GAA4B,EAAE,CAAC;gBAC7C,KAAI,MAAM,IAAI,IAAI,QAAQ,EAAE;oBACxB,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;iBACtB;gBACD,OAAO,OAAO,CAAC;aAClB;YAED,OAAO,EAAE,CAAC;QACd,CAAC,CAAC,CAAC;QAEH,OAAO,EAAE,CAAC;IACjB,CAAC;CACD"}

View File

@@ -0,0 +1,20 @@
// import { WindowApiConst } from 'shared-lib';
// import { AbstractService } from './abstract-service';
// export class MultiplesService extends AbstractService<number, number[]> {
// receptionChannel(): string {
// return WindowApiConst.MULTIPLES_INPUT;
// }
// sendingChannel(): string {
// return WindowApiConst.MULTIPLES_OUTPUT;
// }
// process(input: number): number[] {
// // From 1 to 10, return input multiples
// const multiples = [];
// for (let n = 1; n <= 10; n++) {
// multiples.push(n * input);
// }
// return multiples;
// }
// }
//
//# sourceMappingURL=multiples-service.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"multiples-service.js","sourceRoot":"","sources":["../../../../workspaces/electron-app/main/services/multiples-service.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,wDAAwD;AAExD,4EAA4E;AAC5E,gCAAgC;AAChC,2CAA2C;AAC3C,KAAK;AAEL,8BAA8B;AAC9B,4CAA4C;AAC5C,KAAK;AAEL,sCAAsC;AACtC,4CAA4C;AAC5C,0BAA0B;AAC1B,oCAAoC;AACpC,gCAAgC;AAChC,MAAM;AACN,sBAAsB;AACtB,KAAK;AACL,IAAI;AACJ,EAAE"}

View File

@@ -0,0 +1,121 @@
import { app } from 'electron';
import * as os from 'node:os';
import * as path from 'node:path';
import * as winston from 'winston';
export class Logger {
constructor() {
/**
* Custom winston file format
* Write JSON logs with given format :
* `${timestamp} ${level} : ${info.message} : ${meta})`
*/
this.fileFormat = winston.format.printf((data) => {
return JSON.stringify(this.prepareLogData(data));
});
/**
* Custom winston console format
* Write logs with given format :
* `${timestamp} ${level} : ${info.message} : JSON.stringify({ ...meta }) `
*/
this.consoleFormat = winston.format.printf((data) => {
const preparedData = this.prepareLogData(data);
return (
`${preparedData.timestamp} ${preparedData.level} : ` +
`${preparedData.message} : ${JSON.stringify(preparedData.meta)}`
);
});
this.prepareLogData = (data) => {
const additionalData = Object.assign({}, data);
delete additionalData.timestamp;
delete additionalData.level;
delete additionalData.message;
delete additionalData.service;
return {
timestamp: data.timestamp,
level: data.level,
message: data.message,
meta: additionalData,
};
};
this._logger = winston.createLogger({
level: 'debug',
format: winston.format.json(),
defaultMeta: { service: 'user-service' },
transports: [
new winston.transports.File({
filename: this.getLogFilename(),
level: global.appConfig.mainLogLevel,
format: winston.format.combine(
winston.format.timestamp(),
this.fileFormat
),
}),
],
});
// If we're not in production then log also to the `console` with the format:
// `${info.timestamp} ${info.level}: ${info.message} JSON.stringify({ ...rest }) `
if (global.appConfig.configId === 'development') {
this._logger.add(
new winston.transports.Console({
stderrLevels: ['error', 'warn'],
format: winston.format.combine(
winston.format.timestamp(),
this.consoleFormat
),
})
);
}
}
static error(message, ...meta) {
Logger.initSingleton();
Logger.singleton._logger.error(message, meta);
}
static warn(message, ...meta) {
Logger.initSingleton();
Logger.singleton._logger.warn(message, meta);
}
static info(message, ...meta) {
Logger.initSingleton();
Logger.singleton._logger.info(message, meta);
}
static http(message, ...meta) {
Logger.initSingleton();
Logger.singleton._logger.http(message, meta);
}
static verbose(message, ...meta) {
Logger.initSingleton();
Logger.singleton._logger.verbose(message, meta);
}
static debug(message, ...meta) {
Logger.initSingleton();
Logger.singleton._logger.debug(message, meta);
}
static silly(message, ...meta) {
Logger.initSingleton();
Logger.singleton._logger.silly(message, meta);
}
static initSingleton() {
if (!Logger.singleton) {
Logger.singleton = new Logger();
}
}
/**
* Returns log filename with standard path
* In production, returns absolute standard path depending on platform
*/
getLogFilename() {
let filename = global.appConfig.mainLogFile;
if (global.appConfig.configId === 'production') {
const appName = app.getName();
if (process.platform == 'linux') {
filename = `.config/${appName}/${filename}`;
} else if (process.platform == 'darwin') {
filename = `Library/Logs/${appName}/${filename}`;
} else if (process.platform == 'win32') {
filename = `AppData\\Roaming\\${appName}\\${filename}`;
}
}
return path.join(os.homedir(), filename);
}
}
//# sourceMappingURL=logger.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../../workspaces/electron-app/main/utils/logger.ts"],"names":[],"mappings":"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"}

View File

@@ -0,0 +1,32 @@
/**
* This file will automatically be loaded by webpack and run in the "renderer" context.
* To learn more about the differences between the "main" and the "renderer" context in
* Electron, visit:
*
* https://electronjs.org/docs/tutorial/application-architecture#main-and-renderer-processes
*
* By default, Node.js integration in this file is disabled. When enabling Node.js integration
* in a renderer process, please be aware of potential security implications. You can read
* more about security risks here:
*
* https://electronjs.org/docs/tutorial/security
*
* To enable Node.js integration in this file, open up `main.js` and enable the `nodeIntegration`
* flag:
*
* ```
* // Create the browser window.
* mainWindow = new BrowserWindow({
* width: 800,
* height: 600,
* webPreferences: {
* nodeIntegration: true
* }
* });
* ```
*/
import './index.css';
console.log(
'👋 This message is being logged by "renderer.js", included via webpack'
);
//# sourceMappingURL=index.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../workspaces/electron-app/renderer/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,aAAa,CAAC;AAErB,OAAO,CAAC,GAAG,CAAC,wEAAwE,CAAC,CAAC"}

View File

@@ -0,0 +1,53 @@
/*/ To secure user platform when running renderer process stuff,
// Node.JS and Electron APIs are only available in this script
import { contextBridge, ipcRenderer, IpcRendererEvent } from 'electron';
import { WindowApi, WindowApiConst } from 'shared-lib';
// So we expose protected methods that allow the renderer process
// to use the ipcRenderer without exposing the entire object
const windowApi: WindowApi = {
send: <In>(channel: string, input: In) => {
if (WindowApiConst.SENDING_SAFE_CHANNELS.includes(channel)) {
ipcRenderer.send(channel, input);
}
},
receive: <Out>(channel: string, callback: (output: Out) => void) => {
if (WindowApiConst.RECEIVING_SAFE_CHANNELS.includes(channel)) {
// Deliberately strip event as it includes `sender`
ipcRenderer.on(
channel,
(_event: IpcRendererEvent, ...parameters: any[]) =>
callback(parameters[0])
);
}
},
};
declare const window: Window;
if (process.env.X_NODE_ENV === 'e2e-test') {
// Injecting windowApi directly
window.api = windowApi;
} else {
// ContextBridge API can only be used when contextIsolation is enabled
// which is normally the case except in e2e test mode
contextBridge.exposeInMainWorld('api', windowApi);
}*/
import { contextBridge, ipcRenderer } from 'electron';
import { WindowApiConst } from 'shared-lib';
contextBridge.exposeInMainWorld('api', {
node: () => process.versions.node,
chrome: () => process.versions.chrome,
electron: () => process.versions.electron,
send: (channel, input) => {
if (WindowApiConst.SENDING_SAFE_CHANNELS.includes(channel)) {
ipcRenderer.send(channel, input);
}
},
receive: (channel, callback) => {
// Deliberately strip event as it includes `sender`
ipcRenderer.on(channel, (_event, ...parameters) => callback(parameters[0]));
},
// we can also expose variables, not just functions
});
console.log('The preload script has been injected successfully.');
//# sourceMappingURL=preload.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"preload.js","sourceRoot":"","sources":["../../../workspaces/electron-app/renderer/preload.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,EAAE,aAAa,EAAE,WAAW,EAAoB,MAAM,UAAU,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,aAAa,CAAC,iBAAiB,CAAC,KAAK,EAAE;IACtC,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI;IACjC,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM;IACrC,QAAQ,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzC,IAAI,EAAE,CAAK,OAAe,EAAE,KAAS,EAAE,EAAE;QACxC,IAAI,cAAc,CAAC,qBAAqB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;YAC3D,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;SACjC;IACF,CAAC;IACD,OAAO,EAAE,CAAM,OAAe,EAAE,QAA+B,EAAE,EAAE;QAClE,mDAAmD;QACnD,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,MAAwB,EAAE,GAAG,UAAiB,EAAE,EAAE,CAC1E,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CACvB,CAAC;IACH,CAAC;IACD,mDAAmD;CACnD,CAAC,CAAC;AAEH,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC"}