open-index/open-npm huggingface dataset:
npm package: @linzhinan/vue-code-link
Description: ![Animation](https://user-images.githubusercontent.com/62974111/174468768-dcacbfaa-3565-4608-bbb3-9a1b81da4ff0.gif)
Author: linzhinan
Latest version: 1.0.36

![Animation](https://user-images.githubusercontent.com/62974111/174468768-dcacbfaa-3565-4608-bbb3-9a1b81da4ff0.gif)

# 通过 shift+左键点击页面元素,快速在 vscode 中定位代码位置

# [changelog](https://github.com/chana1024/linzhinan-vue-code-link/blob/master/CHANGELOG.md)

# 引入

```
    引入只需如下三步
    //1、install package
    npm install -s @linzhinan/vue-code-link
    //2、vue.config.js
    const { vueCodeLinkServer, vueCodeLinkLoaderConfig } = require('@linzhinan/vue-code-link')
    module.exports = {
        ...
        devServer: {
          ...
          //添加监听服务
          before: vueCodeLinkServer.before
        },
        ...
        chainWebpack(config) {
          //添加vue-code-link处理器
          vueCodeLinkLoaderConfig.addVueCodeLinkLoader(config)
          ...
        }
    }
    //3、main.js
    import { vueCodeLinkClient } from '@linzhinan/vue-code-link'
    vueCodeLinkClient.init()
```

# 编辑器设置/setEditor

- 新增支持 webstorm

```
 //修改vue.config.js
  const { vueCodeLinkServer,vueCodeLinkServerConfig,vueCodeLinkLoaderConfig } = require('@linzhinan/vue-code-link')
  vueCodeLinkServerConfig.setEditor("webstorm")
```

# 编辑器命令加入环境变量

## vscode 的 code 命令

- vscode 的定位功能是基于 vscode 的 code 命令实现的，所以请确认 code 命令是否有效(cmd 或 shell 里直接执行 code)
- 若 code 命令找不到请如下操作: \
   方案 1 \
  使用 command + shift + p (注意 window 下使用 ctrl + shift + p ) 然后搜索 code，选择 install 'code' command in path。 \
   方案 2 \
  也可直接手动将 code 命令的路径添加到环境变量中

## webstorm

直接手动将 webstorm 命令的路径添加到环境变量中

# 使用

shift+鼠标左键点击页面元素即可

# 注意事项

- 插件会自动根据生成与开发环境决定是否启用,不会对生产环境造成任何影响
- 暂时只支持 vue + webpack + vscode/webstorm
- 代码定位精确到行，但定位只限于项目 src 目录下的代码,后续会考虑添加可定位目录的配置
- 该项目借鉴了一位前端大佬的文章，[文章链接](https://mp.weixin.qq.com/s/AZQTK_lk8BxxWZCDU5P_Yg)。文章里有详细的设计思路和代码片段。
  本来打算直接用大佬的项目，但是对方说暂时只在他们公司内部使用，故本人自己写了一个简单版的。
npm package: @linzhiyan/vue3-mask
Description: 一个简洁高效的 Vue 3 蒙版遮罩组件库
Author: linzhiyan
Latest version: 1.0.0

# @linzhiyan/vue3-mask

一个简洁高效的 Vue 3 蒙版遮罩组件库，提供灵活的弹窗、抽屉和遮罩功能。

## ✨ 特性

- 🎯 轻量级 - 体积小，性能优异
- 🎨 高度可定制 - 灵活的配置选项
- 📱 响应式设计 - 完美支持移动端和桌面端
- 🚀 Vue 3 原生 - 基于 Composition API
- 💫 流畅动画 - 内置过渡效果
- 🔒 TypeScript 支持 - 完整的类型定义

## 📦 安装

```bash
npm install @linzhiyan/vue3-mask
```

## 🚀 快速开始

### 全局注册

```javascript
import { createApp } from 'vue'
import App from './App.vue'
import LzyMask from '@linzhiyan/vue3-mask'

const app = createApp(App)
app.use(LzyMask)
app.mount('#app')
```

### 局部使用

```vue
<template>
  <div>
    <button @click="isVisible = true">打开遮罩</button>
    
    <LzyMask
      :visible="isVisible"
      position="center"
      @close="isVisible = false"
    >
      <div class="mask-content">
        <h2>欢迎使用 LzyMask</h2>
        <p>这是一个简洁的蒙版组件</p>
        <button @click="isVisible = false">关闭</button>
      </div>
    </LzyMask>
  </div>
</template>

<script setup>
import { ref } from 'vue'
import { LzyMask } from '@linzhiyan/vue3-mask'

const isVisible = ref(false)
</script>

<style scoped>
.mask-content {
  padding: 20px;
  text-align: center;
}
</style>
```

## 📝 属性配置

| 属性 | 类型 | 默认值 | 说明 |
|------|------|--------|------|
| `visible` | Boolean | false | 是否显示遮罩 |
| `closeable` | Boolean | true | 点击蒙版是否关闭 |
| `backdrop` | Boolean | true | 是否显示背景遮罩 |
| `opacity` | Number | 0.5 | 背景遮罩透明度（0-1） |
| `position` | String | 'center' | 遮罩位置：top / center / bottom / left / right |
| `zIndex` | Number | 1000 | z-index 层级 |

## 📤 事件

| 事件名 | 说明 |
|-------|------|
| `close` | 遮罩关闭时触发 |

## 🎨 插槽

支持默认插槽，可以在其中放置任何内容：

```vue
<LzyMask :visible="isVisible" @close="isVisible = false">
  <div>自定义内容</div>
</LzyMask>
```

## 💡 常见用法

### 抽屉效果

```vue
<LzyMask
  :visible="isDrawerVisible"
  position="right"
  @close="isDrawerVisible = false"
>
  <div class="drawer">
    <h3>抽屉内容</h3>
  </div>
</LzyMask>
```

### 弹窗效果

```vue
<LzyMask
  :visible="isDialogVisible"
  position="center"
  @close="isDialogVisible = false"
>
  <div class="dialog">
    <h2>对话框</h2>
    <p>内容区域</p>
  </div>
</LzyMask>
```

## 📄 License

MIT License - 详见 [LICENSE](LICENSE)

## 🤝 贡献

欢迎提交 Issue 和 Pull Request！

---

Made with ❤️ by linzhiyan
npm package: @linzjs/cdk-elastic-shipper
Description: Ship log lines to elasticsearch
Latest version: 3.6.2

# Elastic Log Shipper

[![Build Status](https://github.com/linz/elasticsearch-shipper/workflows/Build/badge.svg)](https://github.com/linz/elasticsearch-shipper/actions)


Lambda function to ship logs from various AWS sources into a elastic search instance of your choosing.

## Usage

This package exposes a AWS-CDK construct that can be imported into your CDK stack and can be used to configure logs to be automatically shipped into an elastic search of your choosing

```javascript 
import * as cdk from '@aws-cdk/aws-cdk'
import * as ssm from '@aws-cdk/aws-ssm'
import { LambdaLogShipperFunction } from '@linzjs/cdk-elastic-shipper'

export class YourStack extends cdk.Stack {

  public constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);
    const vpc = new ec2.Vpc(this, 'Vpc');

    const config = {
      name: 'default',
      accounts: [{
        id: '1234567890',
        elastic: '/es-shipper-config/elastic-default',
        name: 'linz',
        tags: ['hello'],
        prefix: 'account-prefix',
        logGroups: [{
          filter: '**',
          prefix: 'lg-prefix',
        }],
      }],
    };
    this.logShipper = new LambdaLogShipperFunction(this, 'LogShipper', { config, vpc });

    /** Register a listener on a bucket, so when files are added they are to submitted to the log shipper*/
    const logBucket = new s3.Bucket(this, 'LogBucket');
    this.logShipper.addS3Source(logBucket);
  }
}
```

The elastic connection strings need to be stored inside of SSM before running the deployment, there are three options for elasticsearch connections

1. AWS
```
{ url: 'https://node-name.eu-west-1.es.amazonaws.com' }
```

2. ElasticCloud
```
{
  id: 'cloud:abc123',
  username: 'foo',
  password: 'bar'
}
```

3. Http
```
{
  url: 'https://fake.com'
  username: 'foo'
  password: 'bar'
}
```
## Building

This repository requires [NodeJs](https://nodejs.org/en/) > 12 & [Yarn](https://yarnpkg.com/en/)

Use [n](https://github.com/tj/n) to manage nodeJs versions

```bash
# Download the latest nodejs & yarn
n latest
npm install -g yarn

# Install node deps
yarn

# Build everything into /build
yarn run build

# Run the unit tests
yarn run test
```
npm package: @linzjs/docker-command
Description: Run a command in either docker or on you local system
Author: Land Information New Zealand
Latest version: 8.0.0

## @linzjs/docker-command

Run a command in either docker or on you local system

```typescript
import { Command } from '@linzjs/docker-command';

const cmd = new Command('echo', { container: 'ubuntu', tag: 'latest' });

// Spawn a docker container and run `echo hello world`
await cmd.create().arg('Hello World').run(); // {stdout: "Hello World\n"}
// Spawn a echo process and run `echo hello world`
await cmd.create({ useDocker: false }).arg('Hello World').run(); // {stdout: "Hello World\n"}
```

## Mounting folders in docker

folders can be mounted into the docker container volumes with `.mount`

`.mount(path)` will create a single `--volume path:path`

```typescript
import { Command } from '@linzjs/docker-command';

const proc = await Command.create('ls', { container: 'ubuntu' });
proc.mount('/home/blacha');
proc.arg('/home/blacha');

await proc.run(); // ls results for local /home/blacha
```

## Passing environment variables

```typescript
import { Command } from '@linzjs/docker-command';

const proc = await Command.create('env', { container: 'ubuntu' });
proc.env('AWS_ACCESS_KEY_ID'); // Load process.env.AWS_ACCESS_KEY_ID into docker
proc.env('AWS_ACCESS_KEY_ID', 'fakeKey'); // set a specific AWS_ACCESS_KEY_ID into docker
```
npm package: @linzjs/geojson
Description: ## GeoJSON computation
Author: Land Information New Zealand
Latest version: 8.0.0

# @linzjs/geojson

## GeoJSON computation

Utility functions for working with GeoJSON multi polygons and bounding boxes. In particular for handling the anti-meridian.

## Usage

### Wgs84

```javascript
import { Wgs84 } from '@linzjs/geojson';

assert(Wgs84.normLon(-163.12345 - 720) == -163.12345;

assert(Wgs84.crossesAM(-175, 175));

assert(Wgs84.delta(-175, 170) == -15);

assert(deepEqual(Wgs84.union([175, -42, -178, -41], [-170, -43, -160, -42]), [175, -43, -160, -41]));
```

### MultiPolygon

```javascript
import { clipMultipolygon, multiPolygonToWgs84 } from '@linzjs/geojson';
import * as Proj from 'proj4';

// polygons clipped to bounding box; no degenerate edges
const clipped = clipMultipolygon(polygons, [-2, -2, 1, 1]);

const nztmToWgs84 = Proj('epsg:2193', 'epsg:4326').forward;

// nztm polygons converted to wgs84 split at anti-meridian
const splitPolys = multiPolygonToWgs84(nztmPolygons, nztmToWgs84);
```
npm package: @linzjs/lui
Description: It's written in CSS and has a React wrapper!
Latest version: 24.12.0

# Lui - Linz User Interface!

> It's written in CSS and a React wrapper!
>
> ## You do not need to be using React to use Lui
>
> ## Come see us in #cop-lui

![Chromatic](https://github.com/linz/Lui/workflows/Chromatic/badge.svg)
![CI](https://github.com/linz/Lui/workflows/CI/badge.svg)
[![npm version](https://badge.fury.io/js/%40linzjs%2Flui.svg)](https://badge.fury.io/js/%40linzjs%2Flui)

![https://en.wikipedia.org/wiki/Onychophora](lui-worm.png)

> Lui _[Onychophora](https://en.wikipedia.org/wiki/Onychophora)_, the happy UI worm!!

Nomenclature: Lui is a backronym for Linz User Interface. Lui the library, is named after Lui the worm.

_It was foreseen in the stars that Lui was destined for greatness, a UI library framework mascot._

- [📗 Lui LIVE Storybook](https://linz.github.io/Lui/)
- [🎨 Lui on Figma](https://www.figma.com/file/E7g3n5ziI7bR8MisISayia/LUI-components)
- [🔁 Lui on Github](https://github.com/linz/Lui)
- [🔎 Lui on Chromatic](https://www.chromatic.com/builds?appId=5eaf53c737a54a0022e6749c)
- [📄 Lui on UX Confluence](https://confluence.linz.govt.nz/display/STEP/Lui+%28LINZ+User+Interface%29+Design+system)
- [💬 Lui Community of Practice on LINZ Slack - #cop-lui](https://linz.slack.com/archives/CP807EN31)

and

- [👕Lui Worm T-shirts](https://odrusso-store.secure-decoration.com/shop/category/Lui-Worm?c=3718283)

---

_Lui_ is a collection of generic UI components that adhere to the new LINZ digital style guide, lead by STEP and
welcoming contributions from across LINZ.

It aims to solve the problem of consistent UI across LINZ while giving squads a bunch of base elements they can start
using out of the box.

We aim to make each component generic, extendable, accessible, and amazing.

All styles are implemented in SCSS and compiled to plain CSS. This means any team can use the CSS. A ReactJS wrapper
over the CSS is part of this project.

There are lots of things to do in this project, often things will be left until there is demand, e.g add new components or implement new version components. Please join the Slack channel

#cop-lui.

## Documentation

Storybook is the main source of documentation.

- [Lui Storybook](https://linz.github.io/Lui/)
npm package: @linzjs/metrics
Description: Simple timing metric tracker for NodeJS
Author: Land Information New Zealand
Latest version: 8.0.0

# @linzjs/metrics

Simple timing metric tracker for NodeJS

## Usage

```typescript

import { Metrics } from '@linzjs/metrics';

const metrics = new Metrics();

metrics.start('timer');
const duration = metrics.end('timer') // 0.1 (in ms)

const allMetrics = metrics.metrics // { timer: 1e6 }


// Unfinished
metrics.start('timer');

metrics.unfinished // ['timer']
```
npm package: @linzjs/s3fs
Description: Utility functions for working with files that could either reside on the local file system or inside s3
Author: Land Information New Zealand
Latest version: 6.9.1

# S3 FS

Utility functions for working with files that could either reside on the local file system or inside s3

## Usage

```typescript
import { fsa } from '@linzjs/s3fs';

for await (const file of fsa.list('s3://foo/bar')) {
    // ['s3://foo/bar/baz.html', 's3://foo/bar/index.html']
}

for await (const file of fsa.list('/home/blacha')) {
    // '/home/blacha/index.html'
}

// Convert the generator to an array
const files = await fsa.toArray(fsa.list('s3://foo/bar'));
```

This is designed for use with multiple s3 credentials 

```typescript
import {fsa, FsS3} from '@linzjs/s3fs'

const bucketA = new S3({ credentials: bucketACredentials })
const bucketB = new S3({ credentials: bucketBCredentials  })

fsa.register('s3://bucket-a', new FsS3(bucketA))
fsa.register('s3://bucket-b', new FsS3(bucketB))

// Stream a file from bucketA to bucketB
await fsa.write('s3://bucket-b/foo', fsa.readStream('s3://bucket-a/foo'))
```

Or even any s3 compatible api

```typescript
import {fsa, FsS3} from '@linzjs/s3fs'

const bucketA = new S3({ endpoint: 'http://10.0.0.1:8080' })
const bucketB = new S3({ endpoint: 'http://10.0.0.99:8080' })

fsa.register('s3://bucket-a', new FsS3(bucketA))
fsa.register('s3://bucket-b', new FsS3(bucketB))

// Stream a file from bucketA (10.0.0.1) to bucketB (10.0.0.99)
await fsa.write('s3://bucket-b/foo', fsa.readStream('s3://bucket-a/foo'))
```
npm package: @linzjs/simple-snowball-sync
Description: Sync folders of data onto a snowball
Latest version: 1.4.2

# Simple snowball sync 

Sync folders of data onto a snowball 

Features:
- Start and stop the process at any stage
- Compute [SRI](https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity) sha256 hash of all files and stored inside of the snowball in a manifiest.json
- Compress small files into a tar.gz so snowball can [batch extract](https://docs.aws.amazon.com/snowball/latest/developer-guide/batching-small-files.html) when importing into s3
- Validate uploaded files against the computed hash

## Manifest
Create a list of files to be synced 

```bash
sss manifest /media/$USER/external-drive
```

## Sync
Start the syncing processes

```bash
sss sync manifest.json --endpoint 10.254.32.104 --target s3://linz-snowball-a/drive1
```

Syncing can be stopped and started at any time

Options:

- `--filter` Files under this limit will be compressed into a `.tar.gz` and uploaded using the [snowball batching](https://docs.aws.amazon.com/snowball/latest/developer-guide/batching-small-files.html) (Mb) `--filter 1` only directly upload files > 1MB
- `--concurrency` Number of files to upload at a single time 
- `--verbose` More verbose logging
npm package: @linzjs/style
Description: [![Build Status](https://github.com/linz/style-js/workflows/Build/badge.svg)](https://github.com/linz/style-js/actions) [![License](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/linz/style-js/blob/master/LICENSE)
Latest version: 5.4.0

# @linzjs/style

[![Build Status](https://github.com/linz/style-js/workflows/Build/badge.svg)](https://github.com/linz/style-js/actions)
[![License](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/linz/style-js/blob/master/LICENSE)

NPM configuration for base typescript projects

Includes:

- Prettier
- Eslint
- Typescript

And configuration for saneish defaults, which can be extended

Most of these are the raw defaults/recommended settings from typescript, eslint and prettier.

```typescript
export class FooBar {
  get foo(): number {
    return 1;
  }

  async bar(): Promise<string> {
    return 'bar';
  }

  /**
   * @param foo foo to bar
   */
  fooBar(foo = 'foo'): string {
    return `${foo}bar`;
  }
}
```

## IDE Usage

### Usage VS Code

1. Install `eslint` using the extensions menu
2. Add the following to your settings.json

```json
"editor.codeActionsOnSave": {
    "source.fixAll.eslint": true
},
"eslint.validate": ["javascript"],
```

### Usage with IntelliJ

IntelliJ has ESLint support by default,

1. Open the settings in Languages & Frameworks > JavaScript > Code Quality Tools > ESLint
2. Check Automatic ESLint Configuration

## Project Usage

1. Install LINZ Style

```bash
npm install @linzjs/style
```

2. Applying eslint config
There are two ways to apply the config

**Either create the base configuration files**
```bash
# If on windows run `node ./node_modules/@linzjs/style/build/src/install.js`
# - tsconfig.json
# - .eslintrc.cjs
# - .prettierrc.cjs
npx linz-style-install
```

**Or extend your existing `eslintrc.js` config**   

Example extending the `.eslintrc.js` file in your project
```js
module.exports = {
  extends: ["./node_modules/@linzjs/style/.eslintrc.cjs"],

  overrides: [
    {
      /** Overrides for typescript */
      files: ["**/*.ts", "**/*.tsx"],      
      rules: {
        "@typescript-eslint/super-crazy-hook-rule": "error",
      },
    },
  ]
}
```

3. Apply the formatting/linting to all source code

```
npx eslint .
```


## Migration from 3.x to 4.x

See [Migration Docs](./migration.4.md)
npm package: @linzjs/tile-matrix-set
Description: This repository houses LINZ's official [Tile Matrix Sets (TMS)](https://www.ogc.org/standards/tms) for [NZTM2000](https://www.linz.govt.nz/data/geodetic-system/datums-projections-and-heights/projections/new-zealand-transverse-mercator-2000) ([EPGS:2193](h
Author: Land Information New Zealand
Latest version: 0.0.1

# LINZ NZTM2000 Tile Matrix Sets

This repository houses LINZ's official [Tile Matrix Sets (TMS)](https://www.ogc.org/standards/tms) for [NZTM2000](https://www.linz.govt.nz/data/geodetic-system/datums-projections-and-heights/projections/new-zealand-transverse-mercator-2000) ([EPGS:2193](http://epsg.io/2193)).

- [NZTM2000Quad](./raw/NZTM2000Quad.json)
- [NZTM2000](./raw/NZTM2000.json)

## NZTM2000Quad (March 2021 [Preview])

The NZTM2000 Quad TMS is a new tile matrix set to provide greater interoperability between LINZ's NZTM2000 web services (such as [LINZ's Basemaps](https://basemaps.linz.govt.nz)) and third parties.

### Key Features

- All zoom scales are from Google's [WebMercatorQuad](https://docs.opengeospatial.org/is/17-083r2/17-083r2.html#62)
- Tile matrix extent and tile extent are the same
- All zoom levels are square to work with techniques like [quad keys](https://docs.microsoft.com/en-us/bingmaps/articles/bing-maps-tile-system#tile-coordinates-and-quadkeys)
- All zoom levels increase by a factor of two
- The map is centred on the beehive
 
![NztmQuad - Zoom 1](./NztmQuadZ1.png)

*Tiles shown above were generated with [xyz-tile-debug](https://github.com/blacha/xyz-tile-debug), showing tile x,y offset, quadkey and zoom level.*

LINZ decided to create the NZTM2000Quad TMS due to compatibility issues between the original NZTM2000 TMS and third parties.

### FAQ

#### Why centre on the beehive?

No particular reason, needed a centre point and it seemed like a good idea at the time.

#### Why start at zoom level 2?

Zoom level 0 & 1 are very large and when centering around New Zealand they can overflow the bounds of NZTM2000. A number of open source tools had issues working with these large tiles.

#### Does this work in ArcGIS Online with the Eagle/Esri NZTM Basemaps?

From our intial testing this does appear to work with these other tile matrix sets.

## NZTM2000

LINZ's original tile matrix set, designed for use with cartographic tooling that needs specific carto zoom scales.

https://www.linz.govt.nz/data/linz-data-service/guides-and-documentation/nztm2000-map-tile-service-schema

## NPM Package

This repository also houses an NPM package that distributes the NZTM tile matrix sets for use in web mapping applications such as OpenLayers.

### Installation

```
yarn add @linzjs/tile-matrix-set
```

### Usage

```typescript
import {Nztm2000Quad} from '@linzjs/tile-matrix-set'

Nztm2000Quad.identifier // NZTM2000Quad
```
npm package: @linzjs/tracing
Author: Land Information New Zealand
Latest version: 1.1.1

# @linzjs/tracing
## Work In Progress 


LINZ's base for OpenTelemetry Tracing and logging


## Usage


## OpenTelemetry Log Data Model Logger

```typescript
import {log, LogType} from '@linzjs/tracing'

log.info('Hello World');

// Use a minimal logging type in a function typing
function doWork(logger?: LogType) {
    logger?.info('Get User', { 'http.status': 203, 'http.url': '/v1/users/3857.json' });
}

// Setup resource and trace context for the logger
log.setResources({'host.name': 'blacha', 'cloud.provider': 'aws', 'cloud.region': 'ap-southeast-2' });
log.setTrace({'TraceId': '0af7651916cd43dd8448eb211c80319c'})
log.info('With Resources & TraceContext')
```

## Open Telemetry Tracer 

```typescript
import {trace} from '@linzjs/tracing'

const span = trace.startSpan();
await doWork();
span.close();
```
npm package: @lio-spa/cli
Description: Single Page Framework developed by Liiiooo
Author: Liiioooo
Latest version: 2.0.1

cli
===



[![oclif](https://img.shields.io/badge/cli-oclif-brightgreen.svg)](https://oclif.io)
[![Version](https://img.shields.io/npm/v/cli.svg)](https://npmjs.org/package/cli)
[![Downloads/week](https://img.shields.io/npm/dw/cli.svg)](https://npmjs.org/package/cli)
[![License](https://img.shields.io/npm/l/cli.svg)](https://github.com/packages/cli/blob/master/package.json)

<!-- toc -->
* [Usage](#usage)
* [Commands](#commands)
<!-- tocstop -->
# Usage
<!-- usage -->
```sh-session
$ npm install -g @lio-spa/cli
$ lio-spa COMMAND
running command...
$ lio-spa (-v|--version|version)
@lio-spa/cli/2.0.1 win32-x64 node-v10.13.0
$ lio-spa --help [COMMAND]
USAGE
  $ lio-spa COMMAND
...
```
<!-- usagestop -->
# Commands
<!-- commands -->
* [`lio-spa build`](#lio-spa-build)
* [`lio-spa help [COMMAND]`](#lio-spa-help-command)
* [`lio-spa new PROJECTNAME`](#lio-spa-new-projectname)
* [`lio-spa serve`](#lio-spa-serve)

## `lio-spa build`

Builds the application.

```
USAGE
  $ lio-spa build

OPTIONS
  -h, --help  show CLI help

EXAMPLE
  $ lio-spa build
  Builds the application
```

_See code: [src\commands\build.ts](https://github.com/Liiioooo/lio-spa/blob/v2.0.1/src\commands\build.ts)_

## `lio-spa help [COMMAND]`

display help for lio-spa

```
USAGE
  $ lio-spa help [COMMAND]

ARGUMENTS
  COMMAND  command to show help for

OPTIONS
  --all  see all commands in CLI
```

_See code: [@oclif/plugin-help](https://github.com/oclif/plugin-help/blob/v2.2.0/src\commands\help.ts)_

## `lio-spa new PROJECTNAME`

Creates a new workspace and an initial Lio-SPA app.

```
USAGE
  $ lio-spa new PROJECTNAME

OPTIONS
  -h, --help   show CLI help
  --noInitGit

EXAMPLE
  $ lio-spa new myNewApp
  Creates a new workspace and an initial Lio-SPA app in ./myNewApp.
```

_See code: [src\commands\new.ts](https://github.com/Liiioooo/lio-spa/blob/v2.0.1/src\commands\new.ts)_

## `lio-spa serve`

Serves the application in the working directory.

```
USAGE
  $ lio-spa serve

OPTIONS
  -h, --help   show CLI help
  --port=port  [default: 8200]

EXAMPLE
  $ lio-spa serve
  Serves the application in the working directory
```

_See code: [src\commands\serve.ts](https://github.com/Liiioooo/lio-spa/blob/v2.0.1/src\commands\serve.ts)_
<!-- commandsstop -->
npm package: @lioartoil/nestjs-package-starter
Description: NestJS npm package starter
Author: Chanakan Nuekreo
Latest version: 1.0.8

<h1 align="center"></h1>

<div align="center">
  <a href="http://nestjs.com/" target="_blank">
    <img src="https://nestjs.com/img/logo_text.svg" width="150" alt="Nest Logo" />
  </a>
</div>

<h3 align="center">NestJS npm Package Starter</h3>

<div align="center">
  <a href="https://nestjs.com" target="_blank">
    <img src="https://img.shields.io/badge/built%20with-NestJs-red.svg" alt="Built with NestJS">
  </a>
</div>

### Installation

1. Clone the repo
2. Run npm/yarn install

```bash
cd nestjs-package-starter
npm install
```

## Change Log

See [Changelog](CHANGELOG.md) for more information.

## Contributing

Contributions welcome! See [Contributing](CONTRIBUTING.md).

## Author

**John Biundo (Y Prospect on [Discord](https://discord.gg/G7Qnnhy))**

## License

Licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
npm package: @lion-lamb/thinktrace
Description: It's for extension of your inteligence.
Author: Daegun-Kim
Latest version: 1.0.18

# ThinkTrace 

It's for extension of your inteligence.

Do you have experience of absense of knowledge that you remembered?

`ThinkTrace` is the collection of agent to remember your knowledges and experiences.
So, it specially can store thinktrace of your knowledge and experiences.

##  Platform
`ThinkTrace` uses [OpenCode](https://github.com/anomalyco/opencode) that is highly extensible and extremely customizable.
And Opencode plugin allow to extend OpenCode by hooking into various events and customizing beahvior
So ThinkTrace is debeloped in form of opencode plugin

## Setup

1. Install [OpenCode](https://opencode.ai/)
2. Install ThinkTrace

   - One-off (no install): `npx @lion-lamb/thinktrace init`
   - Global: `npm i -g @lion-lamb/thinktrace` then run `thinktrace init`

3. Run OpenCode

`thinktrace init` writes a small shim plugin file to `~/.opencode/plugins/thinktrace.ts` that imports the package.


## Env

- TypeScript
npm package: @lion.finance/sdk
Description: 🛠 An SDK for building applications on top of pancakeswap.
Latest version: 1.0.9

# Pancakeswap SDK

[![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square)](https://github.com/prettier/prettier)
[![Actions Status](https://github.com/pancakeswap/pancakeswap-sdk/workflows/CI/badge.svg)](https://github.com/pancakeswap/pancakeswap-sdk)
[![npm version](https://img.shields.io/npm/v/@pancakeswap-lib/sdk/latest.svg)](https://www.npmjs.com/package/@pancakeswap-lib/sdk/v/latest)

## Running tests

To run the tests, follow these steps. You must have at least node v10 and [yarn](https://yarnpkg.com/) installed.

First clone the repository:

```sh
git clone https://github.com/pancakeswap/pancakeswap-sdk.git
```

Move into the pancakeswap-sdk working directory

```sh
cd pancakeswap-sdk/
```

Install dependencies

```sh
yarn install
```

Run tests

```sh
yarn test
```

You should see output like the following:

```sh
yarn run v1.22.4
$ tsdx test
 PASS  test/constants.test.ts
 PASS  test/pair.test.ts
 PASS  test/fraction.test.ts
 PASS  test/miscellaneous.test.ts
 PASS  test/entities.test.ts
 PASS  test/trade.test.ts

Test Suites: 1 skipped, 6 passed, 6 of 7 total
Tests:       3 skipped, 82 passed, 85 total
Snapshots:   0 total
Time:        5.091s
Ran all test suites.
✨  Done in 6.61s.
```
npm package: @lion.wang/get-query-param
Description: get Query Param
Author: Lion.Wang
Latest version: 0.1.0

<!--
 * @Date: 2021-06-26 18:34:30
 * @LastEditors: lion.wang
 * @FilePath: /getQueryParam/README.md
-->
## getQueryParam

### Install
```
npm i -s @lion.wang/get-query-param
```

### Example

```javascript

import getQueryParam from "@lion.wang/get-query-param"

//https://localhost/demo.html?a=1&b=2&c=3

const query = getQueryParam ()
console.log(query)
//{a:"1",b:"2",c:"3"}

const query = getQueryParam ('a')
console.log(query)
// 1

const query = getQueryParam ('a','b')
console.log(query)
// {a:"1",b:"2"}

const query = getQueryParam ('d')
console.log(query)
// null

const query = getQueryParam ('a','b','d')
console.log(query)
// {a:"1",b:"2"}

```
npm package: @lion/checkbox
Description: A single styleable and accessible checkbox
Author: ing-bank
Latest version: 0.3.16
Deprecated: This package has been superseded by @lion/checkbox-group.

# Checkbox

> ## 🛠 Status: Pilot Phase
> Lion Web Components are still in an early alpha stage; they should not be considered production ready yet.
>
> The goal of our pilot phase is to gather feedback from a private group of users.
> Therefore, during this phase, we kindly ask you to:
> - not publicly promote or link us yet: (no tweets, blog posts or other forms of communication about Lion Web Components)
> - not publicly promote or link products derived from/based on Lion Web Components
>
> As soon as Pilot Phase ends we will let you know (feel free to subscribe to this issue https://github.com/ing-bank/lion/issues/1)

`lion-checkbox` component is a sub-element to be used in [lion-checkbox-group](https://github.com/ing-bank/lion/blob/master/packages/checkbox-group) elements. Its purpose is to provide a way for users to check **multiple** options amongst a set of choices, or to function as a single toggle.

## Features

- Get the checked state (boolean) - `checked` boolean attribute
- Pre-select an option by setting the `checked` boolean attribute
- Get or set the value of the choice - `choiceValue()`

## How to use

### Installation

```sh
npm i --save @lion/checkbox
```

```js
import '@lion/checkbox/lion-checkbox.js';
```

### Example

```html
<lion-checkbox name="scientists[]" label="Archimedes" .choiceValue=${'Archimedes'}></lion-checkbox>
<lion-checkbox name="scientists[]" label="Francis Bacon" .choiceValue=${'Francis Bacon'}></lion-checkbox>
<lion-checkbox name="scientists[]" label="Marie Curie" .choiceValue=${'Marie Curie'}></lion-checkbox>
```

- Use this component inside a [lion-checkbox-group](https://github.com/ing-bank/lion/blob/master/packages/checkbox-group)
- Make sure that it has a name attribute with appended `[]` for multiple choices.
npm package: @lion/choice-input
Description: Base for all choise inputs like checkbox/radio
Author: ing-bank
Latest version: 0.9.1

# ChoiceInputMixin

`lion-choice-input` mixin is a fundamental building block of form controls which return a checked-state. It is used in:

- [lion-checkbox](https://github.com/ing-bank/lion/blob/master/packages/checkbox)
- [lion-option](https://github.com/ing-bank/lion/blob/master/packages/option/))
- [lion-radio](https://github.com/ing-bank/lion/blob/master/packages/radio/))
- [lion-switch](https://github.com/ing-bank/lion/blob/master/packages/switch/))

## Features

- Get or set the value of the choice - `choiceValue()`
- Get or set the modelValue (value and checked-state) of the choice - `.modelValue`
- Pre-select an option by setting the `checked` boolean attribute
npm package: @lion/field
Description: Fields are the most fundamental building block of the Form System
Author: ing-bank
Latest version: 0.13.1

# Form Fundaments

`Form control`s are the most fundamental building block of the Forms. They are the basis of
both `field`s and `fieldset`s, and the `form` itself.

## Fields

Fields are the actual form controls the end user interacts with.
They extend the `Field` class, which on its turn uses the `FormControlMixin`.
Fields provide a normalized, predictable API for platform components and custom made form controls.
On top of this, they feature:

- data synchronization with models
- formatting of view values
- advanced validation possibilities
- creation of advanced user interaction scenarios via `interaction states`
- provision of labels and help texts in an easy, declarative manner
- better focus management
- accessibility out of the box
- advanced styling possibilities: map your own Design System to the internal HTML structure

### Platform fields (wrappers)

- [`LionInput`](https://github.com/ing-bank/lion/blob/master/packages/input), a wrapper for `<input>`
- [`LionTextarea`](https://github.com/ing-bank/lion/blob/master/packages/textarea), a wrapper for `<textarea>`
- [`LionSelect`](https://github.com/ing-bank/lion/blob/master/packages/select), a wrapper for `<select>`
- [`LionRadio`](https://github.com/ing-bank/lion/blob/master/packages/radio), a wrapper for `<input type="radio">`
- [`LionCheckbox`](https://github.com/ing-bank/lion/blob/master/packages/checkbox), a wrapper for `<input type="checkbox">`

### Custom fields (wrappers)

Whenever a native form control doesn't exist or is not sufficient, a
[custom form field](https://github.com/ing-bank/lion/blob/master/packages/field/docs/CustomFieldsTutorial.md) should be created. One could think of components
like:

- slider
- combobox
- autocomplete
- etc...

## Fieldsets

Fieldsets are groups of fields. They can be considered fields on their own as well, since they
partly share the normalized api via `FormControlMixin`.
Fieldsets are the basis for:

- [`LionFieldset`](https://github.com/ing-bank/lion/blob/master/packages/fieldset)
- [`LionForm`](https://github.com/ing-bank/lion/blob/master/packages/form)
- [`LionRadioGroup`](https://github.com/ing-bank/lion/blob/master/packages/radio-group)
- [`LionCheckboxGroup`](https://github.com/ing-bank/lion/blob/master/packages/checkbox-group)

## Other Resources

- [Model Value](https://github.com/ing-bank/lion/blob/master/packages/field/docs/modelValue.md)
- [Formatting and parsing](https://github.com/ing-bank/lion/blob/master/packages/field/docs/FormattingAndParsing.md)
- [Interaction states](https://github.com/ing-bank/lion/blob/master/packages/field/docs/InteractionStates.md)
- [Validation System](https://github.com/ing-bank/lion/blob/master/packages/validate/docs/ValidationSystem.md)
- [Custom Fields](https://github.com/ing-bank/lion/blob/master/packages/field/docs/CustomFieldsTutorial.md)
npm package: @lion/form-system
Description: The Form System allows you to create complex forms with various validation in an easy way
Author: ing-bank
Latest version: 0.10.1

# Form System

The Form System allows you to create complex forms with various validation in an easy way.

## Features

- Built in [validate](https://github.com/ing-bank/lion/blob/master/packages/validate) for error/warning/info/success
- Formatting of values
- Accessible

## Packages

| Package                             | Description                        |
| ----------------------------------- | ---------------------------------- |
| [checkbox](https://github.com/ing-bank/lion/blob/master/packages/checkbox)             | Checkbox form element              |
| [checkbox-group](https://github.com/ing-bank/lion/blob/master/packages/checkbox-group) | Group of checkboxes                |
| [field](https://github.com/ing-bank/lion/blob/master/packages/field)                   | Base class for all inputs          |
| [form](https://github.com/ing-bank/lion/blob/master/packages/form)                     | Wrapper for multiple form elements |
| [input](https://github.com/ing-bank/lion/blob/master/packages/input)                   | Input element for strings          |
| [input-amount](https://github.com/ing-bank/lion/blob/master/packages/input-amount)     | Input element for amounts          |
| [input-date](https://github.com/ing-bank/lion/blob/master/packages/input-date)         | Input element for dates            |
| [input-email](https://github.com/ing-bank/lion/blob/master/packages/input-email)       | Input element for e-mails          |
| [input-iban](https://github.com/ing-bank/lion/blob/master/packages/input-iban)         | Input element for IBANs            |
| [radio](https://github.com/ing-bank/lion/blob/master/packages/radio)                   | Radio form element                 |
| [radio-group](https://github.com/ing-bank/lion/blob/master/packages/radio-group)       | Group of radios                    |
| [select](https://github.com/ing-bank/lion/blob/master/packages/select)                 | Simple native dropdown element     |
| [textarea](https://github.com/ing-bank/lion/blob/master/packages/textarea)             | Multiline text input               |
| [validate](https://github.com/ing-bank/lion/blob/master/packages/validate)             | Validation for our form components |

## Meta Package

This is a meta package to show interaction between various form elements.
For usage and installation please see the appropriate packages.
npm package: @lion/input-tel
Description: Input field for entering phone numbers, including validation, formatting and mobile keyboard support.
Author: ing-bank
Latest version: 0.2.3

# Input Tel >> Overview ||10

Input field for entering phone numbers, including validation, formatting and mobile keyboard support.

```js script
import { html } from '@mdjs/mdjs-preview';
import { ref, createRef } from '@lion/core';
import { PhoneUtilManager } from '@lion/input-tel';
import '@lion/input-tel/define';
import { loadDefaultFeedbackMessages } from '@lion/validate-messages';
import '../../../docs/fundamentals/systems/form/assets/h-output.js';
```

```js preview-story
export const main = () => {
  loadDefaultFeedbackMessages();
  return html`
    <lion-input-tel
      .modelValue="${'+639921343959'}"
      live-format
      label="Telephone number"
      name="phoneNumber"
    ></lion-input-tel>
    <h-output
      .show="${[
        'activeRegion',
        {
          name: 'all or allowed regions',
          processor: el => JSON.stringify(el._allowedOrAllRegions),
        },
        'modelValue',
      ]}" 'modelValue']}"
      .readyPromise="${PhoneUtilManager.loadComplete}"
    ></h-output>
  `;
};
```

## Features

- Extends our [input](https://github.com/ing-bank/lion/blob/650657231a4ec83592d45cd69836d28436635340/docs/components/input/overview.md)
- Shows a mobile telephone keypad on mobile (by having a native `<input inputmode="tel">` inside)
- Can be configured with a list of allowed region codes
- Will be preconfigured with region derived from locale
- Has the [e164 standard format](https://en.wikipedia.org/wiki/E.164) as modelValue
- Uses [awesome-phonenumber](https://www.npmjs.com/package/awesome-phonenumber) (a performant, concise version of [google-lib-phonenumber](https://www.npmjs.com/package/google-libphonenumber)):
  - Formats phone numbers, based on region code
  - Validates phone numbers, based on region code
- Lazy loads awesome-phonenumber, so that the first paint of this component will be brought to your screen as quick as possible

## Installation

```bash
npm i --save @lion/input-tel
```

```js
import { LionInputTel } from '@lion/input-tel';
// or
import '@lion/input-tel/define';
```
npm package: @lion/input-tel-dropdown
Description: Input field for entering phone numbers with the help of a dropdown region list
Author: ing-bank
Latest version: 0.2.3

# Input Tel >> Overview ||10

Input field for entering phone numbers, including validation, formatting and mobile keyboard support.

```js script
import { html } from '@mdjs/mdjs-preview';
import { ref, createRef } from '@lion/core';
import { PhoneUtilManager } from '@lion/input-tel';
import '@lion/input-tel/define';
import { loadDefaultFeedbackMessages } from '@lion/validate-messages';
import '../../../docs/fundamentals/systems/form/assets/h-output.js';
```

```js preview-story
export const main = () => {
  loadDefaultFeedbackMessages();
  return html`
    <lion-input-tel
      .modelValue="${'+639921343959'}"
      live-format
      label="Telephone number"
      name="phoneNumber"
    ></lion-input-tel>
    <h-output
      .show="${[
        'activeRegion',
        {
          name: 'all or allowed regions',
          processor: el => JSON.stringify(el._allowedOrAllRegions),
        },
        'modelValue',
      ]}" 'modelValue']}"
      .readyPromise="${PhoneUtilManager.loadComplete}"
    ></h-output>
  `;
};
```

## Features

- Extends our [input](https://github.com/ing-bank/lion/blob/650657231a4ec83592d45cd69836d28436635340/docs/components/input/overview.md)
- Shows a mobile telephone keypad on mobile (by having a native `<input inputmode="tel">` inside)
- Can be configured with a list of allowed region codes
- Will be preconfigured with region derived from locale
- Has the [e164 standard format](https://en.wikipedia.org/wiki/E.164) as modelValue
- Uses [awesome-phonenumber](https://www.npmjs.com/package/awesome-phonenumber) (a performant, concise version of [google-lib-phonenumber](https://www.npmjs.com/package/google-libphonenumber)):
  - Formats phone numbers, based on region code
  - Validates phone numbers, based on region code
- Lazy loads awesome-phonenumber, so that the first paint of this component will be brought to your screen as quick as possible

## Installation

```bash
npm i --save @lion/input-tel
```

```js
import { LionInputTel } from '@lion/input-tel';
// or
import '@lion/input-tel/define';
```
npm package: @lion/nodejs-helpers
Description: Node.js helpers that could be useful to extenders of lion
Author: ing-bank
Latest version: 0.1.0

# Node.js helpers

## Why?

To share the common code we use in our Node.js scripts and products.

## What?

Node.js helpers is a public package, yet will always stay alpha version.
The idea here is to share common code(DRY) and tasks with extenders of lion, like ing-web.
It consists of helpers and utilities, specific to our use cases, and not intended to be general purpose library.

> **Example use case:** Assume package-x extends @lion/ui and package-x wants to bypass the requirement of export/import map support. In that case same bypass must be done at @lion/ui side as well.

## How?

Don't try to predict and write a utility function, in other words, add utilities if and when needed.

Keep the APIs simple, extendable, yet specific to our use cases(KISS), in other words, don't write a generic utility.

Put shared tasks between lion and ing-web(extends lion) here.
npm package: @lion/option
Description: Allows to provide options for a rich select
Author: ing-bank
Latest version: 0.5.6

# Option

> ## 🛠 Status: Pilot Phase
> Lion Web Components are still in an early alpha stage; they should not be considered production ready yet.
>
> The goal of our pilot phase is to gather feedback from a private group of users.
> Therefore, during this phase, we kindly ask you to:
> - not publicly promote or link us yet: (no tweets, blog posts or other forms of communication about Lion Web Components)
> - not publicly promote or link products derived from/based on Lion Web Components
>
> As soon as Pilot Phase ends we will let you know (feel free to subscribe to this issue https://github.com/ing-bank/lion/issues/1)

`lion-option` is a selectable within a [lion-select-rich](https://github.com/ing-bank/lion/blob/master/packages/select-rich)

## Live Demo/Documentation

> See our [storybook](http://lion-web-components.netlify.com/?path=/docs/forms-option) for a live demo and API documentation

## How to use

### Installation

```sh
npm i --save @lion/option
```

```js
import '@lion/option/lion-option.js';
```

### Example

```html
<lion-option .choiceValue=${'hotpink'} checked>Hotpink</lion-option>
```

You can also set the full `modelValue` for each option.

```html
<lion-option .modelValue=${{ value: 'red', checked: false }}>Red</lion-option>
```

This component should not be used standalone. It is not accessible unless it is a child of a listbox-like element.

For more details on usage, please see [lion-select-rich](https://github.com/ing-bank/lion/blob/master/packages/select-rich).
npm package: @lion/radio
Description: Provide a way for users to check a single option amongst a set of choices
Author: ing-bank
Latest version: 0.4.6
Deprecated: This package has been superseded by @lion/radio-group.

# Radio

> ## 🛠 Status: Pilot Phase
> Lion Web Components are still in an early alpha stage; they should not be considered production ready yet.
>
> The goal of our pilot phase is to gather feedback from a private group of users.
> Therefore, during this phase, we kindly ask you to:
> - not publicly promote or link us yet: (no tweets, blog posts or other forms of communication about Lion Web Components)
> - not publicly promote or link products derived from/based on Lion Web Components
>
> As soon as Pilot Phase ends we will let you know (feel free to subscribe to this issue https://github.com/ing-bank/lion/issues/1)

`lion-radio` component is a sub-element to be used in [lion-radio-group](https://github.com/ing-bank/lion/blob/master/packages/radio-group) elements. Its purpose is to provide a way for users to check a **single** option amongst a set of choices.

## Features

- Get the checked state (boolean) - `checked` boolean attribute
- Pre-select an option by setting the `checked` boolean attribute
- Get or set the value of the choice - `choiceValue()`

## How to use

### Installation

```sh
npm i --save @lion/radio
```

```js
import '@lion/radio/lion-radio.js';
```

### Example

```html
<lion-radio name="dinos[]" label="allosaurus" .choiceValue=${'allosaurus'}></lion-radio>
<lion-radio name="dinos[]" label="brontosaurus" .choiceValue=${'brontosaurus'}></lion-radio>
<lion-radio name="dinos[]" label="diplodocus" .choiceValue=${'diplodocus'} checked></lion-radio>
```

- Use this component inside a [lion-radio-group](https://github.com/ing-bank/lion/blob/master/packages/radio-group)
- Make sure that it has a name attribute with appended `[]` for multiple choices.
npm package: @lion/validate
Description: Validate your form elements
Author: ing-bank
Latest version: 0.11.0
Deprecated: This package has been superseeded by @lion/form-core

# Validate

## Features

- allow for advanced UX scenarios by updating validation state on every value change
- provide a powerful way of writing validation via pure functions
- multiple validation types(error, warning, info, success)
- default validators
- custom validators

Validation is applied by default to all [form controls](https://github.com/ing-bank/lion/blob/master/packages/field/docs/FormFundaments.md) via the
ValidateMixin.

For a detailed description of the validation system and the `ValidateMixin`, please see [ValidationSystem](https://github.com/ing-bank/lion/blob/master/packages/validate/docs/ValidationSystem.md).

## How to use

### Installation

```sh
npm i --save @lion/validate
```

```js
import '@lion/input/lion-input.js';
import { %ValidatorName% } from '@lion/validate';
```

> Note that we import an lion-input here as an example of a form control implementing ValidateMixin.
> We could equally well use lion-textarea, lion-select, lion-fieldset etc. to illustrate our example.

### Example

All validators are provided as pure functions. They should be applied to the formcontrol (implementing
`ValidateMixin`) as follows:

```js
import '@lion/input/lion-input.js';
import { Required, IsString, MaxLength, DefaultSuccess, Validator } from '@lion/validate';

const isInitialsRegex = /^([A-Z]\.)+$/;
class IsInitialsExample extends Validator {
  static get validatorName() {
    return 'IsExampleInitials';
  }

  execute(value) {
    let hasFeedback = false;
    const isStringValidator = new IsString();
    if (!isStringValidator.execute(value) || !isInitialsRegex.test(value.toLowerCase())) {
      hasFeedback = true;
    }
    return hasFeedback;
  }

  static getMessage({ fieldName }) {
    return `Please enter a valid {fieldName} in the format "A.B.C.".`;
  }
}
```

```html
<lion-input
  label="Initials"
  name="initials"
  .validators="${[new Required(), new MaxLength(10), new IsInitialsExample(null, { type: 'warning' }), new DefaultSuccess()]}"
></lion-input>
```

In the example above we use different types of validators.
A validator applied to `.validators` expects an array with a function, a parameters object and
optionally an additional configuration object.

```js
MinMaxLength({ min: 5, max: 10 });
```

The custom `IsInitialsExample` checks if the value is fitting our regex, but does not prevent the user from submitting other values.

Retrieving validity states is as easy as checking for:

```js
myInitialsInput.hasFeedbackFor.include('error');
```