From c5df479321b1db0df0a41bb9eabdbd4b6e14bf9f Mon Sep 17 00:00:00 2001 From: Nathaniel Cherian Date: Fri, 4 Jun 2021 23:31:08 -0700 Subject: [PATCH 01/14] test branch --- client/testFixture/P2PKH.cash | 1 + 1 file changed, 1 insertion(+) diff --git a/client/testFixture/P2PKH.cash b/client/testFixture/P2PKH.cash index f7c59df..87433a9 100644 --- a/client/testFixture/P2PKH.cash +++ b/client/testFixture/P2PKH.cash @@ -5,6 +5,7 @@ contract P2PKH(bytes20 pkh) { require(hash160(pk) == pkh); require(checkSig(s, pk)); require(checkSig(s, pk)); + test } } From 278d6a653288da6cad875dcf4372891ad7fb6a8c Mon Sep 17 00:00:00 2001 From: Nathaniel Cherian Date: Mon, 7 Jun 2021 07:54:36 -0700 Subject: [PATCH 02/14] t --- client/testFixture/P2PKH.cash | 4 +- vscode-cashscript/.vscode/launch.json | 17 ++ vscode-cashscript/.vscodeignore | 4 + vscode-cashscript/CHANGELOG.md | 9 + vscode-cashscript/README.md | 65 ++++++ .../cashscript.configuration.json | 26 +++ vscode-cashscript/package.json | 31 +++ .../snippets/cashscript.snippets.json | 28 +++ .../syntaxes/cashscript.tmLanguage.json | 197 ++++++++++++++++++ vscode-cashscript/vsc-extension-quickstart.md | 29 +++ 10 files changed, 409 insertions(+), 1 deletion(-) create mode 100644 vscode-cashscript/.vscode/launch.json create mode 100644 vscode-cashscript/.vscodeignore create mode 100644 vscode-cashscript/CHANGELOG.md create mode 100644 vscode-cashscript/README.md create mode 100644 vscode-cashscript/cashscript.configuration.json create mode 100644 vscode-cashscript/package.json create mode 100644 vscode-cashscript/snippets/cashscript.snippets.json create mode 100644 vscode-cashscript/syntaxes/cashscript.tmLanguage.json create mode 100644 vscode-cashscript/vsc-extension-quickstart.md diff --git a/client/testFixture/P2PKH.cash b/client/testFixture/P2PKH.cash index 87433a9..136c1a2 100644 --- a/client/testFixture/P2PKH.cash +++ b/client/testFixture/P2PKH.cash @@ -5,7 +5,9 @@ contract P2PKH(bytes20 pkh) { require(hash160(pk) == pkh); require(checkSig(s, pk)); require(checkSig(s, pk)); - test + int f = 5; + } + } diff --git a/vscode-cashscript/.vscode/launch.json b/vscode-cashscript/.vscode/launch.json new file mode 100644 index 0000000..0e191b5 --- /dev/null +++ b/vscode-cashscript/.vscode/launch.json @@ -0,0 +1,17 @@ +// A launch configuration that launches the extension inside a new window +// Use IntelliSense to learn about possible attributes. +// Hover to view descriptions of existing attributes. +// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Extension", + "type": "extensionHost", + "request": "launch", + "args": [ + "--extensionDevelopmentPath=${workspaceFolder}" + ] + } + ] +} \ No newline at end of file diff --git a/vscode-cashscript/.vscodeignore b/vscode-cashscript/.vscodeignore new file mode 100644 index 0000000..f369b5e --- /dev/null +++ b/vscode-cashscript/.vscodeignore @@ -0,0 +1,4 @@ +.vscode/** +.vscode-test/** +.gitignore +vsc-extension-quickstart.md diff --git a/vscode-cashscript/CHANGELOG.md b/vscode-cashscript/CHANGELOG.md new file mode 100644 index 0000000..6cadf9b --- /dev/null +++ b/vscode-cashscript/CHANGELOG.md @@ -0,0 +1,9 @@ +# Change Log + +All notable changes to the "vscode-cashscript" extension will be documented in this file. + +Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file. + +## [Unreleased] + +- Initial release \ No newline at end of file diff --git a/vscode-cashscript/README.md b/vscode-cashscript/README.md new file mode 100644 index 0000000..f91fbc3 --- /dev/null +++ b/vscode-cashscript/README.md @@ -0,0 +1,65 @@ +# vscode-cashscript README + +This is the README for your extension "vscode-cashscript". After writing up a brief description, we recommend including the following sections. + +## Features + +Describe specific features of your extension including screenshots of your extension in action. Image paths are relative to this README file. + +For example if there is an image subfolder under your extension project workspace: + +\!\[feature X\]\(images/feature-x.png\) + +> Tip: Many popular extensions utilize animations. This is an excellent way to show off your extension! We recommend short, focused animations that are easy to follow. + +## Requirements + +If you have any requirements or dependencies, add a section describing those and how to install and configure them. + +## Extension Settings + +Include if your extension adds any VS Code settings through the `contributes.configuration` extension point. + +For example: + +This extension contributes the following settings: + +* `myExtension.enable`: enable/disable this extension +* `myExtension.thing`: set to `blah` to do something + +## Known Issues + +Calling out known issues can help limit users opening duplicate issues against your extension. + +## Release Notes + +Users appreciate release notes as you update your extension. + +### 1.0.0 + +Initial release of ... + +### 1.0.1 + +Fixed issue #. + +### 1.1.0 + +Added features X, Y, and Z. + +----------------------------------------------------------------------------------------------------------- + +## Working with Markdown + +**Note:** You can author your README using Visual Studio Code. Here are some useful editor keyboard shortcuts: + +* Split the editor (`Cmd+\` on macOS or `Ctrl+\` on Windows and Linux) +* Toggle preview (`Shift+CMD+V` on macOS or `Shift+Ctrl+V` on Windows and Linux) +* Press `Ctrl+Space` (Windows, Linux) or `Cmd+Space` (macOS) to see a list of Markdown snippets + +### For more information + +* [Visual Studio Code's Markdown Support](http://code.visualstudio.com/docs/languages/markdown) +* [Markdown Syntax Reference](https://help.github.com/articles/markdown-basics/) + +**Enjoy!** diff --git a/vscode-cashscript/cashscript.configuration.json b/vscode-cashscript/cashscript.configuration.json new file mode 100644 index 0000000..3227c2e --- /dev/null +++ b/vscode-cashscript/cashscript.configuration.json @@ -0,0 +1,26 @@ +{ + "comments": { + "lineComment": "//", + "blockComment": [ "/*", "*/" ] + }, + "brackets": [ + ["{", "}"], + ["[", "]"], + ["(", ")"] + ], + "autoClosingPairs": [ + { "open": "{", "close": "}" }, + { "open": "[", "close": "]" }, + { "open": "(", "close": ")" }, + { "open": "'", "close": "'", "notIn": ["string", "comment"] }, + { "open": "\"", "close": "\"", "notIn": ["string"] }, + { "open": "/*", "close": " */", "notIn": ["string"] } + ], + "surroundingPairs": [ + ["{", "}"], + ["[", "]"], + ["(", ")"], + ["\"", "\""], + ["'", "'"] + ] +} \ No newline at end of file diff --git a/vscode-cashscript/package.json b/vscode-cashscript/package.json new file mode 100644 index 0000000..a7f73e0 --- /dev/null +++ b/vscode-cashscript/package.json @@ -0,0 +1,31 @@ +{ + "name": "vscode-cashscript", + "displayName": "vscode-cashscript", + "description": "Language extension for cashscript", + "version": "0.0.1", + "engines": { + "vscode": "^1.46.0" + }, + "categories": [ + "Programming Languages" + ], + "contributes": { + "languages": [{ + "id": "cashscript", + "aliases": ["Cashscript", "cashscript"], + "extensions": [".cash"], + "configuration": "./cashscript.configuration.json" + }], + "grammars": [{ + "language": "cashscript", + "scopeName": "source.cash", + "path": "./syntaxes/cashscript.tmLanguage.json" + }], + "snippets": [ + { + "language": "cashscript", + "path": "./snippets/cashscript.snippets.json" + } + ] + } +} \ No newline at end of file diff --git a/vscode-cashscript/snippets/cashscript.snippets.json b/vscode-cashscript/snippets/cashscript.snippets.json new file mode 100644 index 0000000..62279b6 --- /dev/null +++ b/vscode-cashscript/snippets/cashscript.snippets.json @@ -0,0 +1,28 @@ +{ + "Set Pragma":{ + "prefix":"pragma", + "body":"pragma cashscript ^${1:0.5.6};\n", + "description":"Set semantic version" + }, + + + "Function Statement" : { + "prefix":"function", + "body":"function ${1:functionName}(${2:params}) {\n\t$3\n}", + "description":"Create function" + }, + + "If Statement" : { + "prefix":"if", + "body":"if (${1:condition}){\n\t$2\n}", + "description":"If statement" + }, + + "If-Else statement":{ + "prefix":"ifelse", + "body":"if (${1:condition}) {\n\t$2\n} else {\n\t$3\n}", + "description":"if-else statement" + } + + +} \ No newline at end of file diff --git a/vscode-cashscript/syntaxes/cashscript.tmLanguage.json b/vscode-cashscript/syntaxes/cashscript.tmLanguage.json new file mode 100644 index 0000000..775b34d --- /dev/null +++ b/vscode-cashscript/syntaxes/cashscript.tmLanguage.json @@ -0,0 +1,197 @@ +{ + "scopeName": "source.cash", + "patterns": [ + {"include":"#comment"}, + {"include":"#string"}, + {"include":"#unit"}, + {"include":"#type"}, + {"include":"#control"}, + {"include":"#function"}, + {"include":"#declaration"}, + + {"include":"#variable"}, + {"include":"#numeric"} + ], + "repository": { + + "comment": { + "patterns": [{ "include": "#comment-line" }, {"include":"#comment-block"}] + }, + "comment-line": { + "match": "(?/.vscode/extensions` folder and restart Code. +* To share your extension with the world, read on https://code.visualstudio.com/docs about publishing an extension. From c00616a43570382f91c11cb9f2801bac4e44689e Mon Sep 17 00:00:00 2001 From: Nathaniel Cherian Date: Mon, 7 Jun 2021 08:30:56 -0700 Subject: [PATCH 03/14] test --- vscode-cashscript/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vscode-cashscript/README.md b/vscode-cashscript/README.md index f91fbc3..6d24224 100644 --- a/vscode-cashscript/README.md +++ b/vscode-cashscript/README.md @@ -1,4 +1,4 @@ -# vscode-cashscript README +# vscode-cashscript = This is the README for your extension "vscode-cashscript". After writing up a brief description, we recommend including the following sections. From a87c2b6a27dbe4e3fdf62b6742d0a7cded53917e Mon Sep 17 00:00:00 2001 From: Nathaniel Cherian Date: Mon, 7 Jun 2021 12:41:05 -0700 Subject: [PATCH 04/14] transfer --- client/testFixture/P2PKH.cash | 3 +- vscode-cashscript/client/extension.ts | 33 +++ vscode-cashscript/client/server.ts | 0 vscode-cashscript/package-lock.json | 385 ++++++++++++++++++++++++++ vscode-cashscript/package.json | 38 ++- 5 files changed, 445 insertions(+), 14 deletions(-) create mode 100644 vscode-cashscript/client/extension.ts create mode 100644 vscode-cashscript/client/server.ts create mode 100644 vscode-cashscript/package-lock.json diff --git a/client/testFixture/P2PKH.cash b/client/testFixture/P2PKH.cash index 136c1a2..8e94392 100644 --- a/client/testFixture/P2PKH.cash +++ b/client/testFixture/P2PKH.cash @@ -5,8 +5,7 @@ contract P2PKH(bytes20 pkh) { require(hash160(pk) == pkh); require(checkSig(s, pk)); require(checkSig(s, pk)); - int f = 5; - + require(checkMultiSig()) } diff --git a/vscode-cashscript/client/extension.ts b/vscode-cashscript/client/extension.ts new file mode 100644 index 0000000..a46e284 --- /dev/null +++ b/vscode-cashscript/client/extension.ts @@ -0,0 +1,33 @@ +import * as path from 'path'; +import * as vscode from 'vscode'; +import { ExtensionContext, workspace } from 'vscode'; +import { LanguageClient, LanguageClientOptions, ServerOptions } from 'vscode-languageclient/node'; + +let client: LanguageClient; + +export function activate(context: ExtensionContext){ + + + // Initialize Server + const serverModule = path.join(__dirname, 'server.js'); + let serverOptions: ServerOptions = { + RUN:{MODULE} + } + + // Initialize Client + let clientOptions: LanguageClientOptions = { + documentSelector: [{scheme:'file', language:'cashscript'}], + synchronize: { + fileEvents: workspace.createFileSystemWatcher('**/.clientrc') + } + } + + client.start(); +} + +export function deactivate(): Thenable | undefined { + if(!client){ + return undefined; + } + return client.stop(); +} \ No newline at end of file diff --git a/vscode-cashscript/client/server.ts b/vscode-cashscript/client/server.ts new file mode 100644 index 0000000..e69de29 diff --git a/vscode-cashscript/package-lock.json b/vscode-cashscript/package-lock.json new file mode 100644 index 0000000..cd373f7 --- /dev/null +++ b/vscode-cashscript/package-lock.json @@ -0,0 +1,385 @@ +{ + "name": "vscode-cashscript", + "version": "0.0.1", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "requires": { + "debug": "4" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, + "commander": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==" + }, + "es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" + }, + "es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "requires": { + "es6-promise": "^4.0.3" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=" + }, + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + } + }, + "https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + } + }, + "mocha": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", + "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", + "requires": { + "browser-stdout": "1.3.1", + "commander": "2.15.1", + "debug": "3.1.0", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "glob": "7.1.2", + "growl": "1.10.5", + "he": "1.1.1", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "supports-color": "5.4.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "vscode": { + "version": "1.1.37", + "resolved": "https://registry.npmjs.org/vscode/-/vscode-1.1.37.tgz", + "integrity": "sha512-vJNj6IlN7IJPdMavlQa1KoFB3Ihn06q1AiN3ZFI/HfzPNzbKZWPPuiU+XkpNOfGU5k15m4r80nxNPlM7wcc0wg==", + "requires": { + "glob": "^7.1.2", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "mocha": "^5.2.0", + "semver": "^5.4.1", + "source-map-support": "^0.5.0", + "vscode-test": "^0.4.1" + } + }, + "vscode-jsonrpc": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", + "integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==" + }, + "vscode-languageclient": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-7.0.0.tgz", + "integrity": "sha512-P9AXdAPlsCgslpP9pRxYPqkNYV7Xq8300/aZDpO35j1fJm/ncize8iGswzYlcvFw5DQUx4eVk+KvfXdL0rehNg==", + "requires": { + "minimatch": "^3.0.4", + "semver": "^7.3.4", + "vscode-languageserver-protocol": "3.16.0" + }, + "dependencies": { + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "vscode-languageserver-protocol": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz", + "integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==", + "requires": { + "vscode-jsonrpc": "6.0.0", + "vscode-languageserver-types": "3.16.0" + } + }, + "vscode-languageserver-types": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", + "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==" + }, + "vscode-test": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-0.4.3.tgz", + "integrity": "sha512-EkMGqBSefZH2MgW65nY05rdRSko15uvzq4VAPM5jVmwYuFQKE7eikKXNJDRxL+OITXHB6pI+a3XqqD32Y3KC5w==", + "requires": { + "http-proxy-agent": "^2.1.0", + "https-proxy-agent": "^2.2.1" + }, + "dependencies": { + "agent-base": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", + "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", + "requires": { + "es6-promisify": "^5.0.0" + } + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "http-proxy-agent": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", + "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", + "requires": { + "agent-base": "4", + "debug": "3.1.0" + } + }, + "https-proxy-agent": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", + "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", + "requires": { + "agent-base": "^4.3.0", + "debug": "^3.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } +} diff --git a/vscode-cashscript/package.json b/vscode-cashscript/package.json index a7f73e0..aa698ad 100644 --- a/vscode-cashscript/package.json +++ b/vscode-cashscript/package.json @@ -9,23 +9,37 @@ "categories": [ "Programming Languages" ], + "main": "./client/out/extension", "contributes": { - "languages": [{ - "id": "cashscript", - "aliases": ["Cashscript", "cashscript"], - "extensions": [".cash"], - "configuration": "./cashscript.configuration.json" - }], - "grammars": [{ - "language": "cashscript", - "scopeName": "source.cash", - "path": "./syntaxes/cashscript.tmLanguage.json" - }], + "languages": [ + { + "id": "cashscript", + "aliases": [ + "Cashscript", + "cashscript" + ], + "extensions": [ + ".cash" + ], + "configuration": "./cashscript.configuration.json" + } + ], + "grammars": [ + { + "language": "cashscript", + "scopeName": "source.cash", + "path": "./syntaxes/cashscript.tmLanguage.json" + } + ], "snippets": [ { "language": "cashscript", "path": "./snippets/cashscript.snippets.json" } ] + }, + "dependencies": { + "vscode": "^1.1.37", + "vscode-languageclient": "^7.0.0" } -} \ No newline at end of file +} From d0e13184a3c39557e01e482400dab4102d9da541 Mon Sep 17 00:00:00 2001 From: Nathaniel Cherian Date: Mon, 7 Jun 2021 12:41:16 -0700 Subject: [PATCH 05/14] transfer --- vscode-cashscript/client/extension.ts | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/vscode-cashscript/client/extension.ts b/vscode-cashscript/client/extension.ts index a46e284..4b6c01e 100644 --- a/vscode-cashscript/client/extension.ts +++ b/vscode-cashscript/client/extension.ts @@ -1,20 +1,30 @@ import * as path from 'path'; import * as vscode from 'vscode'; import { ExtensionContext, workspace } from 'vscode'; -import { LanguageClient, LanguageClientOptions, ServerOptions } from 'vscode-languageclient/node'; +import { LanguageClient, LanguageClientOptions, ServerOptions, TransportKind } from 'vscode-languageclient/node'; let client: LanguageClient; export function activate(context: ExtensionContext){ - // Initialize Server + // Initialize Server Options const serverModule = path.join(__dirname, 'server.js'); let serverOptions: ServerOptions = { - RUN:{MODULE} + debug:{ + module:serverModule, + options:{ + execArgv: ['--nolazy', '--inspect=6069'] + }, + transport:TransportKind.ipc + }, + run:{ + module:serverModule, + transport: TransportKind.ipc + } } - // Initialize Client + // Initialize Client Options let clientOptions: LanguageClientOptions = { documentSelector: [{scheme:'file', language:'cashscript'}], synchronize: { From 1251c6f1f5e3275404781a4066f53525dd5cc3cb Mon Sep 17 00:00:00 2001 From: Nathaniel Cherian Date: Mon, 7 Jun 2021 23:22:57 -0700 Subject: [PATCH 06/14] add client --- client/testFixture/P2PKH.cash | 3 +- vscode-cashscript/.vscode/launch.json | 17 +++ vscode-cashscript/.vscode/tasks.json | 18 +++ vscode-cashscript/client/server.ts | 0 vscode-cashscript/package-lock.json | 18 +++ vscode-cashscript/package.json | 16 ++- .../src/CashscriptHoverProvider.ts | 126 ++++++++++++++++++ vscode-cashscript/src/LanguageDesc.ts | 111 +++++++++++++++ .../{client => src}/extension.ts | 23 +++- vscode-cashscript/src/server.ts | 17 +++ vscode-cashscript/tsconfig.json | 19 +++ 11 files changed, 362 insertions(+), 6 deletions(-) create mode 100644 vscode-cashscript/.vscode/tasks.json delete mode 100644 vscode-cashscript/client/server.ts create mode 100644 vscode-cashscript/src/CashscriptHoverProvider.ts create mode 100644 vscode-cashscript/src/LanguageDesc.ts rename vscode-cashscript/{client => src}/extension.ts (68%) create mode 100644 vscode-cashscript/src/server.ts create mode 100644 vscode-cashscript/tsconfig.json diff --git a/client/testFixture/P2PKH.cash b/client/testFixture/P2PKH.cash index 8e94392..de740a9 100644 --- a/client/testFixture/P2PKH.cash +++ b/client/testFixture/P2PKH.cash @@ -5,8 +5,9 @@ contract P2PKH(bytes20 pkh) { require(hash160(pk) == pkh); require(checkSig(s, pk)); require(checkSig(s, pk)); - require(checkMultiSig()) + require(checkMultiSig()); } } + diff --git a/vscode-cashscript/.vscode/launch.json b/vscode-cashscript/.vscode/launch.json index 0e191b5..3ebc5bd 100644 --- a/vscode-cashscript/.vscode/launch.json +++ b/vscode-cashscript/.vscode/launch.json @@ -9,8 +9,25 @@ "name": "Extension", "type": "extensionHost", "request": "launch", + "runtimeExecutable": "${execPath}", "args": [ "--extensionDevelopmentPath=${workspaceFolder}" + ], + "sourceMaps": true, + "outFiles": [ + "${workspaceFolder}/out/src/**/*.js" + ], + "preLaunchTask": "npm: watch", + "stopOnEntry": false + }, + { + "type": "node", + "request": "attach", + "name": "Attach to Server", + "port": 6009, + "restart": true, + "outFiles": [ + "${workspaceRoot}/out/src/**/*.js" ] } ] diff --git a/vscode-cashscript/.vscode/tasks.json b/vscode-cashscript/.vscode/tasks.json new file mode 100644 index 0000000..8417837 --- /dev/null +++ b/vscode-cashscript/.vscode/tasks.json @@ -0,0 +1,18 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "type": "npm", + "script": "watch", + "problemMatcher": "$tsc-watch", + "isBackground": true, + "presentation": { + "reveal": "never" + }, + "group": { + "kind": "build", + "isDefault": true + } + } + ] +} \ No newline at end of file diff --git a/vscode-cashscript/client/server.ts b/vscode-cashscript/client/server.ts deleted file mode 100644 index e69de29..0000000 diff --git a/vscode-cashscript/package-lock.json b/vscode-cashscript/package-lock.json index cd373f7..13b1425 100644 --- a/vscode-cashscript/package-lock.json +++ b/vscode-cashscript/package-lock.json @@ -9,6 +9,11 @@ "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" }, + "@types/vscode": { + "version": "1.56.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.56.0.tgz", + "integrity": "sha512-Q5VmQxOx+L1Y6lIJiGcJzwcyV3pQo/eiW8P+7sNLhFI16tJCwtua2DLjHRcpjbCLNVYpQM73kzfFo1Z0HyP9eQ==" + }, "agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", @@ -307,6 +312,14 @@ } } }, + "vscode-languageserver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz", + "integrity": "sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw==", + "requires": { + "vscode-languageserver-protocol": "3.16.0" + } + }, "vscode-languageserver-protocol": { "version": "3.16.0", "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz", @@ -316,6 +329,11 @@ "vscode-languageserver-types": "3.16.0" } }, + "vscode-languageserver-textdocument": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.1.tgz", + "integrity": "sha512-UIcJDjX7IFkck7cSkNNyzIz5FyvpQfY7sdzVy+wkKN/BLaD4DQ0ppXQrKePomCxTS7RrolK1I0pey0bG9eh8dA==" + }, "vscode-languageserver-types": { "version": "3.16.0", "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", diff --git a/vscode-cashscript/package.json b/vscode-cashscript/package.json index aa698ad..be67a85 100644 --- a/vscode-cashscript/package.json +++ b/vscode-cashscript/package.json @@ -9,7 +9,16 @@ "categories": [ "Programming Languages" ], - "main": "./client/out/extension", + "activationEvents": [ + "onLanguage:cashscript" + ], + "main": "./out/src/extension", + "scripts": { + "vscode:prepublish": "npm run compile", + "compile": "tsc -p ./", + "watch": "tsc -watch -p ./", + "prepare": "node ./node_modules/vscode/bin/install" + }, "contributes": { "languages": [ { @@ -39,7 +48,10 @@ ] }, "dependencies": { + "@types/vscode": "^1.56.0", "vscode": "^1.1.37", - "vscode-languageclient": "^7.0.0" + "vscode-languageclient": "^7.0.0", + "vscode-languageserver": "^7.0.0", + "vscode-languageserver-textdocument": "^1.0.1" } } diff --git a/vscode-cashscript/src/CashscriptHoverProvider.ts b/vscode-cashscript/src/CashscriptHoverProvider.ts new file mode 100644 index 0000000..a0d9255 --- /dev/null +++ b/vscode-cashscript/src/CashscriptHoverProvider.ts @@ -0,0 +1,126 @@ +import * as vscode from 'vscode'; +import { MarkedString } from 'vscode-languageclient'; +import { LANGUAGE } from './LanguageDesc'; + +class CashscriptHoverProvider implements vscode.HoverProvider{ + + re = /[a-zA-Z0-9]+/g; // regex to get selected word + constructor(private channel: vscode.OutputChannel = null){} + + provideHover(document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken): vscode.ProviderResult { + + + let range = document.getWordRangeAtPosition(position, this.re); + let word = document.getText(range); + + //this.channel.appendLine("hoverword: "+word) + const annotation = this.getHoverAnnotation(word); + if(annotation) return new vscode.Hover(annotation, range); + + const miscel = this.getMiscellaneousHovers(document, position); + if(miscel) return new vscode.Hover(miscel, range) + + // check special words + + const dotHovers = this.getTxDotHovers(document, position); + if(dotHovers) return new vscode.Hover(dotHovers, range) + + const varTypes = this.getVariableTypes(document, word); // fix this + if(varTypes) return new vscode.Hover(varTypes, range); + + return null; + } + + + getHoverAnnotation(word:string):vscode.MarkdownString[]{ + + const data = LANGUAGE[word] || null; + if(!data) return null; + + return [ + new vscode.MarkdownString().appendCodeblock(data.code), + new vscode.MarkdownString(data.codeDesc) + ] + } + + + getMiscellaneousHovers(document:vscode.TextDocument, position:vscode.Position):vscode.MarkdownString[]{ + + const reg = /(contract|function)\s+(\w+)\s*\(.*\)/; + let range = document.getWordRangeAtPosition(position, reg); + let word = document.getText(range); + if(word.includes("\n")) return null; + + return [ + new vscode.MarkdownString().appendCodeblock(word) + ]; + } + + /* + * Very bad way to get type annotations, better option: custom Tree Builder + */ + getVariableTypes(document:vscode.TextDocument, targetWord:string):vscode.MarkdownString[]{ + const reg = /([a-zA-Z0-9]+)\s+(pk)[^a-zA-Z0-9]/; + const text = document.getText(); + const matches = text.match(new RegExp(`([a-zA-Z0-9]+)\\s+(${targetWord})[^a-zA-Z0-9]`)); //regex still incomplete + if(!matches) return null; + + return [ + new vscode.MarkdownString().appendCodeblock(`${matches[1]} ${matches[2]}`), + ] + } + + getTxDotHovers(document:vscode.TextDocument, position:vscode.Position):vscode.MarkdownString[]{ + const reg = /tx.[a-zA-Z0-9]+/; + let range = document.getWordRangeAtPosition(position, reg); + let word = document.getText(range).substring(3); + + // /### tx.(\w+)\n+```solidity\n(.+)\n```/ + const TX_HOVERS = { + time:{ + code:'require(tx.time >= );' + }, + age:{ + code:'require(tx.age >= );' + }, + version:{ + code:'bytes4 tx.version' + }, + hashPrevouts:{ + code:'bytes32 tx.hashPrevouts' + }, + hashSequence:{ + code:'bytes32 tx.hashSequence' + }, + outpoint:{ + code:'bytes36 tx.outpoint' + }, + bytecode:{ + code:'bytes tx.bytecode' + }, + value:{ + code:'bytes8 value' + }, + sequence:{ + code:'bytes4 tx.sequence' + }, + hashOutputs:{ + code:'bytes32 tx.hashOutputs' + }, + locktime:{ + code:'bytes4 tx.locktime' + }, + hashtype:{ + code:'bytes4 tx.hashtype' + }, + } + + + return [ + new vscode.MarkdownString().appendCodeblock(TX_HOVERS[word].code) + ]; + } + +} + +export default CashscriptHoverProvider; \ No newline at end of file diff --git a/vscode-cashscript/src/LanguageDesc.ts b/vscode-cashscript/src/LanguageDesc.ts new file mode 100644 index 0000000..c94574f --- /dev/null +++ b/vscode-cashscript/src/LanguageDesc.ts @@ -0,0 +1,111 @@ + +interface Data { + [key:string]:{ + code:string, + codeDesc:string, + } +} + + +// Regex to match: (### (\w+)\(\)\n```solidity\n(.*)\n```\n\n(.*)) +let GLOBAL_FUNCTIONS:Data = { + abs:{ + code:'int abs(int a)', + codeDesc:'Returns the absolute value of argument `a`.', + }, + min:{ + code:'int min(int a, int b)', + codeDesc:'Returns the minimum value of arguments `a` and `b`.', + }, + max:{ + code:'int max(int a, int b)', + codeDesc:'Returns the maximum value of arguments `a` and `b`.', + }, + within:{ + code:'bool within(int x, int lower, int upper)', + codeDesc:'Returns `true` if and only if `x >= lower && x < upper`.', + }, + ripemd160:{ + code:'bytes20 ripemd160(any x)', + codeDesc:'Returns the RIPEMD-160 hash of argument `x`.', + }, + sha1:{ + code:'bytes20 sha1(any x)', + codeDesc:'Returns the SHA-1 hash of argument `x`.', + }, + sha256:{ + code:'bytes32 sha256(any x)', + codeDesc:'Returns the SHA-256 hash of argument `x`.', + }, + hash160:{ + code:'bytes20 hash160(any x)', + codeDesc:'Returns the RIPEMD-160 hash of the SHA-256 hash of argument `x`.', + }, + hash256:{ + code:'bytes32 hash256(any x)', + codeDesc:'Returns the double SHA-256 hash of argument `x`.', + }, + checkSig:{ + code:'bool checkSig(sig s, pubkey pk)', + codeDesc:'Checks that transaction signature `s` is valid for the current transaction and matches with public key `pk`.', + }, + checkMultiSig:{ + code:'bool checkMultiSig(sig[] sigs, pubkey[] pks)', + codeDesc:'Performs a multi-signature check using a list of transaction signatures and public keys.', + }, + checkDataSig:{ + code:'bool checkDataSig(datasig s, bytes msg, pubkey pk)', + codeDesc:'Checks that sig `s` is a valid signature for message `msg` and matches with public key `pk`.', + }, +} + + +let OUTPUT_INSTANTIATION:Data = { + OutputP2PKH:{ + code:'new OutputP2PKH(bytes8 amount, bytes20 pkh): bytes34', + codeDesc:'Creates new P2PKH output serialisation for an output sending `amount` to `pkh`.', + }, + OutputP2SH:{ + code:'new OutputP2SH(bytes8 amount, bytes20 scriptHash): bytes32', + codeDesc:'Creates new P2SH output serialisation for an output sending `amount` to `scriptHash`.', + }, + OutputNullData:{ + code:'new OutputNullData(bytes[] chunks): bytes', + codeDesc:'Creates new OP_RETURN output serialisation for an output containing an OP_RETURN script with `chunks` as its data.', + }, +} + +let STATEMENTS:Data = { + require:{ + code:'null require( exp )', + codeDesc:"Takes a boolean expression, if it evaluates to 'false' the contract fails. Used to ensure requirements" + } +} + +let TYPECASTS:Data = { + int:{ + code:"int int( v )", + codeDesc:"Converts to int" + }, + string:{ + code:"string string( v )", + codeDesc:"Converts to string" + }, + bytes:{ + code:"bytes bytes( v )", + codeDesc:"Converts to bytes" + }, + bool:{ + code:"bool bool( v )", + codeDesc:"Converts to bool" + }, + date:{ + code:"int date(\" YYYY-MM-DDThh:mm:ss \")", + codeDesc:"Converts implicit date to timestamp" + } + +} + +let LANGUAGE:Data = {...GLOBAL_FUNCTIONS, ...OUTPUT_INSTANTIATION, ...STATEMENTS}; + +export { GLOBAL_FUNCTIONS, OUTPUT_INSTANTIATION, TYPECASTS, LANGUAGE }; \ No newline at end of file diff --git a/vscode-cashscript/client/extension.ts b/vscode-cashscript/src/extension.ts similarity index 68% rename from vscode-cashscript/client/extension.ts rename to vscode-cashscript/src/extension.ts index 4b6c01e..f2106b1 100644 --- a/vscode-cashscript/client/extension.ts +++ b/vscode-cashscript/src/extension.ts @@ -2,6 +2,7 @@ import * as path from 'path'; import * as vscode from 'vscode'; import { ExtensionContext, workspace } from 'vscode'; import { LanguageClient, LanguageClientOptions, ServerOptions, TransportKind } from 'vscode-languageclient/node'; +import CashscriptHoverProvider from './CashscriptHoverProvider'; let client: LanguageClient; @@ -26,11 +27,27 @@ export function activate(context: ExtensionContext){ // Initialize Client Options let clientOptions: LanguageClientOptions = { - documentSelector: [{scheme:'file', language:'cashscript'}], + documentSelector: [ + {scheme:'file', language:'cashscript'} + ], synchronize: { fileEvents: workspace.createFileSystemWatcher('**/.clientrc') - } - } + }, + initializationOptions: context.extensionPath, + }; + + + client = new LanguageClient( + 'cashscript', + 'Cashscript Language Server', + serverOptions, + clientOptions + ) + + // Subscribe to events here + + vscode.languages.registerHoverProvider('cashscript', new CashscriptHoverProvider()) + client.start(); } diff --git a/vscode-cashscript/src/server.ts b/vscode-cashscript/src/server.ts new file mode 100644 index 0000000..bcb04c1 --- /dev/null +++ b/vscode-cashscript/src/server.ts @@ -0,0 +1,17 @@ +import { + createConnection, + ProposedFeatures, + TextDocuments +} from 'vscode-languageserver/node' +import { TextDocument } from 'vscode-languageserver-textdocument'; + +let connection = createConnection(ProposedFeatures.all); +let documents: TextDocuments = new TextDocuments(TextDocument); + +// Connection stuff here + + + +// Register Connection +documents.listen(connection); +connection.listen(); \ No newline at end of file diff --git a/vscode-cashscript/tsconfig.json b/vscode-cashscript/tsconfig.json new file mode 100644 index 0000000..d488665 --- /dev/null +++ b/vscode-cashscript/tsconfig.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "module": "commonjs", + "target": "es6", + "outDir": "out", + "lib": [ + "es2017" + ], + "sourceMap": true, + "rootDir": ".", + }, + "include": [ + "src/**/*" + ], + "exclude": [ + "node_modules", + ".vscode-test" + ] +} \ No newline at end of file From 491fcb9b628fd6f2e40ef2493c0f53484a3ab810 Mon Sep 17 00:00:00 2001 From: Nathaniel Cherian Date: Tue, 8 Jun 2021 09:55:53 -0700 Subject: [PATCH 07/14] completion provider --- client/testFixture/P2PKH.cash | 3 +- vscode-cashscript/package-lock.json | 5 - vscode-cashscript/package.json | 3 +- .../src/CashscriptCompletionProvider.ts | 289 ++++++++++++++++++ .../src/CashscriptSignatureCompleter.ts | 23 ++ vscode-cashscript/src/extension.ts | 5 +- vscode-cashscript/tsconfig.json | 2 +- 7 files changed, 320 insertions(+), 10 deletions(-) create mode 100644 vscode-cashscript/src/CashscriptCompletionProvider.ts create mode 100644 vscode-cashscript/src/CashscriptSignatureCompleter.ts diff --git a/client/testFixture/P2PKH.cash b/client/testFixture/P2PKH.cash index de740a9..5685a9d 100644 --- a/client/testFixture/P2PKH.cash +++ b/client/testFixture/P2PKH.cash @@ -5,7 +5,8 @@ contract P2PKH(bytes20 pkh) { require(hash160(pk) == pkh); require(checkSig(s, pk)); require(checkSig(s, pk)); - require(checkMultiSig()); + require(checkDataSig()); + int m = new OutputNullData(bytes[] chunks); } diff --git a/vscode-cashscript/package-lock.json b/vscode-cashscript/package-lock.json index 13b1425..706e65a 100644 --- a/vscode-cashscript/package-lock.json +++ b/vscode-cashscript/package-lock.json @@ -9,11 +9,6 @@ "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" }, - "@types/vscode": { - "version": "1.56.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.56.0.tgz", - "integrity": "sha512-Q5VmQxOx+L1Y6lIJiGcJzwcyV3pQo/eiW8P+7sNLhFI16tJCwtua2DLjHRcpjbCLNVYpQM73kzfFo1Z0HyP9eQ==" - }, "agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", diff --git a/vscode-cashscript/package.json b/vscode-cashscript/package.json index be67a85..61ff733 100644 --- a/vscode-cashscript/package.json +++ b/vscode-cashscript/package.json @@ -4,7 +4,7 @@ "description": "Language extension for cashscript", "version": "0.0.1", "engines": { - "vscode": "^1.46.0" + "vscode": "^1.50.1" }, "categories": [ "Programming Languages" @@ -48,7 +48,6 @@ ] }, "dependencies": { - "@types/vscode": "^1.56.0", "vscode": "^1.1.37", "vscode-languageclient": "^7.0.0", "vscode-languageserver": "^7.0.0", diff --git a/vscode-cashscript/src/CashscriptCompletionProvider.ts b/vscode-cashscript/src/CashscriptCompletionProvider.ts new file mode 100644 index 0000000..5443445 --- /dev/null +++ b/vscode-cashscript/src/CashscriptCompletionProvider.ts @@ -0,0 +1,289 @@ +import * as vscode from 'vscode'; +import { Range, CompletionItem, CompletionItemKind } from 'vscode'; + +export default class CashscriptCompletionProvider implements vscode.CompletionItemProvider{ + + text="" + offset=0 + currentIndex = 0; + doc:vscode.TextDocument; + pos:vscode.Position; + + provideCompletionItems(document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken, context: vscode.CompletionContext): vscode.ProviderResult> { + // throw new Error('Method not implemented.'); + this.doc = document; + this.pos = position; + this.text = document.getText() || ""; + this.offset = document.offsetAt(position) || 0; + this.currentIndex = 0; + + const completions: CompletionItem[] = this.getAllCompletions(); + return completions; + } + + getAllCompletions(): CompletionItem[]{ + console.log("completion TRIGG") + let completions:CompletionItem[] = []; + + //completions = completions.concat(this.getDotCompletions()); + //if(completions.length > 0) return completions; + if(this.isDot()){ + return this.getDotCompletions(); + } + + completions = completions.concat(this.getVarCompletions()); + completions = completions.concat(this.getConditionalCompletions()); + completions = completions.concat(this.getControlCompletions()); + completions = completions.concat(this.getGlobalFunctionCompletions()); + completions = completions.concat(this.getOutputCompletions()); + completions = completions.concat(this.getTypesCompletions()); + completions = completions.concat(this.getGlobalConstantsCompletions()); + + return completions; + } + + protected getCharRange(begin:number, end:number){ + return this.text.substring(begin, end); + } + + protected isDot():boolean{ + const offset:number = this.doc?.offsetAt(this.pos) || 0; + const t = this.getCharRange(offset-1, offset); + if(t === '.') return true; + return false; + } + + + DOT_COMPLETIONS:{[key:string]:CompletionItem[]} = { + tx:[ + { + label:"time", + kind:CompletionItemKind.Field, + }, + { + label:"age", + kind:CompletionItemKind.Field + }, + { + label:"version", + kind:CompletionItemKind.Field + }, + { + label:"hashPrevouts", + kind:CompletionItemKind.Field + }, + { + label:"hashSequence", + kind:CompletionItemKind.Field + }, + { + label:"outpoint", + kind:CompletionItemKind.Field + }, + { + label:"bytecode", + kind:CompletionItemKind.Field + }, + { + label:"value", + kind:CompletionItemKind.Field + }, + { + label:"sequence", + kind:CompletionItemKind.Field + }, + { + label:"hashOutputs", + kind:CompletionItemKind.Field + }, + { + label:"locktime", + kind:CompletionItemKind.Field + }, + { + label:"hashtype", + kind:CompletionItemKind.Field + }, + ] + } + + protected getDotCompletions():CompletionItem[]{ + + const re = /(\w+).$/ // EX: "tx." + const range:Range = new Range(new vscode.Position(this.pos.line, 0), this.pos) + // { + // start:{character:0, line:this.pos.line}, + // end:this.pos + // } + const text = this.doc.getText(range); + var arr, keyword; + if((arr=text?.match(re))){ + keyword = arr[1]; + console.log("keyword: ", keyword); + + return this.DOT_COMPLETIONS[keyword]; + } + + return [] + } + + protected getVarCompletions():CompletionItem[]{ + + const re = /(int|bool|string|pubkey|sig|datasig|bytes)\s+(\w+)/g; + const completions:CompletionItem[] = []; + for(const m of this.text.matchAll(re)){ + completions.push({ + label:m[2], + kind:CompletionItemKind.Variable + }); + } + + return completions; + } + + protected getConditionalCompletions():CompletionItem[]{ + const completions:CompletionItem[] = []; + if(!this.text.includes("contract")){ + completions.push({ + label:"contract", + detail:"Instantiate a new Contract", + insertText:"contract ${1:ContractName}($2) {\n\n}", + // insertTextFormat:2 + }); + } + + return completions; + } + + protected getControlCompletions():CompletionItem[]{ + const words = ["pragma", "cashscript", "if", "else", "require"] + const completions = []; + for (let i = 0; i < words.length; i++) { + this.currentIndex += 1; + completions.push( + new CompletionItem(words[i]) + ); + } + return completions; + } + + protected getGlobalFunctionCompletions():CompletionItem[]{ + const words = ["abs","min","max","within", + "ripemd160", "sha1", "sha256", "hash160","hash256", + "checkSig", "checkMultiSig", "checkDataSig"] + + const comps: CompletionItem[] = [ + { + label:"abs", + detail: 'int abs(int a): Returns the absolute value of argument a.', + insertText: 'abs', + // insertTextFormat: 2, + }, + { + label:"min", + detail:"int min(int a, int b): Returns the minimum value of arguments `a` and `b`.", + insertText:"min", + // insertTextFormat:2 + }, + { + label:"max", + detail:"int max(int a, int b): Returns the maximum value of arguments `a` and `b`.", + insertText:"max", + // insertTextFormat:2 + }, + { + label:"within", + detail:"bool within(int x, int lower, int upper): Returns `true` if and only if `x >= lower && x < upper`.", + insertText:"within", + // insertTextFormat:2 + }, + { + label:"ripemd160", + detail:"bytes20 ripemd160(any x): Returns the SHA-1 hash of argument `x`.", + insertText:"ripemd160", + // insertTextFormat:2 + }, + { + label:"sha256", + detail:"bytes32 sha256(any x): Returns the SHA-256 hash of argument `x`.", + insertText:"sha256", + // insertTextFormat:2 + }, + { + label:"hash160", + detail:"bytes20 hash160(any x): Returns the RIPEMD-160 hash of the SHA-256 hash of argument `x`.", + insertText:"hash160", + // insertTextFormat:2 + }, + { + label:"hash256", + detail:"bytes32 hash256(any x): bytes32 hash256(any x)", + insertText:"hash256", + // insertTextFormat:2 + }, + { + label:"checkMultiSig", + detail:"bool checkMultiSig(sig[] sigs, pubkey[] pks): Performs a multi-signature check using a list of transaction signatures and public keys.", + insertText:"checkMultiSig", + // insertTextFormat:2 + }, + { + label:"checkDataSig", + detail:"bool checkDataSig(datasig s, bytes msg, pubkey pk): Checks that sig `s` is a valid signature for message `msg` and matches with public key `pk`.", + insertText:"checkDataSig", + // insertTextFormat:2 + } + ] + + return comps; + } + + protected getOutputCompletions():CompletionItem[]{ + const words = ["OutputP2PKH", "OutputP2PSH", "OutputNullData"] + const completions = []; + for (let i = 0; i < words.length; i++) { + this.currentIndex += 1; + completions.push( + { + label: words[i], + kind: CompletionItemKind.Keyword, + data: i+1 + } + ); + } + return completions; + } + + protected getTypesCompletions():CompletionItem[]{ + const words = ["int", "bool", "string", "bytes", "pubkey", "sig", "datasig", "true", "false", "date"] + const completions = []; + for (let i = 0; i < words.length; i++) { + this.currentIndex += 1; + completions.push( + { + label: words[i], + kind: CompletionItemKind.Keyword, + data: i+1 + } + ); + } + return completions; + } + + protected getGlobalConstantsCompletions():CompletionItem[]{ + const words = ["sats", "satoshis", "finney", "bit", "bitcoin", "seconds", "minutes", "hours", "days", "weeks"]; + const completions = []; + for (let i = 0; i < words.length; i++) { + this.currentIndex += 1; + completions.push( + { + label: words[i], + kind: CompletionItemKind.Keyword, + data: i+1 + } + ); + } + return completions; + } + +} \ No newline at end of file diff --git a/vscode-cashscript/src/CashscriptSignatureCompleter.ts b/vscode-cashscript/src/CashscriptSignatureCompleter.ts new file mode 100644 index 0000000..ff1eba5 --- /dev/null +++ b/vscode-cashscript/src/CashscriptSignatureCompleter.ts @@ -0,0 +1,23 @@ +import * as vscode from 'vscode'; +import { LANGUAGE, TYPECASTS } from './LanguageDesc'; + +class CashscriptSignatureCompleter implements vscode.SignatureHelpProvider{ + + re = /([a-zA-Z0-9]+)\(/g; // regex to get selected word + constructor(private channel:vscode.OutputChannel=null){} + + provideSignatureHelp(document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken, context: vscode.SignatureHelpContext): vscode.ProviderResult { + + let range = document.getWordRangeAtPosition(position, this.re); + let word = document.getText(range).slice(0, -1); // removes the '(' + + //this.channel.appendLine("signature " + word); + const sh = new vscode.SignatureHelp(); + const data = LANGUAGE[word] || TYPECASTS[word]; + sh.signatures = [new vscode.SignatureInformation(data.codeDesc, new vscode.MarkdownString().appendCodeblock(data.code))]; + return sh; + } + +} + +export default CashscriptSignatureCompleter; \ No newline at end of file diff --git a/vscode-cashscript/src/extension.ts b/vscode-cashscript/src/extension.ts index f2106b1..476483d 100644 --- a/vscode-cashscript/src/extension.ts +++ b/vscode-cashscript/src/extension.ts @@ -3,6 +3,8 @@ import * as vscode from 'vscode'; import { ExtensionContext, workspace } from 'vscode'; import { LanguageClient, LanguageClientOptions, ServerOptions, TransportKind } from 'vscode-languageclient/node'; import CashscriptHoverProvider from './CashscriptHoverProvider'; +import CashscriptSignatureCompleter from './CashscriptSignatureCompleter'; +import CashscriptCompletionProvider from './CashscriptCompletionProvider'; let client: LanguageClient; @@ -47,7 +49,8 @@ export function activate(context: ExtensionContext){ // Subscribe to events here vscode.languages.registerHoverProvider('cashscript', new CashscriptHoverProvider()) - + vscode.languages.registerSignatureHelpProvider('cashscript', new CashscriptSignatureCompleter(), '('); + vscode.languages.registerCompletionItemProvider('cashscript', new CashscriptCompletionProvider(), '.') client.start(); } diff --git a/vscode-cashscript/tsconfig.json b/vscode-cashscript/tsconfig.json index d488665..fc419cb 100644 --- a/vscode-cashscript/tsconfig.json +++ b/vscode-cashscript/tsconfig.json @@ -4,7 +4,7 @@ "target": "es6", "outDir": "out", "lib": [ - "es2017" + "es2020" ], "sourceMap": true, "rootDir": ".", From dbc22080d39596f1d8045a05f204a0a88cfa29e3 Mon Sep 17 00:00:00 2001 From: Nathaniel Cherian Date: Tue, 8 Jun 2021 13:25:07 -0700 Subject: [PATCH 08/14] linter --- client/testFixture/P2PKH.cash | 3 +- vscode-cashscript/package-lock.json | 5 + vscode-cashscript/package.json | 1 + .../src/CashscriptLinter/CashscriptLinter.ts | 30 + .../src/CashscriptLinter/ErrorListeners.ts | 45 + .../CashscriptLinter/grammar/CashScript.g4 | 198 ++ .../grammar/CashScript.interp | 150 + .../grammar/CashScript.tokens | 101 + .../grammar/CashScriptLexer.interp | 191 ++ .../grammar/CashScriptLexer.tokens | 101 + .../grammar/CashScriptLexer.ts | 463 +++ .../grammar/CashScriptListener.ts | 443 +++ .../grammar/CashScriptParser.ts | 2922 +++++++++++++++++ .../grammar/CashScriptVisitor.ts | 299 ++ vscode-cashscript/src/extension.ts | 2 +- vscode-cashscript/src/server.ts | 50 +- 16 files changed, 5001 insertions(+), 3 deletions(-) create mode 100644 vscode-cashscript/src/CashscriptLinter/CashscriptLinter.ts create mode 100644 vscode-cashscript/src/CashscriptLinter/ErrorListeners.ts create mode 100644 vscode-cashscript/src/CashscriptLinter/grammar/CashScript.g4 create mode 100644 vscode-cashscript/src/CashscriptLinter/grammar/CashScript.interp create mode 100644 vscode-cashscript/src/CashscriptLinter/grammar/CashScript.tokens create mode 100644 vscode-cashscript/src/CashscriptLinter/grammar/CashScriptLexer.interp create mode 100644 vscode-cashscript/src/CashscriptLinter/grammar/CashScriptLexer.tokens create mode 100644 vscode-cashscript/src/CashscriptLinter/grammar/CashScriptLexer.ts create mode 100644 vscode-cashscript/src/CashscriptLinter/grammar/CashScriptListener.ts create mode 100644 vscode-cashscript/src/CashscriptLinter/grammar/CashScriptParser.ts create mode 100644 vscode-cashscript/src/CashscriptLinter/grammar/CashScriptVisitor.ts diff --git a/client/testFixture/P2PKH.cash b/client/testFixture/P2PKH.cash index 5685a9d..fb63277 100644 --- a/client/testFixture/P2PKH.cash +++ b/client/testFixture/P2PKH.cash @@ -5,8 +5,9 @@ contract P2PKH(bytes20 pkh) { require(hash160(pk) == pkh); require(checkSig(s, pk)); require(checkSig(s, pk)); + int d = 2; require(checkDataSig()); - int m = new OutputNullData(bytes[] chunks); + require(checkDataSig(s, pk)); } diff --git a/vscode-cashscript/package-lock.json b/vscode-cashscript/package-lock.json index 706e65a..005fcf7 100644 --- a/vscode-cashscript/package-lock.json +++ b/vscode-cashscript/package-lock.json @@ -17,6 +17,11 @@ "debug": "4" } }, + "antlr4ts": { + "version": "0.5.0-alpha.4", + "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", + "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==" + }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", diff --git a/vscode-cashscript/package.json b/vscode-cashscript/package.json index 61ff733..59dcde0 100644 --- a/vscode-cashscript/package.json +++ b/vscode-cashscript/package.json @@ -48,6 +48,7 @@ ] }, "dependencies": { + "antlr4ts": "^0.5.0-alpha.4", "vscode": "^1.1.37", "vscode-languageclient": "^7.0.0", "vscode-languageserver": "^7.0.0", diff --git a/vscode-cashscript/src/CashscriptLinter/CashscriptLinter.ts b/vscode-cashscript/src/CashscriptLinter/CashscriptLinter.ts new file mode 100644 index 0000000..4ddf750 --- /dev/null +++ b/vscode-cashscript/src/CashscriptLinter/CashscriptLinter.ts @@ -0,0 +1,30 @@ +import { ANTLRInputStream, CommonTokenStream } from 'antlr4ts'; +import { Diagnostic } from 'vscode-languageserver'; +import { SafeErrorListener, SafeErrorStrategy } from './ErrorListeners'; +import { CashScriptLexer } from './grammar/CashScriptLexer'; +import { CashScriptParser } from './grammar/CashScriptParser'; + +export default class CashscriptLinter { + + static getDiagnostics(code:string):Diagnostic[]{ + + const errListener = new SafeErrorListener(); + + const inputStream = new ANTLRInputStream(code); + const lexer = new CashScriptLexer(inputStream); + lexer.removeErrorListeners(); + lexer.addErrorListener(errListener); + + const tokenStream = new CommonTokenStream(lexer); + const parser = new CashScriptParser(tokenStream); + parser.errorHandler = new SafeErrorStrategy(); + parser.removeErrorListeners(); + parser.addErrorListener(errListener); + const parseTree = parser.sourceFile(); + + return errListener.getErrs() + } + +} + + diff --git a/vscode-cashscript/src/CashscriptLinter/ErrorListeners.ts b/vscode-cashscript/src/CashscriptLinter/ErrorListeners.ts new file mode 100644 index 0000000..de2fc14 --- /dev/null +++ b/vscode-cashscript/src/CashscriptLinter/ErrorListeners.ts @@ -0,0 +1,45 @@ +import { ANTLRErrorListener, DefaultErrorStrategy, Parser, RecognitionException, Recognizer } from 'antlr4ts'; +import { Diagnostic, DiagnosticSeverity, Range } from 'vscode-languageserver'; + +export class SafeErrorListener implements ANTLRErrorListener { + static readonly INSTANCE = new SafeErrorListener(); + + errs:Diagnostic[] = [] + + getErrs():Diagnostic[]{ + return this.errs; + } + + syntaxError( + recognizer: Recognizer, + offendingSymbol: T, + line: number, + charPositionInLine: number, + message: string, + e?: RecognitionException, + ): void { + const capitalisedMessage = message.charAt(0).toUpperCase() + message.slice(1); + + //console.log(capitalisedMessage); + const range:Range = { + start:{ + line:line-1, + character:charPositionInLine + }, + end:{ + line:line-1, + character:charPositionInLine + } + } + + const diag = Diagnostic.create(range, capitalisedMessage, DiagnosticSeverity.Error) + this.errs.push(diag); + } + + } + +export class SafeErrorStrategy extends DefaultErrorStrategy{ + sync(recognizer: Parser): void { + return + } +} \ No newline at end of file diff --git a/vscode-cashscript/src/CashscriptLinter/grammar/CashScript.g4 b/vscode-cashscript/src/CashscriptLinter/grammar/CashScript.g4 new file mode 100644 index 0000000..7802cbf --- /dev/null +++ b/vscode-cashscript/src/CashscriptLinter/grammar/CashScript.g4 @@ -0,0 +1,198 @@ +grammar CashScript; + +sourceFile + : pragmaDirective* contractDefinition EOF + ; + +pragmaDirective + : 'pragma' pragmaName pragmaValue ';' + ; + +pragmaName + : 'cashscript' + ; + +pragmaValue + : versionConstraint versionConstraint? + ; + +versionConstraint + : versionOperator? VersionLiteral + ; + +versionOperator + : '^' | '~' | '>=' | '>' | '<' | '<=' | '=' + ; + +contractDefinition + : 'contract' Identifier parameterList '{' functionDefinition* '}' + ; + +functionDefinition + : 'function' Identifier parameterList '{' statement* '}' + ; + +parameterList + : '(' (parameter (',' parameter)* ','?)? ')' + ; + +parameter + : typeName Identifier + ; + +block + : '{' statement* '}' + | statement + ; + +statement + : variableDefinition + | assignStatement + | timeOpStatement + | requireStatement + | ifStatement + ; + +variableDefinition + : typeName Identifier '=' expression ';' + ; + +assignStatement + : Identifier '=' expression ';' + ; + +timeOpStatement + : 'require' '(' TxVar '>=' expression ')' ';' + ; + +requireStatement + : 'require' '(' expression ')' ';' + ; + +ifStatement + : 'if' '(' expression ')' ifBlock=block ('else' elseBlock=block)? + ; + +functionCall + : Identifier expressionList // Only built-in functions are accepted + ; + +expressionList + : '(' (expression (',' expression)* ','?)? ')' + ; + +expression + : '(' expression ')' # Parenthesised + | typeName '(' castable=expression (',' size=expression)? ','? ')' # Cast + | functionCall # FunctionCallExpression + | 'new' Identifier expressionList #Instantiation + | expression '[' index=NumberLiteral ']' # TupleIndexOp + | expression op=('.reverse()' | '.length') # UnaryOp + | op=('!' | '-') expression # UnaryOp + // | expression '**' expression --- OP_POW does not exist in BCH Script + // | expression ('*' | '/' | '%') expression --- OP_MUL is disabled in BCH Script + | left=expression op='.split' '(' right=expression ')' # BinaryOp + | left=expression op=('/' | '%') right=expression # BinaryOp + | left=expression op=('+' | '-') right=expression # BinaryOp + // | expression ('>>' | '<<') expression --- OP_LSHIFT & RSHIFT are disabled in BCH Script + | left=expression op=('<' | '<=' | '>' | '>=') right=expression # BinaryOp + | left=expression op=('==' | '!=') right=expression # BinaryOp + | left=expression op='&' right=expression # BinaryOp + | left=expression op='^' right=expression # BinaryOp + | left=expression op='|' right=expression # BinaryOp + | left=expression op='&&' right=expression # BinaryOp + | left=expression op='||' right=expression # BinaryOp + | '[' (expression (',' expression)* ','?)? ']' # Array + | PreimageField # PreimageField + | Identifier # Identifier + | literal # LiteralExpression + ; + +literal + : BooleanLiteral + | numberLiteral + | StringLiteral + | DateLiteral + | HexLiteral + ; + +numberLiteral + : NumberLiteral NumberUnit? + ; + +typeName + : 'int' | 'bool' | 'string' | 'pubkey' | 'sig' | 'datasig' | Bytes + ; + +VersionLiteral + : [0-9]+ '.' [0-9]+ '.' [0-9]+ + ; + +BooleanLiteral + : 'true' | 'false' + ; + +NumberUnit + : 'satoshis' | 'sats' | 'finney' | 'bits' | 'bitcoin' + | 'seconds' | 'minutes' | 'hours' | 'days' | 'weeks' + ; + +NumberLiteral + : [-]?[0-9]+ ([eE] [0-9]+)? + ; + +Bytes + : 'bytes' Bound? + ; + +Bound + : [1-9] [0-9]* + ; + +StringLiteral + : '"' ('\\"' | ~["\r\n])*? '"' + | '\'' ('\\\'' | ~['\r\n])*? '\'' + ; + +DateLiteral + : 'date(' StringLiteral ')' + ; + +HexLiteral + : '0' [xX] [0-9A-Fa-f]* + ; + +TxVar + : 'tx.age' + | 'tx.time' + ; + +PreimageField + : 'tx.version' + | 'tx.hashPrevouts' + | 'tx.hashSequence' + | 'tx.outpoint' + | 'tx.bytecode' + | 'tx.value' + | 'tx.sequence' + | 'tx.hashOutputs' + | 'tx.locktime' + | 'tx.hashtype' + | 'tx.preimage' + ; + +Identifier + : [a-zA-Z] [a-zA-Z0-9_]* + ; + +WHITESPACE + : [ \t\r\n\u000C]+ -> skip + ; + +COMMENT + : '/*' .*? '*/' -> channel(HIDDEN) + ; + +LINE_COMMENT + : '//' ~[\r\n]* -> channel(HIDDEN) + ; diff --git a/vscode-cashscript/src/CashscriptLinter/grammar/CashScript.interp b/vscode-cashscript/src/CashscriptLinter/grammar/CashScript.interp new file mode 100644 index 0000000..e1a1717 --- /dev/null +++ b/vscode-cashscript/src/CashscriptLinter/grammar/CashScript.interp @@ -0,0 +1,150 @@ +token literal names: +null +'pragma' +';' +'cashscript' +'^' +'~' +'>=' +'>' +'<' +'<=' +'=' +'contract' +'{' +'}' +'function' +'(' +',' +')' +'require' +'if' +'else' +'new' +'[' +']' +'.reverse()' +'.length' +'!' +'-' +'.split' +'/' +'%' +'+' +'==' +'!=' +'&' +'|' +'&&' +'||' +'int' +'bool' +'string' +'pubkey' +'sig' +'datasig' +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null + +token symbolic names: +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +VersionLiteral +BooleanLiteral +NumberUnit +NumberLiteral +Bytes +Bound +StringLiteral +DateLiteral +HexLiteral +TxVar +PreimageField +Identifier +WHITESPACE +COMMENT +LINE_COMMENT + +rule names: +sourceFile +pragmaDirective +pragmaName +pragmaValue +versionConstraint +versionOperator +contractDefinition +functionDefinition +parameterList +parameter +block +statement +variableDefinition +assignStatement +timeOpStatement +requireStatement +ifStatement +functionCall +expressionList +expression +literal +numberLiteral +typeName + + +atn: +[3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 3, 60, 290, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 3, 2, 7, 2, 50, 10, 2, 12, 2, 14, 2, 53, 11, 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 5, 3, 5, 5, 5, 67, 10, 5, 3, 6, 5, 6, 70, 10, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 7, 8, 81, 10, 8, 12, 8, 14, 8, 84, 11, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 93, 10, 9, 12, 9, 14, 9, 96, 11, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 7, 10, 104, 10, 10, 12, 10, 14, 10, 107, 11, 10, 3, 10, 5, 10, 110, 10, 10, 5, 10, 112, 10, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 7, 12, 121, 10, 12, 12, 12, 14, 12, 124, 11, 12, 3, 12, 3, 12, 5, 12, 128, 10, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 5, 13, 135, 10, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 5, 18, 169, 10, 18, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 7, 20, 178, 10, 20, 12, 20, 14, 20, 181, 11, 20, 3, 20, 5, 20, 184, 10, 20, 5, 20, 186, 10, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 5, 21, 200, 10, 21, 3, 21, 5, 21, 203, 10, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 7, 21, 217, 10, 21, 12, 21, 14, 21, 220, 11, 21, 3, 21, 5, 21, 223, 10, 21, 5, 21, 225, 10, 21, 3, 21, 3, 21, 3, 21, 3, 21, 5, 21, 231, 10, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 7, 21, 272, 10, 21, 12, 21, 14, 21, 275, 11, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 5, 22, 282, 10, 22, 3, 23, 3, 23, 5, 23, 286, 10, 23, 3, 24, 3, 24, 3, 24, 2, 2, 3, 40, 25, 2, 2, 4, 2, 6, 2, 8, 2, 10, 2, 12, 2, 14, 2, 16, 2, 18, 2, 20, 2, 22, 2, 24, 2, 26, 2, 28, 2, 30, 2, 32, 2, 34, 2, 36, 2, 38, 2, 40, 2, 42, 2, 44, 2, 46, 2, 2, 10, 3, 2, 6, 12, 3, 2, 28, 29, 3, 2, 31, 32, 4, 2, 29, 29, 33, 33, 3, 2, 8, 11, 3, 2, 34, 35, 3, 2, 26, 27, 4, 2, 40, 45, 50, 50, 2, 314, 2, 51, 3, 2, 2, 2, 4, 57, 3, 2, 2, 2, 6, 62, 3, 2, 2, 2, 8, 64, 3, 2, 2, 2, 10, 69, 3, 2, 2, 2, 12, 73, 3, 2, 2, 2, 14, 75, 3, 2, 2, 2, 16, 87, 3, 2, 2, 2, 18, 99, 3, 2, 2, 2, 20, 115, 3, 2, 2, 2, 22, 127, 3, 2, 2, 2, 24, 134, 3, 2, 2, 2, 26, 136, 3, 2, 2, 2, 28, 142, 3, 2, 2, 2, 30, 147, 3, 2, 2, 2, 32, 155, 3, 2, 2, 2, 34, 161, 3, 2, 2, 2, 36, 170, 3, 2, 2, 2, 38, 173, 3, 2, 2, 2, 40, 230, 3, 2, 2, 2, 42, 281, 3, 2, 2, 2, 44, 283, 3, 2, 2, 2, 46, 287, 3, 2, 2, 2, 48, 50, 5, 4, 3, 2, 49, 48, 3, 2, 2, 2, 50, 53, 3, 2, 2, 2, 51, 49, 3, 2, 2, 2, 51, 52, 3, 2, 2, 2, 52, 54, 3, 2, 2, 2, 53, 51, 3, 2, 2, 2, 54, 55, 5, 14, 8, 2, 55, 56, 7, 2, 2, 3, 56, 3, 3, 2, 2, 2, 57, 58, 7, 3, 2, 2, 58, 59, 5, 6, 4, 2, 59, 60, 5, 8, 5, 2, 60, 61, 7, 4, 2, 2, 61, 5, 3, 2, 2, 2, 62, 63, 7, 5, 2, 2, 63, 7, 3, 2, 2, 2, 64, 66, 5, 10, 6, 2, 65, 67, 5, 10, 6, 2, 66, 65, 3, 2, 2, 2, 66, 67, 3, 2, 2, 2, 67, 9, 3, 2, 2, 2, 68, 70, 5, 12, 7, 2, 69, 68, 3, 2, 2, 2, 69, 70, 3, 2, 2, 2, 70, 71, 3, 2, 2, 2, 71, 72, 7, 46, 2, 2, 72, 11, 3, 2, 2, 2, 73, 74, 9, 2, 2, 2, 74, 13, 3, 2, 2, 2, 75, 76, 7, 13, 2, 2, 76, 77, 7, 57, 2, 2, 77, 78, 5, 18, 10, 2, 78, 82, 7, 14, 2, 2, 79, 81, 5, 16, 9, 2, 80, 79, 3, 2, 2, 2, 81, 84, 3, 2, 2, 2, 82, 80, 3, 2, 2, 2, 82, 83, 3, 2, 2, 2, 83, 85, 3, 2, 2, 2, 84, 82, 3, 2, 2, 2, 85, 86, 7, 15, 2, 2, 86, 15, 3, 2, 2, 2, 87, 88, 7, 16, 2, 2, 88, 89, 7, 57, 2, 2, 89, 90, 5, 18, 10, 2, 90, 94, 7, 14, 2, 2, 91, 93, 5, 24, 13, 2, 92, 91, 3, 2, 2, 2, 93, 96, 3, 2, 2, 2, 94, 92, 3, 2, 2, 2, 94, 95, 3, 2, 2, 2, 95, 97, 3, 2, 2, 2, 96, 94, 3, 2, 2, 2, 97, 98, 7, 15, 2, 2, 98, 17, 3, 2, 2, 2, 99, 111, 7, 17, 2, 2, 100, 105, 5, 20, 11, 2, 101, 102, 7, 18, 2, 2, 102, 104, 5, 20, 11, 2, 103, 101, 3, 2, 2, 2, 104, 107, 3, 2, 2, 2, 105, 103, 3, 2, 2, 2, 105, 106, 3, 2, 2, 2, 106, 109, 3, 2, 2, 2, 107, 105, 3, 2, 2, 2, 108, 110, 7, 18, 2, 2, 109, 108, 3, 2, 2, 2, 109, 110, 3, 2, 2, 2, 110, 112, 3, 2, 2, 2, 111, 100, 3, 2, 2, 2, 111, 112, 3, 2, 2, 2, 112, 113, 3, 2, 2, 2, 113, 114, 7, 19, 2, 2, 114, 19, 3, 2, 2, 2, 115, 116, 5, 46, 24, 2, 116, 117, 7, 57, 2, 2, 117, 21, 3, 2, 2, 2, 118, 122, 7, 14, 2, 2, 119, 121, 5, 24, 13, 2, 120, 119, 3, 2, 2, 2, 121, 124, 3, 2, 2, 2, 122, 120, 3, 2, 2, 2, 122, 123, 3, 2, 2, 2, 123, 125, 3, 2, 2, 2, 124, 122, 3, 2, 2, 2, 125, 128, 7, 15, 2, 2, 126, 128, 5, 24, 13, 2, 127, 118, 3, 2, 2, 2, 127, 126, 3, 2, 2, 2, 128, 23, 3, 2, 2, 2, 129, 135, 5, 26, 14, 2, 130, 135, 5, 28, 15, 2, 131, 135, 5, 30, 16, 2, 132, 135, 5, 32, 17, 2, 133, 135, 5, 34, 18, 2, 134, 129, 3, 2, 2, 2, 134, 130, 3, 2, 2, 2, 134, 131, 3, 2, 2, 2, 134, 132, 3, 2, 2, 2, 134, 133, 3, 2, 2, 2, 135, 25, 3, 2, 2, 2, 136, 137, 5, 46, 24, 2, 137, 138, 7, 57, 2, 2, 138, 139, 7, 12, 2, 2, 139, 140, 5, 40, 21, 2, 140, 141, 7, 4, 2, 2, 141, 27, 3, 2, 2, 2, 142, 143, 7, 57, 2, 2, 143, 144, 7, 12, 2, 2, 144, 145, 5, 40, 21, 2, 145, 146, 7, 4, 2, 2, 146, 29, 3, 2, 2, 2, 147, 148, 7, 20, 2, 2, 148, 149, 7, 17, 2, 2, 149, 150, 7, 55, 2, 2, 150, 151, 7, 8, 2, 2, 151, 152, 5, 40, 21, 2, 152, 153, 7, 19, 2, 2, 153, 154, 7, 4, 2, 2, 154, 31, 3, 2, 2, 2, 155, 156, 7, 20, 2, 2, 156, 157, 7, 17, 2, 2, 157, 158, 5, 40, 21, 2, 158, 159, 7, 19, 2, 2, 159, 160, 7, 4, 2, 2, 160, 33, 3, 2, 2, 2, 161, 162, 7, 21, 2, 2, 162, 163, 7, 17, 2, 2, 163, 164, 5, 40, 21, 2, 164, 165, 7, 19, 2, 2, 165, 168, 5, 22, 12, 2, 166, 167, 7, 22, 2, 2, 167, 169, 5, 22, 12, 2, 168, 166, 3, 2, 2, 2, 168, 169, 3, 2, 2, 2, 169, 35, 3, 2, 2, 2, 170, 171, 7, 57, 2, 2, 171, 172, 5, 38, 20, 2, 172, 37, 3, 2, 2, 2, 173, 185, 7, 17, 2, 2, 174, 179, 5, 40, 21, 2, 175, 176, 7, 18, 2, 2, 176, 178, 5, 40, 21, 2, 177, 175, 3, 2, 2, 2, 178, 181, 3, 2, 2, 2, 179, 177, 3, 2, 2, 2, 179, 180, 3, 2, 2, 2, 180, 183, 3, 2, 2, 2, 181, 179, 3, 2, 2, 2, 182, 184, 7, 18, 2, 2, 183, 182, 3, 2, 2, 2, 183, 184, 3, 2, 2, 2, 184, 186, 3, 2, 2, 2, 185, 174, 3, 2, 2, 2, 185, 186, 3, 2, 2, 2, 186, 187, 3, 2, 2, 2, 187, 188, 7, 19, 2, 2, 188, 39, 3, 2, 2, 2, 189, 190, 8, 21, 1, 2, 190, 191, 7, 17, 2, 2, 191, 192, 5, 40, 21, 2, 192, 193, 7, 19, 2, 2, 193, 231, 3, 2, 2, 2, 194, 195, 5, 46, 24, 2, 195, 196, 7, 17, 2, 2, 196, 199, 5, 40, 21, 2, 197, 198, 7, 18, 2, 2, 198, 200, 5, 40, 21, 2, 199, 197, 3, 2, 2, 2, 199, 200, 3, 2, 2, 2, 200, 202, 3, 2, 2, 2, 201, 203, 7, 18, 2, 2, 202, 201, 3, 2, 2, 2, 202, 203, 3, 2, 2, 2, 203, 204, 3, 2, 2, 2, 204, 205, 7, 19, 2, 2, 205, 231, 3, 2, 2, 2, 206, 231, 5, 36, 19, 2, 207, 208, 7, 23, 2, 2, 208, 209, 7, 57, 2, 2, 209, 231, 5, 38, 20, 2, 210, 211, 9, 3, 2, 2, 211, 231, 5, 40, 21, 17, 212, 224, 7, 24, 2, 2, 213, 218, 5, 40, 21, 2, 214, 215, 7, 18, 2, 2, 215, 217, 5, 40, 21, 2, 216, 214, 3, 2, 2, 2, 217, 220, 3, 2, 2, 2, 218, 216, 3, 2, 2, 2, 218, 219, 3, 2, 2, 2, 219, 222, 3, 2, 2, 2, 220, 218, 3, 2, 2, 2, 221, 223, 7, 18, 2, 2, 222, 221, 3, 2, 2, 2, 222, 223, 3, 2, 2, 2, 223, 225, 3, 2, 2, 2, 224, 213, 3, 2, 2, 2, 224, 225, 3, 2, 2, 2, 225, 226, 3, 2, 2, 2, 226, 231, 7, 25, 2, 2, 227, 231, 7, 56, 2, 2, 228, 231, 7, 57, 2, 2, 229, 231, 5, 42, 22, 2, 230, 189, 3, 2, 2, 2, 230, 194, 3, 2, 2, 2, 230, 206, 3, 2, 2, 2, 230, 207, 3, 2, 2, 2, 230, 210, 3, 2, 2, 2, 230, 212, 3, 2, 2, 2, 230, 227, 3, 2, 2, 2, 230, 228, 3, 2, 2, 2, 230, 229, 3, 2, 2, 2, 231, 273, 3, 2, 2, 2, 232, 233, 12, 15, 2, 2, 233, 234, 9, 4, 2, 2, 234, 272, 5, 40, 21, 16, 235, 236, 12, 14, 2, 2, 236, 237, 9, 5, 2, 2, 237, 272, 5, 40, 21, 15, 238, 239, 12, 13, 2, 2, 239, 240, 9, 6, 2, 2, 240, 272, 5, 40, 21, 14, 241, 242, 12, 12, 2, 2, 242, 243, 9, 7, 2, 2, 243, 272, 5, 40, 21, 13, 244, 245, 12, 11, 2, 2, 245, 246, 7, 36, 2, 2, 246, 272, 5, 40, 21, 12, 247, 248, 12, 10, 2, 2, 248, 249, 7, 6, 2, 2, 249, 272, 5, 40, 21, 11, 250, 251, 12, 9, 2, 2, 251, 252, 7, 37, 2, 2, 252, 272, 5, 40, 21, 10, 253, 254, 12, 8, 2, 2, 254, 255, 7, 38, 2, 2, 255, 272, 5, 40, 21, 9, 256, 257, 12, 7, 2, 2, 257, 258, 7, 39, 2, 2, 258, 272, 5, 40, 21, 8, 259, 260, 12, 19, 2, 2, 260, 261, 7, 24, 2, 2, 261, 262, 7, 49, 2, 2, 262, 272, 7, 25, 2, 2, 263, 264, 12, 18, 2, 2, 264, 272, 9, 8, 2, 2, 265, 266, 12, 16, 2, 2, 266, 267, 7, 30, 2, 2, 267, 268, 7, 17, 2, 2, 268, 269, 5, 40, 21, 2, 269, 270, 7, 19, 2, 2, 270, 272, 3, 2, 2, 2, 271, 232, 3, 2, 2, 2, 271, 235, 3, 2, 2, 2, 271, 238, 3, 2, 2, 2, 271, 241, 3, 2, 2, 2, 271, 244, 3, 2, 2, 2, 271, 247, 3, 2, 2, 2, 271, 250, 3, 2, 2, 2, 271, 253, 3, 2, 2, 2, 271, 256, 3, 2, 2, 2, 271, 259, 3, 2, 2, 2, 271, 263, 3, 2, 2, 2, 271, 265, 3, 2, 2, 2, 272, 275, 3, 2, 2, 2, 273, 271, 3, 2, 2, 2, 273, 274, 3, 2, 2, 2, 274, 41, 3, 2, 2, 2, 275, 273, 3, 2, 2, 2, 276, 282, 7, 47, 2, 2, 277, 282, 5, 44, 23, 2, 278, 282, 7, 52, 2, 2, 279, 282, 7, 53, 2, 2, 280, 282, 7, 54, 2, 2, 281, 276, 3, 2, 2, 2, 281, 277, 3, 2, 2, 2, 281, 278, 3, 2, 2, 2, 281, 279, 3, 2, 2, 2, 281, 280, 3, 2, 2, 2, 282, 43, 3, 2, 2, 2, 283, 285, 7, 49, 2, 2, 284, 286, 7, 48, 2, 2, 285, 284, 3, 2, 2, 2, 285, 286, 3, 2, 2, 2, 286, 45, 3, 2, 2, 2, 287, 288, 9, 9, 2, 2, 288, 47, 3, 2, 2, 2, 27, 51, 66, 69, 82, 94, 105, 109, 111, 122, 127, 134, 168, 179, 183, 185, 199, 202, 218, 222, 224, 230, 271, 273, 281, 285] \ No newline at end of file diff --git a/vscode-cashscript/src/CashscriptLinter/grammar/CashScript.tokens b/vscode-cashscript/src/CashscriptLinter/grammar/CashScript.tokens new file mode 100644 index 0000000..4e7b5bb --- /dev/null +++ b/vscode-cashscript/src/CashscriptLinter/grammar/CashScript.tokens @@ -0,0 +1,101 @@ +T__0=1 +T__1=2 +T__2=3 +T__3=4 +T__4=5 +T__5=6 +T__6=7 +T__7=8 +T__8=9 +T__9=10 +T__10=11 +T__11=12 +T__12=13 +T__13=14 +T__14=15 +T__15=16 +T__16=17 +T__17=18 +T__18=19 +T__19=20 +T__20=21 +T__21=22 +T__22=23 +T__23=24 +T__24=25 +T__25=26 +T__26=27 +T__27=28 +T__28=29 +T__29=30 +T__30=31 +T__31=32 +T__32=33 +T__33=34 +T__34=35 +T__35=36 +T__36=37 +T__37=38 +T__38=39 +T__39=40 +T__40=41 +T__41=42 +T__42=43 +VersionLiteral=44 +BooleanLiteral=45 +NumberUnit=46 +NumberLiteral=47 +Bytes=48 +Bound=49 +StringLiteral=50 +DateLiteral=51 +HexLiteral=52 +TxVar=53 +PreimageField=54 +Identifier=55 +WHITESPACE=56 +COMMENT=57 +LINE_COMMENT=58 +'pragma'=1 +';'=2 +'cashscript'=3 +'^'=4 +'~'=5 +'>='=6 +'>'=7 +'<'=8 +'<='=9 +'='=10 +'contract'=11 +'{'=12 +'}'=13 +'function'=14 +'('=15 +','=16 +')'=17 +'require'=18 +'if'=19 +'else'=20 +'new'=21 +'['=22 +']'=23 +'.reverse()'=24 +'.length'=25 +'!'=26 +'-'=27 +'.split'=28 +'/'=29 +'%'=30 +'+'=31 +'=='=32 +'!='=33 +'&'=34 +'|'=35 +'&&'=36 +'||'=37 +'int'=38 +'bool'=39 +'string'=40 +'pubkey'=41 +'sig'=42 +'datasig'=43 diff --git a/vscode-cashscript/src/CashscriptLinter/grammar/CashScriptLexer.interp b/vscode-cashscript/src/CashscriptLinter/grammar/CashScriptLexer.interp new file mode 100644 index 0000000..038e75c --- /dev/null +++ b/vscode-cashscript/src/CashscriptLinter/grammar/CashScriptLexer.interp @@ -0,0 +1,191 @@ +token literal names: +null +'pragma' +';' +'cashscript' +'^' +'~' +'>=' +'>' +'<' +'<=' +'=' +'contract' +'{' +'}' +'function' +'(' +',' +')' +'require' +'if' +'else' +'new' +'[' +']' +'.reverse()' +'.length' +'!' +'-' +'.split' +'/' +'%' +'+' +'==' +'!=' +'&' +'|' +'&&' +'||' +'int' +'bool' +'string' +'pubkey' +'sig' +'datasig' +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null + +token symbolic names: +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +VersionLiteral +BooleanLiteral +NumberUnit +NumberLiteral +Bytes +Bound +StringLiteral +DateLiteral +HexLiteral +TxVar +PreimageField +Identifier +WHITESPACE +COMMENT +LINE_COMMENT + +rule names: +T__0 +T__1 +T__2 +T__3 +T__4 +T__5 +T__6 +T__7 +T__8 +T__9 +T__10 +T__11 +T__12 +T__13 +T__14 +T__15 +T__16 +T__17 +T__18 +T__19 +T__20 +T__21 +T__22 +T__23 +T__24 +T__25 +T__26 +T__27 +T__28 +T__29 +T__30 +T__31 +T__32 +T__33 +T__34 +T__35 +T__36 +T__37 +T__38 +T__39 +T__40 +T__41 +T__42 +VersionLiteral +BooleanLiteral +NumberUnit +NumberLiteral +Bytes +Bound +StringLiteral +DateLiteral +HexLiteral +TxVar +PreimageField +Identifier +WHITESPACE +COMMENT +LINE_COMMENT + +channel names: +DEFAULT_TOKEN_CHANNEL +HIDDEN + +mode names: +DEFAULT_MODE + +atn: +[3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 2, 60, 636, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 31, 3, 31, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 45, 6, 45, 296, 10, 45, 13, 45, 14, 45, 297, 3, 45, 3, 45, 6, 45, 302, 10, 45, 13, 45, 14, 45, 303, 3, 45, 3, 45, 6, 45, 308, 10, 45, 13, 45, 14, 45, 309, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 5, 46, 321, 10, 46, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 5, 47, 380, 10, 47, 3, 48, 5, 48, 383, 10, 48, 3, 48, 6, 48, 386, 10, 48, 13, 48, 14, 48, 387, 3, 48, 3, 48, 6, 48, 392, 10, 48, 13, 48, 14, 48, 393, 5, 48, 396, 10, 48, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 5, 49, 405, 10, 49, 3, 50, 3, 50, 7, 50, 409, 10, 50, 12, 50, 14, 50, 412, 11, 50, 3, 51, 3, 51, 3, 51, 3, 51, 7, 51, 418, 10, 51, 12, 51, 14, 51, 421, 11, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 7, 51, 428, 10, 51, 12, 51, 14, 51, 431, 11, 51, 3, 51, 5, 51, 434, 10, 51, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 7, 53, 448, 10, 53, 12, 53, 14, 53, 451, 11, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 5, 54, 466, 10, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 5, 55, 596, 10, 55, 3, 56, 3, 56, 7, 56, 600, 10, 56, 12, 56, 14, 56, 603, 11, 56, 3, 57, 6, 57, 606, 10, 57, 13, 57, 14, 57, 607, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 58, 7, 58, 616, 10, 58, 12, 58, 14, 58, 619, 11, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 7, 59, 630, 10, 59, 12, 59, 14, 59, 633, 11, 59, 3, 59, 3, 59, 5, 419, 429, 617, 2, 2, 60, 3, 2, 3, 5, 2, 4, 7, 2, 5, 9, 2, 6, 11, 2, 7, 13, 2, 8, 15, 2, 9, 17, 2, 10, 19, 2, 11, 21, 2, 12, 23, 2, 13, 25, 2, 14, 27, 2, 15, 29, 2, 16, 31, 2, 17, 33, 2, 18, 35, 2, 19, 37, 2, 20, 39, 2, 21, 41, 2, 22, 43, 2, 23, 45, 2, 24, 47, 2, 25, 49, 2, 26, 51, 2, 27, 53, 2, 28, 55, 2, 29, 57, 2, 30, 59, 2, 31, 61, 2, 32, 63, 2, 33, 65, 2, 34, 67, 2, 35, 69, 2, 36, 71, 2, 37, 73, 2, 38, 75, 2, 39, 77, 2, 40, 79, 2, 41, 81, 2, 42, 83, 2, 43, 85, 2, 44, 87, 2, 45, 89, 2, 46, 91, 2, 47, 93, 2, 48, 95, 2, 49, 97, 2, 50, 99, 2, 51, 101, 2, 52, 103, 2, 53, 105, 2, 54, 107, 2, 55, 109, 2, 56, 111, 2, 57, 113, 2, 58, 115, 2, 59, 117, 2, 60, 3, 2, 14, 3, 2, 50, 59, 3, 2, 47, 47, 4, 2, 71, 71, 103, 103, 3, 2, 51, 59, 5, 2, 12, 12, 15, 15, 36, 36, 5, 2, 12, 12, 15, 15, 41, 41, 4, 2, 90, 90, 122, 122, 5, 2, 50, 59, 67, 72, 99, 104, 4, 2, 67, 92, 99, 124, 6, 2, 50, 59, 67, 92, 97, 97, 99, 124, 5, 2, 11, 12, 14, 15, 34, 34, 4, 2, 12, 12, 15, 15, 2, 675, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 3, 119, 3, 2, 2, 2, 5, 126, 3, 2, 2, 2, 7, 128, 3, 2, 2, 2, 9, 139, 3, 2, 2, 2, 11, 141, 3, 2, 2, 2, 13, 143, 3, 2, 2, 2, 15, 146, 3, 2, 2, 2, 17, 148, 3, 2, 2, 2, 19, 150, 3, 2, 2, 2, 21, 153, 3, 2, 2, 2, 23, 155, 3, 2, 2, 2, 25, 164, 3, 2, 2, 2, 27, 166, 3, 2, 2, 2, 29, 168, 3, 2, 2, 2, 31, 177, 3, 2, 2, 2, 33, 179, 3, 2, 2, 2, 35, 181, 3, 2, 2, 2, 37, 183, 3, 2, 2, 2, 39, 191, 3, 2, 2, 2, 41, 194, 3, 2, 2, 2, 43, 199, 3, 2, 2, 2, 45, 203, 3, 2, 2, 2, 47, 205, 3, 2, 2, 2, 49, 207, 3, 2, 2, 2, 51, 218, 3, 2, 2, 2, 53, 226, 3, 2, 2, 2, 55, 228, 3, 2, 2, 2, 57, 230, 3, 2, 2, 2, 59, 237, 3, 2, 2, 2, 61, 239, 3, 2, 2, 2, 63, 241, 3, 2, 2, 2, 65, 243, 3, 2, 2, 2, 67, 246, 3, 2, 2, 2, 69, 249, 3, 2, 2, 2, 71, 251, 3, 2, 2, 2, 73, 253, 3, 2, 2, 2, 75, 256, 3, 2, 2, 2, 77, 259, 3, 2, 2, 2, 79, 263, 3, 2, 2, 2, 81, 268, 3, 2, 2, 2, 83, 275, 3, 2, 2, 2, 85, 282, 3, 2, 2, 2, 87, 286, 3, 2, 2, 2, 89, 295, 3, 2, 2, 2, 91, 320, 3, 2, 2, 2, 93, 379, 3, 2, 2, 2, 95, 382, 3, 2, 2, 2, 97, 397, 3, 2, 2, 2, 99, 406, 3, 2, 2, 2, 101, 433, 3, 2, 2, 2, 103, 435, 3, 2, 2, 2, 105, 444, 3, 2, 2, 2, 107, 465, 3, 2, 2, 2, 109, 595, 3, 2, 2, 2, 111, 597, 3, 2, 2, 2, 113, 605, 3, 2, 2, 2, 115, 611, 3, 2, 2, 2, 117, 625, 3, 2, 2, 2, 119, 120, 7, 114, 2, 2, 120, 121, 7, 116, 2, 2, 121, 122, 7, 99, 2, 2, 122, 123, 7, 105, 2, 2, 123, 124, 7, 111, 2, 2, 124, 125, 7, 99, 2, 2, 125, 4, 3, 2, 2, 2, 126, 127, 7, 61, 2, 2, 127, 6, 3, 2, 2, 2, 128, 129, 7, 101, 2, 2, 129, 130, 7, 99, 2, 2, 130, 131, 7, 117, 2, 2, 131, 132, 7, 106, 2, 2, 132, 133, 7, 117, 2, 2, 133, 134, 7, 101, 2, 2, 134, 135, 7, 116, 2, 2, 135, 136, 7, 107, 2, 2, 136, 137, 7, 114, 2, 2, 137, 138, 7, 118, 2, 2, 138, 8, 3, 2, 2, 2, 139, 140, 7, 96, 2, 2, 140, 10, 3, 2, 2, 2, 141, 142, 7, 128, 2, 2, 142, 12, 3, 2, 2, 2, 143, 144, 7, 64, 2, 2, 144, 145, 7, 63, 2, 2, 145, 14, 3, 2, 2, 2, 146, 147, 7, 64, 2, 2, 147, 16, 3, 2, 2, 2, 148, 149, 7, 62, 2, 2, 149, 18, 3, 2, 2, 2, 150, 151, 7, 62, 2, 2, 151, 152, 7, 63, 2, 2, 152, 20, 3, 2, 2, 2, 153, 154, 7, 63, 2, 2, 154, 22, 3, 2, 2, 2, 155, 156, 7, 101, 2, 2, 156, 157, 7, 113, 2, 2, 157, 158, 7, 112, 2, 2, 158, 159, 7, 118, 2, 2, 159, 160, 7, 116, 2, 2, 160, 161, 7, 99, 2, 2, 161, 162, 7, 101, 2, 2, 162, 163, 7, 118, 2, 2, 163, 24, 3, 2, 2, 2, 164, 165, 7, 125, 2, 2, 165, 26, 3, 2, 2, 2, 166, 167, 7, 127, 2, 2, 167, 28, 3, 2, 2, 2, 168, 169, 7, 104, 2, 2, 169, 170, 7, 119, 2, 2, 170, 171, 7, 112, 2, 2, 171, 172, 7, 101, 2, 2, 172, 173, 7, 118, 2, 2, 173, 174, 7, 107, 2, 2, 174, 175, 7, 113, 2, 2, 175, 176, 7, 112, 2, 2, 176, 30, 3, 2, 2, 2, 177, 178, 7, 42, 2, 2, 178, 32, 3, 2, 2, 2, 179, 180, 7, 46, 2, 2, 180, 34, 3, 2, 2, 2, 181, 182, 7, 43, 2, 2, 182, 36, 3, 2, 2, 2, 183, 184, 7, 116, 2, 2, 184, 185, 7, 103, 2, 2, 185, 186, 7, 115, 2, 2, 186, 187, 7, 119, 2, 2, 187, 188, 7, 107, 2, 2, 188, 189, 7, 116, 2, 2, 189, 190, 7, 103, 2, 2, 190, 38, 3, 2, 2, 2, 191, 192, 7, 107, 2, 2, 192, 193, 7, 104, 2, 2, 193, 40, 3, 2, 2, 2, 194, 195, 7, 103, 2, 2, 195, 196, 7, 110, 2, 2, 196, 197, 7, 117, 2, 2, 197, 198, 7, 103, 2, 2, 198, 42, 3, 2, 2, 2, 199, 200, 7, 112, 2, 2, 200, 201, 7, 103, 2, 2, 201, 202, 7, 121, 2, 2, 202, 44, 3, 2, 2, 2, 203, 204, 7, 93, 2, 2, 204, 46, 3, 2, 2, 2, 205, 206, 7, 95, 2, 2, 206, 48, 3, 2, 2, 2, 207, 208, 7, 48, 2, 2, 208, 209, 7, 116, 2, 2, 209, 210, 7, 103, 2, 2, 210, 211, 7, 120, 2, 2, 211, 212, 7, 103, 2, 2, 212, 213, 7, 116, 2, 2, 213, 214, 7, 117, 2, 2, 214, 215, 7, 103, 2, 2, 215, 216, 7, 42, 2, 2, 216, 217, 7, 43, 2, 2, 217, 50, 3, 2, 2, 2, 218, 219, 7, 48, 2, 2, 219, 220, 7, 110, 2, 2, 220, 221, 7, 103, 2, 2, 221, 222, 7, 112, 2, 2, 222, 223, 7, 105, 2, 2, 223, 224, 7, 118, 2, 2, 224, 225, 7, 106, 2, 2, 225, 52, 3, 2, 2, 2, 226, 227, 7, 35, 2, 2, 227, 54, 3, 2, 2, 2, 228, 229, 7, 47, 2, 2, 229, 56, 3, 2, 2, 2, 230, 231, 7, 48, 2, 2, 231, 232, 7, 117, 2, 2, 232, 233, 7, 114, 2, 2, 233, 234, 7, 110, 2, 2, 234, 235, 7, 107, 2, 2, 235, 236, 7, 118, 2, 2, 236, 58, 3, 2, 2, 2, 237, 238, 7, 49, 2, 2, 238, 60, 3, 2, 2, 2, 239, 240, 7, 39, 2, 2, 240, 62, 3, 2, 2, 2, 241, 242, 7, 45, 2, 2, 242, 64, 3, 2, 2, 2, 243, 244, 7, 63, 2, 2, 244, 245, 7, 63, 2, 2, 245, 66, 3, 2, 2, 2, 246, 247, 7, 35, 2, 2, 247, 248, 7, 63, 2, 2, 248, 68, 3, 2, 2, 2, 249, 250, 7, 40, 2, 2, 250, 70, 3, 2, 2, 2, 251, 252, 7, 126, 2, 2, 252, 72, 3, 2, 2, 2, 253, 254, 7, 40, 2, 2, 254, 255, 7, 40, 2, 2, 255, 74, 3, 2, 2, 2, 256, 257, 7, 126, 2, 2, 257, 258, 7, 126, 2, 2, 258, 76, 3, 2, 2, 2, 259, 260, 7, 107, 2, 2, 260, 261, 7, 112, 2, 2, 261, 262, 7, 118, 2, 2, 262, 78, 3, 2, 2, 2, 263, 264, 7, 100, 2, 2, 264, 265, 7, 113, 2, 2, 265, 266, 7, 113, 2, 2, 266, 267, 7, 110, 2, 2, 267, 80, 3, 2, 2, 2, 268, 269, 7, 117, 2, 2, 269, 270, 7, 118, 2, 2, 270, 271, 7, 116, 2, 2, 271, 272, 7, 107, 2, 2, 272, 273, 7, 112, 2, 2, 273, 274, 7, 105, 2, 2, 274, 82, 3, 2, 2, 2, 275, 276, 7, 114, 2, 2, 276, 277, 7, 119, 2, 2, 277, 278, 7, 100, 2, 2, 278, 279, 7, 109, 2, 2, 279, 280, 7, 103, 2, 2, 280, 281, 7, 123, 2, 2, 281, 84, 3, 2, 2, 2, 282, 283, 7, 117, 2, 2, 283, 284, 7, 107, 2, 2, 284, 285, 7, 105, 2, 2, 285, 86, 3, 2, 2, 2, 286, 287, 7, 102, 2, 2, 287, 288, 7, 99, 2, 2, 288, 289, 7, 118, 2, 2, 289, 290, 7, 99, 2, 2, 290, 291, 7, 117, 2, 2, 291, 292, 7, 107, 2, 2, 292, 293, 7, 105, 2, 2, 293, 88, 3, 2, 2, 2, 294, 296, 9, 2, 2, 2, 295, 294, 3, 2, 2, 2, 296, 297, 3, 2, 2, 2, 297, 295, 3, 2, 2, 2, 297, 298, 3, 2, 2, 2, 298, 299, 3, 2, 2, 2, 299, 301, 7, 48, 2, 2, 300, 302, 9, 2, 2, 2, 301, 300, 3, 2, 2, 2, 302, 303, 3, 2, 2, 2, 303, 301, 3, 2, 2, 2, 303, 304, 3, 2, 2, 2, 304, 305, 3, 2, 2, 2, 305, 307, 7, 48, 2, 2, 306, 308, 9, 2, 2, 2, 307, 306, 3, 2, 2, 2, 308, 309, 3, 2, 2, 2, 309, 307, 3, 2, 2, 2, 309, 310, 3, 2, 2, 2, 310, 90, 3, 2, 2, 2, 311, 312, 7, 118, 2, 2, 312, 313, 7, 116, 2, 2, 313, 314, 7, 119, 2, 2, 314, 321, 7, 103, 2, 2, 315, 316, 7, 104, 2, 2, 316, 317, 7, 99, 2, 2, 317, 318, 7, 110, 2, 2, 318, 319, 7, 117, 2, 2, 319, 321, 7, 103, 2, 2, 320, 311, 3, 2, 2, 2, 320, 315, 3, 2, 2, 2, 321, 92, 3, 2, 2, 2, 322, 323, 7, 117, 2, 2, 323, 324, 7, 99, 2, 2, 324, 325, 7, 118, 2, 2, 325, 326, 7, 113, 2, 2, 326, 327, 7, 117, 2, 2, 327, 328, 7, 106, 2, 2, 328, 329, 7, 107, 2, 2, 329, 380, 7, 117, 2, 2, 330, 331, 7, 117, 2, 2, 331, 332, 7, 99, 2, 2, 332, 333, 7, 118, 2, 2, 333, 380, 7, 117, 2, 2, 334, 335, 7, 104, 2, 2, 335, 336, 7, 107, 2, 2, 336, 337, 7, 112, 2, 2, 337, 338, 7, 112, 2, 2, 338, 339, 7, 103, 2, 2, 339, 380, 7, 123, 2, 2, 340, 341, 7, 100, 2, 2, 341, 342, 7, 107, 2, 2, 342, 343, 7, 118, 2, 2, 343, 380, 7, 117, 2, 2, 344, 345, 7, 100, 2, 2, 345, 346, 7, 107, 2, 2, 346, 347, 7, 118, 2, 2, 347, 348, 7, 101, 2, 2, 348, 349, 7, 113, 2, 2, 349, 350, 7, 107, 2, 2, 350, 380, 7, 112, 2, 2, 351, 352, 7, 117, 2, 2, 352, 353, 7, 103, 2, 2, 353, 354, 7, 101, 2, 2, 354, 355, 7, 113, 2, 2, 355, 356, 7, 112, 2, 2, 356, 357, 7, 102, 2, 2, 357, 380, 7, 117, 2, 2, 358, 359, 7, 111, 2, 2, 359, 360, 7, 107, 2, 2, 360, 361, 7, 112, 2, 2, 361, 362, 7, 119, 2, 2, 362, 363, 7, 118, 2, 2, 363, 364, 7, 103, 2, 2, 364, 380, 7, 117, 2, 2, 365, 366, 7, 106, 2, 2, 366, 367, 7, 113, 2, 2, 367, 368, 7, 119, 2, 2, 368, 369, 7, 116, 2, 2, 369, 380, 7, 117, 2, 2, 370, 371, 7, 102, 2, 2, 371, 372, 7, 99, 2, 2, 372, 373, 7, 123, 2, 2, 373, 380, 7, 117, 2, 2, 374, 375, 7, 121, 2, 2, 375, 376, 7, 103, 2, 2, 376, 377, 7, 103, 2, 2, 377, 378, 7, 109, 2, 2, 378, 380, 7, 117, 2, 2, 379, 322, 3, 2, 2, 2, 379, 330, 3, 2, 2, 2, 379, 334, 3, 2, 2, 2, 379, 340, 3, 2, 2, 2, 379, 344, 3, 2, 2, 2, 379, 351, 3, 2, 2, 2, 379, 358, 3, 2, 2, 2, 379, 365, 3, 2, 2, 2, 379, 370, 3, 2, 2, 2, 379, 374, 3, 2, 2, 2, 380, 94, 3, 2, 2, 2, 381, 383, 9, 3, 2, 2, 382, 381, 3, 2, 2, 2, 382, 383, 3, 2, 2, 2, 383, 385, 3, 2, 2, 2, 384, 386, 9, 2, 2, 2, 385, 384, 3, 2, 2, 2, 386, 387, 3, 2, 2, 2, 387, 385, 3, 2, 2, 2, 387, 388, 3, 2, 2, 2, 388, 395, 3, 2, 2, 2, 389, 391, 9, 4, 2, 2, 390, 392, 9, 2, 2, 2, 391, 390, 3, 2, 2, 2, 392, 393, 3, 2, 2, 2, 393, 391, 3, 2, 2, 2, 393, 394, 3, 2, 2, 2, 394, 396, 3, 2, 2, 2, 395, 389, 3, 2, 2, 2, 395, 396, 3, 2, 2, 2, 396, 96, 3, 2, 2, 2, 397, 398, 7, 100, 2, 2, 398, 399, 7, 123, 2, 2, 399, 400, 7, 118, 2, 2, 400, 401, 7, 103, 2, 2, 401, 402, 7, 117, 2, 2, 402, 404, 3, 2, 2, 2, 403, 405, 5, 99, 50, 2, 404, 403, 3, 2, 2, 2, 404, 405, 3, 2, 2, 2, 405, 98, 3, 2, 2, 2, 406, 410, 9, 5, 2, 2, 407, 409, 9, 2, 2, 2, 408, 407, 3, 2, 2, 2, 409, 412, 3, 2, 2, 2, 410, 408, 3, 2, 2, 2, 410, 411, 3, 2, 2, 2, 411, 100, 3, 2, 2, 2, 412, 410, 3, 2, 2, 2, 413, 419, 7, 36, 2, 2, 414, 415, 7, 94, 2, 2, 415, 418, 7, 36, 2, 2, 416, 418, 10, 6, 2, 2, 417, 414, 3, 2, 2, 2, 417, 416, 3, 2, 2, 2, 418, 421, 3, 2, 2, 2, 419, 420, 3, 2, 2, 2, 419, 417, 3, 2, 2, 2, 420, 422, 3, 2, 2, 2, 421, 419, 3, 2, 2, 2, 422, 434, 7, 36, 2, 2, 423, 429, 7, 41, 2, 2, 424, 425, 7, 94, 2, 2, 425, 428, 7, 41, 2, 2, 426, 428, 10, 7, 2, 2, 427, 424, 3, 2, 2, 2, 427, 426, 3, 2, 2, 2, 428, 431, 3, 2, 2, 2, 429, 430, 3, 2, 2, 2, 429, 427, 3, 2, 2, 2, 430, 432, 3, 2, 2, 2, 431, 429, 3, 2, 2, 2, 432, 434, 7, 41, 2, 2, 433, 413, 3, 2, 2, 2, 433, 423, 3, 2, 2, 2, 434, 102, 3, 2, 2, 2, 435, 436, 7, 102, 2, 2, 436, 437, 7, 99, 2, 2, 437, 438, 7, 118, 2, 2, 438, 439, 7, 103, 2, 2, 439, 440, 7, 42, 2, 2, 440, 441, 3, 2, 2, 2, 441, 442, 5, 101, 51, 2, 442, 443, 7, 43, 2, 2, 443, 104, 3, 2, 2, 2, 444, 445, 7, 50, 2, 2, 445, 449, 9, 8, 2, 2, 446, 448, 9, 9, 2, 2, 447, 446, 3, 2, 2, 2, 448, 451, 3, 2, 2, 2, 449, 447, 3, 2, 2, 2, 449, 450, 3, 2, 2, 2, 450, 106, 3, 2, 2, 2, 451, 449, 3, 2, 2, 2, 452, 453, 7, 118, 2, 2, 453, 454, 7, 122, 2, 2, 454, 455, 7, 48, 2, 2, 455, 456, 7, 99, 2, 2, 456, 457, 7, 105, 2, 2, 457, 466, 7, 103, 2, 2, 458, 459, 7, 118, 2, 2, 459, 460, 7, 122, 2, 2, 460, 461, 7, 48, 2, 2, 461, 462, 7, 118, 2, 2, 462, 463, 7, 107, 2, 2, 463, 464, 7, 111, 2, 2, 464, 466, 7, 103, 2, 2, 465, 452, 3, 2, 2, 2, 465, 458, 3, 2, 2, 2, 466, 108, 3, 2, 2, 2, 467, 468, 7, 118, 2, 2, 468, 469, 7, 122, 2, 2, 469, 470, 7, 48, 2, 2, 470, 471, 7, 120, 2, 2, 471, 472, 7, 103, 2, 2, 472, 473, 7, 116, 2, 2, 473, 474, 7, 117, 2, 2, 474, 475, 7, 107, 2, 2, 475, 476, 7, 113, 2, 2, 476, 596, 7, 112, 2, 2, 477, 478, 7, 118, 2, 2, 478, 479, 7, 122, 2, 2, 479, 480, 7, 48, 2, 2, 480, 481, 7, 106, 2, 2, 481, 482, 7, 99, 2, 2, 482, 483, 7, 117, 2, 2, 483, 484, 7, 106, 2, 2, 484, 485, 7, 82, 2, 2, 485, 486, 7, 116, 2, 2, 486, 487, 7, 103, 2, 2, 487, 488, 7, 120, 2, 2, 488, 489, 7, 113, 2, 2, 489, 490, 7, 119, 2, 2, 490, 491, 7, 118, 2, 2, 491, 596, 7, 117, 2, 2, 492, 493, 7, 118, 2, 2, 493, 494, 7, 122, 2, 2, 494, 495, 7, 48, 2, 2, 495, 496, 7, 106, 2, 2, 496, 497, 7, 99, 2, 2, 497, 498, 7, 117, 2, 2, 498, 499, 7, 106, 2, 2, 499, 500, 7, 85, 2, 2, 500, 501, 7, 103, 2, 2, 501, 502, 7, 115, 2, 2, 502, 503, 7, 119, 2, 2, 503, 504, 7, 103, 2, 2, 504, 505, 7, 112, 2, 2, 505, 506, 7, 101, 2, 2, 506, 596, 7, 103, 2, 2, 507, 508, 7, 118, 2, 2, 508, 509, 7, 122, 2, 2, 509, 510, 7, 48, 2, 2, 510, 511, 7, 113, 2, 2, 511, 512, 7, 119, 2, 2, 512, 513, 7, 118, 2, 2, 513, 514, 7, 114, 2, 2, 514, 515, 7, 113, 2, 2, 515, 516, 7, 107, 2, 2, 516, 517, 7, 112, 2, 2, 517, 596, 7, 118, 2, 2, 518, 519, 7, 118, 2, 2, 519, 520, 7, 122, 2, 2, 520, 521, 7, 48, 2, 2, 521, 522, 7, 100, 2, 2, 522, 523, 7, 123, 2, 2, 523, 524, 7, 118, 2, 2, 524, 525, 7, 103, 2, 2, 525, 526, 7, 101, 2, 2, 526, 527, 7, 113, 2, 2, 527, 528, 7, 102, 2, 2, 528, 596, 7, 103, 2, 2, 529, 530, 7, 118, 2, 2, 530, 531, 7, 122, 2, 2, 531, 532, 7, 48, 2, 2, 532, 533, 7, 120, 2, 2, 533, 534, 7, 99, 2, 2, 534, 535, 7, 110, 2, 2, 535, 536, 7, 119, 2, 2, 536, 596, 7, 103, 2, 2, 537, 538, 7, 118, 2, 2, 538, 539, 7, 122, 2, 2, 539, 540, 7, 48, 2, 2, 540, 541, 7, 117, 2, 2, 541, 542, 7, 103, 2, 2, 542, 543, 7, 115, 2, 2, 543, 544, 7, 119, 2, 2, 544, 545, 7, 103, 2, 2, 545, 546, 7, 112, 2, 2, 546, 547, 7, 101, 2, 2, 547, 596, 7, 103, 2, 2, 548, 549, 7, 118, 2, 2, 549, 550, 7, 122, 2, 2, 550, 551, 7, 48, 2, 2, 551, 552, 7, 106, 2, 2, 552, 553, 7, 99, 2, 2, 553, 554, 7, 117, 2, 2, 554, 555, 7, 106, 2, 2, 555, 556, 7, 81, 2, 2, 556, 557, 7, 119, 2, 2, 557, 558, 7, 118, 2, 2, 558, 559, 7, 114, 2, 2, 559, 560, 7, 119, 2, 2, 560, 561, 7, 118, 2, 2, 561, 596, 7, 117, 2, 2, 562, 563, 7, 118, 2, 2, 563, 564, 7, 122, 2, 2, 564, 565, 7, 48, 2, 2, 565, 566, 7, 110, 2, 2, 566, 567, 7, 113, 2, 2, 567, 568, 7, 101, 2, 2, 568, 569, 7, 109, 2, 2, 569, 570, 7, 118, 2, 2, 570, 571, 7, 107, 2, 2, 571, 572, 7, 111, 2, 2, 572, 596, 7, 103, 2, 2, 573, 574, 7, 118, 2, 2, 574, 575, 7, 122, 2, 2, 575, 576, 7, 48, 2, 2, 576, 577, 7, 106, 2, 2, 577, 578, 7, 99, 2, 2, 578, 579, 7, 117, 2, 2, 579, 580, 7, 106, 2, 2, 580, 581, 7, 118, 2, 2, 581, 582, 7, 123, 2, 2, 582, 583, 7, 114, 2, 2, 583, 596, 7, 103, 2, 2, 584, 585, 7, 118, 2, 2, 585, 586, 7, 122, 2, 2, 586, 587, 7, 48, 2, 2, 587, 588, 7, 114, 2, 2, 588, 589, 7, 116, 2, 2, 589, 590, 7, 103, 2, 2, 590, 591, 7, 107, 2, 2, 591, 592, 7, 111, 2, 2, 592, 593, 7, 99, 2, 2, 593, 594, 7, 105, 2, 2, 594, 596, 7, 103, 2, 2, 595, 467, 3, 2, 2, 2, 595, 477, 3, 2, 2, 2, 595, 492, 3, 2, 2, 2, 595, 507, 3, 2, 2, 2, 595, 518, 3, 2, 2, 2, 595, 529, 3, 2, 2, 2, 595, 537, 3, 2, 2, 2, 595, 548, 3, 2, 2, 2, 595, 562, 3, 2, 2, 2, 595, 573, 3, 2, 2, 2, 595, 584, 3, 2, 2, 2, 596, 110, 3, 2, 2, 2, 597, 601, 9, 10, 2, 2, 598, 600, 9, 11, 2, 2, 599, 598, 3, 2, 2, 2, 600, 603, 3, 2, 2, 2, 601, 599, 3, 2, 2, 2, 601, 602, 3, 2, 2, 2, 602, 112, 3, 2, 2, 2, 603, 601, 3, 2, 2, 2, 604, 606, 9, 12, 2, 2, 605, 604, 3, 2, 2, 2, 606, 607, 3, 2, 2, 2, 607, 605, 3, 2, 2, 2, 607, 608, 3, 2, 2, 2, 608, 609, 3, 2, 2, 2, 609, 610, 8, 57, 2, 2, 610, 114, 3, 2, 2, 2, 611, 612, 7, 49, 2, 2, 612, 613, 7, 44, 2, 2, 613, 617, 3, 2, 2, 2, 614, 616, 11, 2, 2, 2, 615, 614, 3, 2, 2, 2, 616, 619, 3, 2, 2, 2, 617, 618, 3, 2, 2, 2, 617, 615, 3, 2, 2, 2, 618, 620, 3, 2, 2, 2, 619, 617, 3, 2, 2, 2, 620, 621, 7, 44, 2, 2, 621, 622, 7, 49, 2, 2, 622, 623, 3, 2, 2, 2, 623, 624, 8, 58, 3, 2, 624, 116, 3, 2, 2, 2, 625, 626, 7, 49, 2, 2, 626, 627, 7, 49, 2, 2, 627, 631, 3, 2, 2, 2, 628, 630, 10, 13, 2, 2, 629, 628, 3, 2, 2, 2, 630, 633, 3, 2, 2, 2, 631, 629, 3, 2, 2, 2, 631, 632, 3, 2, 2, 2, 632, 634, 3, 2, 2, 2, 633, 631, 3, 2, 2, 2, 634, 635, 8, 59, 3, 2, 635, 118, 3, 2, 2, 2, 26, 2, 297, 303, 309, 320, 379, 382, 387, 393, 395, 404, 410, 417, 419, 427, 429, 433, 449, 465, 595, 601, 607, 617, 631, 4, 8, 2, 2, 2, 3, 2] \ No newline at end of file diff --git a/vscode-cashscript/src/CashscriptLinter/grammar/CashScriptLexer.tokens b/vscode-cashscript/src/CashscriptLinter/grammar/CashScriptLexer.tokens new file mode 100644 index 0000000..4e7b5bb --- /dev/null +++ b/vscode-cashscript/src/CashscriptLinter/grammar/CashScriptLexer.tokens @@ -0,0 +1,101 @@ +T__0=1 +T__1=2 +T__2=3 +T__3=4 +T__4=5 +T__5=6 +T__6=7 +T__7=8 +T__8=9 +T__9=10 +T__10=11 +T__11=12 +T__12=13 +T__13=14 +T__14=15 +T__15=16 +T__16=17 +T__17=18 +T__18=19 +T__19=20 +T__20=21 +T__21=22 +T__22=23 +T__23=24 +T__24=25 +T__25=26 +T__26=27 +T__27=28 +T__28=29 +T__29=30 +T__30=31 +T__31=32 +T__32=33 +T__33=34 +T__34=35 +T__35=36 +T__36=37 +T__37=38 +T__38=39 +T__39=40 +T__40=41 +T__41=42 +T__42=43 +VersionLiteral=44 +BooleanLiteral=45 +NumberUnit=46 +NumberLiteral=47 +Bytes=48 +Bound=49 +StringLiteral=50 +DateLiteral=51 +HexLiteral=52 +TxVar=53 +PreimageField=54 +Identifier=55 +WHITESPACE=56 +COMMENT=57 +LINE_COMMENT=58 +'pragma'=1 +';'=2 +'cashscript'=3 +'^'=4 +'~'=5 +'>='=6 +'>'=7 +'<'=8 +'<='=9 +'='=10 +'contract'=11 +'{'=12 +'}'=13 +'function'=14 +'('=15 +','=16 +')'=17 +'require'=18 +'if'=19 +'else'=20 +'new'=21 +'['=22 +']'=23 +'.reverse()'=24 +'.length'=25 +'!'=26 +'-'=27 +'.split'=28 +'/'=29 +'%'=30 +'+'=31 +'=='=32 +'!='=33 +'&'=34 +'|'=35 +'&&'=36 +'||'=37 +'int'=38 +'bool'=39 +'string'=40 +'pubkey'=41 +'sig'=42 +'datasig'=43 diff --git a/vscode-cashscript/src/CashscriptLinter/grammar/CashScriptLexer.ts b/vscode-cashscript/src/CashscriptLinter/grammar/CashScriptLexer.ts new file mode 100644 index 0000000..d1ee595 --- /dev/null +++ b/vscode-cashscript/src/CashscriptLinter/grammar/CashScriptLexer.ts @@ -0,0 +1,463 @@ +// Generated from grammar/CashScript.g4 by ANTLR 4.9.0-SNAPSHOT + + +import { ATN } from "antlr4ts/atn/ATN"; +import { ATNDeserializer } from "antlr4ts/atn/ATNDeserializer"; +import { CharStream } from "antlr4ts/CharStream"; +import { Lexer } from "antlr4ts/Lexer"; +import { LexerATNSimulator } from "antlr4ts/atn/LexerATNSimulator"; +import { NotNull } from "antlr4ts/Decorators"; +import { Override } from "antlr4ts/Decorators"; +import { RuleContext } from "antlr4ts/RuleContext"; +import { Vocabulary } from "antlr4ts/Vocabulary"; +import { VocabularyImpl } from "antlr4ts/VocabularyImpl"; + +import * as Utils from "antlr4ts/misc/Utils"; + + +export class CashScriptLexer extends Lexer { + public static readonly T__0 = 1; + public static readonly T__1 = 2; + public static readonly T__2 = 3; + public static readonly T__3 = 4; + public static readonly T__4 = 5; + public static readonly T__5 = 6; + public static readonly T__6 = 7; + public static readonly T__7 = 8; + public static readonly T__8 = 9; + public static readonly T__9 = 10; + public static readonly T__10 = 11; + public static readonly T__11 = 12; + public static readonly T__12 = 13; + public static readonly T__13 = 14; + public static readonly T__14 = 15; + public static readonly T__15 = 16; + public static readonly T__16 = 17; + public static readonly T__17 = 18; + public static readonly T__18 = 19; + public static readonly T__19 = 20; + public static readonly T__20 = 21; + public static readonly T__21 = 22; + public static readonly T__22 = 23; + public static readonly T__23 = 24; + public static readonly T__24 = 25; + public static readonly T__25 = 26; + public static readonly T__26 = 27; + public static readonly T__27 = 28; + public static readonly T__28 = 29; + public static readonly T__29 = 30; + public static readonly T__30 = 31; + public static readonly T__31 = 32; + public static readonly T__32 = 33; + public static readonly T__33 = 34; + public static readonly T__34 = 35; + public static readonly T__35 = 36; + public static readonly T__36 = 37; + public static readonly T__37 = 38; + public static readonly T__38 = 39; + public static readonly T__39 = 40; + public static readonly T__40 = 41; + public static readonly T__41 = 42; + public static readonly T__42 = 43; + public static readonly VersionLiteral = 44; + public static readonly BooleanLiteral = 45; + public static readonly NumberUnit = 46; + public static readonly NumberLiteral = 47; + public static readonly Bytes = 48; + public static readonly Bound = 49; + public static readonly StringLiteral = 50; + public static readonly DateLiteral = 51; + public static readonly HexLiteral = 52; + public static readonly TxVar = 53; + public static readonly PreimageField = 54; + public static readonly Identifier = 55; + public static readonly WHITESPACE = 56; + public static readonly COMMENT = 57; + public static readonly LINE_COMMENT = 58; + + // tslint:disable:no-trailing-whitespace + public static readonly channelNames: string[] = [ + "DEFAULT_TOKEN_CHANNEL", "HIDDEN", + ]; + + // tslint:disable:no-trailing-whitespace + public static readonly modeNames: string[] = [ + "DEFAULT_MODE", + ]; + + public static readonly ruleNames: string[] = [ + "T__0", "T__1", "T__2", "T__3", "T__4", "T__5", "T__6", "T__7", "T__8", + "T__9", "T__10", "T__11", "T__12", "T__13", "T__14", "T__15", "T__16", + "T__17", "T__18", "T__19", "T__20", "T__21", "T__22", "T__23", "T__24", + "T__25", "T__26", "T__27", "T__28", "T__29", "T__30", "T__31", "T__32", + "T__33", "T__34", "T__35", "T__36", "T__37", "T__38", "T__39", "T__40", + "T__41", "T__42", "VersionLiteral", "BooleanLiteral", "NumberUnit", "NumberLiteral", + "Bytes", "Bound", "StringLiteral", "DateLiteral", "HexLiteral", "TxVar", + "PreimageField", "Identifier", "WHITESPACE", "COMMENT", "LINE_COMMENT", + ]; + + private static readonly _LITERAL_NAMES: Array = [ + undefined, "'pragma'", "';'", "'cashscript'", "'^'", "'~'", "'>='", "'>'", + "'<'", "'<='", "'='", "'contract'", "'{'", "'}'", "'function'", "'('", + "','", "')'", "'require'", "'if'", "'else'", "'new'", "'['", "']'", "'.reverse()'", + "'.length'", "'!'", "'-'", "'.split'", "'/'", "'%'", "'+'", "'=='", "'!='", + "'&'", "'|'", "'&&'", "'||'", "'int'", "'bool'", "'string'", "'pubkey'", + "'sig'", "'datasig'", + ]; + private static readonly _SYMBOLIC_NAMES: Array = [ + undefined, undefined, undefined, undefined, undefined, undefined, undefined, + undefined, undefined, undefined, undefined, undefined, undefined, undefined, + undefined, undefined, undefined, undefined, undefined, undefined, undefined, + undefined, undefined, undefined, undefined, undefined, undefined, undefined, + undefined, undefined, undefined, undefined, undefined, undefined, undefined, + undefined, undefined, undefined, undefined, undefined, undefined, undefined, + undefined, undefined, "VersionLiteral", "BooleanLiteral", "NumberUnit", + "NumberLiteral", "Bytes", "Bound", "StringLiteral", "DateLiteral", "HexLiteral", + "TxVar", "PreimageField", "Identifier", "WHITESPACE", "COMMENT", "LINE_COMMENT", + ]; + public static readonly VOCABULARY: Vocabulary = new VocabularyImpl(CashScriptLexer._LITERAL_NAMES, CashScriptLexer._SYMBOLIC_NAMES, []); + + // @Override + // @NotNull + public get vocabulary(): Vocabulary { + return CashScriptLexer.VOCABULARY; + } + // tslint:enable:no-trailing-whitespace + + + constructor(input: CharStream) { + super(input); + this._interp = new LexerATNSimulator(CashScriptLexer._ATN, this); + } + + // @Override + public get grammarFileName(): string { return "CashScript.g4"; } + + // @Override + public get ruleNames(): string[] { return CashScriptLexer.ruleNames; } + + // @Override + public get serializedATN(): string { return CashScriptLexer._serializedATN; } + + // @Override + public get channelNames(): string[] { return CashScriptLexer.channelNames; } + + // @Override + public get modeNames(): string[] { return CashScriptLexer.modeNames; } + + private static readonly _serializedATNSegments: number = 2; + private static readonly _serializedATNSegment0: string = + "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x02<\u027C\b\x01" + + "\x04\x02\t\x02\x04\x03\t\x03\x04\x04\t\x04\x04\x05\t\x05\x04\x06\t\x06" + + "\x04\x07\t\x07\x04\b\t\b\x04\t\t\t\x04\n\t\n\x04\v\t\v\x04\f\t\f\x04\r" + + "\t\r\x04\x0E\t\x0E\x04\x0F\t\x0F\x04\x10\t\x10\x04\x11\t\x11\x04\x12\t" + + "\x12\x04\x13\t\x13\x04\x14\t\x14\x04\x15\t\x15\x04\x16\t\x16\x04\x17\t" + + "\x17\x04\x18\t\x18\x04\x19\t\x19\x04\x1A\t\x1A\x04\x1B\t\x1B\x04\x1C\t" + + "\x1C\x04\x1D\t\x1D\x04\x1E\t\x1E\x04\x1F\t\x1F\x04 \t \x04!\t!\x04\"\t" + + "\"\x04#\t#\x04$\t$\x04%\t%\x04&\t&\x04\'\t\'\x04(\t(\x04)\t)\x04*\t*\x04" + + "+\t+\x04,\t,\x04-\t-\x04.\t.\x04/\t/\x040\t0\x041\t1\x042\t2\x043\t3\x04" + + "4\t4\x045\t5\x046\t6\x047\t7\x048\t8\x049\t9\x04:\t:\x04;\t;\x03\x02\x03" + + "\x02\x03\x02\x03\x02\x03\x02\x03\x02\x03\x02\x03\x03\x03\x03\x03\x04\x03" + + "\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03" + + "\x04\x03\x05\x03\x05\x03\x06\x03\x06\x03\x07\x03\x07\x03\x07\x03\b\x03" + + "\b\x03\t\x03\t\x03\n\x03\n\x03\n\x03\v\x03\v\x03\f\x03\f\x03\f\x03\f\x03" + + "\f\x03\f\x03\f\x03\f\x03\f\x03\r\x03\r\x03\x0E\x03\x0E\x03\x0F\x03\x0F" + + "\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x10\x03\x10" + + "\x03\x11\x03\x11\x03\x12\x03\x12\x03\x13\x03\x13\x03\x13\x03\x13\x03\x13" + + "\x03\x13\x03\x13\x03\x13\x03\x14\x03\x14\x03\x14\x03\x15\x03\x15\x03\x15" + + "\x03\x15\x03\x15\x03\x16\x03\x16\x03\x16\x03\x16\x03\x17\x03\x17\x03\x18" + + "\x03\x18\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19" + + "\x03\x19\x03\x19\x03\x19\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A" + + "\x03\x1A\x03\x1A\x03\x1B\x03\x1B\x03\x1C\x03\x1C\x03\x1D\x03\x1D\x03\x1D" + + "\x03\x1D\x03\x1D\x03\x1D\x03\x1D\x03\x1E\x03\x1E\x03\x1F\x03\x1F\x03 " + + "\x03 \x03!\x03!\x03!\x03\"\x03\"\x03\"\x03#\x03#\x03$\x03$\x03%\x03%\x03" + + "%\x03&\x03&\x03&\x03\'\x03\'\x03\'\x03\'\x03(\x03(\x03(\x03(\x03(\x03" + + ")\x03)\x03)\x03)\x03)\x03)\x03)\x03*\x03*\x03*\x03*\x03*\x03*\x03*\x03" + + "+\x03+\x03+\x03+\x03,\x03,\x03,\x03,\x03,\x03,\x03,\x03,\x03-\x06-\u0128" + + "\n-\r-\x0E-\u0129\x03-\x03-\x06-\u012E\n-\r-\x0E-\u012F\x03-\x03-\x06" + + "-\u0134\n-\r-\x0E-\u0135\x03.\x03.\x03.\x03.\x03.\x03.\x03.\x03.\x03." + + "\x05.\u0141\n.\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/" + + "\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03" + + "/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03" + + "/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03" + + "/\x03/\x03/\x03/\x03/\x05/\u017C\n/\x030\x050\u017F\n0\x030\x060\u0182" + + "\n0\r0\x0E0\u0183\x030\x030\x060\u0188\n0\r0\x0E0\u0189\x050\u018C\n0" + + "\x031\x031\x031\x031\x031\x031\x031\x051\u0195\n1\x032\x032\x072\u0199" + + "\n2\f2\x0E2\u019C\v2\x033\x033\x033\x033\x073\u01A2\n3\f3\x0E3\u01A5\v" + + "3\x033\x033\x033\x033\x033\x073\u01AC\n3\f3\x0E3\u01AF\v3\x033\x053\u01B2" + + "\n3\x034\x034\x034\x034\x034\x034\x034\x034\x034\x035\x035\x035\x075\u01C0" + + "\n5\f5\x0E5\u01C3\v5\x036\x036\x036\x036\x036\x036\x036\x036\x036\x03" + + "6\x036\x036\x036\x056\u01D2\n6\x037\x037\x037\x037\x037\x037\x037\x03" + + "7\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x03" + + "7\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x03" + + "7\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x03" + + "7\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x03" + + "7\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x03" + + "7\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x03" + + "7\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x03" + + "7\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x03" + + "7\x037\x037\x037\x037\x037\x037\x037\x037\x057\u0254\n7\x038\x038\x07" + + "8\u0258\n8\f8\x0E8\u025B\v8\x039\x069\u025E\n9\r9\x0E9\u025F\x039\x03" + + "9\x03:\x03:\x03:\x03:\x07:\u0268\n:\f:\x0E:\u026B\v:\x03:\x03:\x03:\x03" + + ":\x03:\x03;\x03;\x03;\x03;\x07;\u0276\n;\f;\x0E;\u0279\v;\x03;\x03;\x05" + + "\u01A3\u01AD\u0269\x02\x02<\x03\x02\x03\x05\x02\x04\x07\x02\x05\t\x02" + + "\x06\v\x02\x07\r\x02\b\x0F\x02\t\x11\x02\n\x13\x02\v\x15\x02\f\x17\x02" + + "\r\x19\x02\x0E\x1B\x02\x0F\x1D\x02\x10\x1F\x02\x11!\x02\x12#\x02\x13%" + + "\x02\x14\'\x02\x15)\x02\x16+\x02\x17-\x02\x18/\x02\x191\x02\x1A3\x02\x1B" + + "5\x02\x1C7\x02\x1D9\x02\x1E;\x02\x1F=\x02 ?\x02!A\x02\"C\x02#E\x02$G\x02" + + "%I\x02&K\x02\'M\x02(O\x02)Q\x02*S\x02+U\x02,W\x02-Y\x02.[\x02/]\x020_" + + "\x021a\x022c\x023e\x024g\x025i\x026k\x027m\x028o\x029q\x02:s\x02;u\x02" + + "<\x03\x02\x0E\x03\x022;\x03\x02//\x04\x02GGgg\x03\x023;\x05\x02\f\f\x0F" + + "\x0F$$\x05\x02\f\f\x0F\x0F))\x04\x02ZZzz\x05\x022;CHch\x04\x02C\\c|\x06" + + "\x022;C\\aac|\x05\x02\v\f\x0E\x0F\"\"\x04\x02\f\f\x0F\x0F\x02\u02A3\x02" + + "\x03\x03\x02\x02\x02\x02\x05\x03\x02\x02\x02\x02\x07\x03\x02\x02\x02\x02" + + "\t\x03\x02\x02\x02\x02\v\x03\x02\x02\x02\x02\r\x03\x02\x02\x02\x02\x0F" + + "\x03\x02\x02\x02\x02\x11\x03\x02\x02\x02\x02\x13\x03\x02\x02\x02\x02\x15" + + "\x03\x02\x02\x02\x02\x17\x03\x02\x02\x02\x02\x19\x03\x02\x02\x02\x02\x1B" + + "\x03\x02\x02\x02\x02\x1D\x03\x02\x02\x02\x02\x1F\x03\x02\x02\x02\x02!" + + "\x03\x02\x02\x02\x02#\x03\x02\x02\x02\x02%\x03\x02\x02\x02\x02\'\x03\x02" + + "\x02\x02\x02)\x03\x02\x02\x02\x02+\x03\x02\x02\x02\x02-\x03\x02\x02\x02" + + "\x02/\x03\x02\x02\x02\x021\x03\x02\x02\x02\x023\x03\x02\x02\x02\x025\x03" + + "\x02\x02\x02\x027\x03\x02\x02\x02\x029\x03\x02\x02\x02\x02;\x03\x02\x02" + + "\x02\x02=\x03\x02\x02\x02\x02?\x03\x02\x02\x02\x02A\x03\x02\x02\x02\x02" + + "C\x03\x02\x02\x02\x02E\x03\x02\x02\x02\x02G\x03\x02\x02\x02\x02I\x03\x02" + + "\x02\x02\x02K\x03\x02\x02\x02\x02M\x03\x02\x02\x02\x02O\x03\x02\x02\x02" + + "\x02Q\x03\x02\x02\x02\x02S\x03\x02\x02\x02\x02U\x03\x02\x02\x02\x02W\x03" + + "\x02\x02\x02\x02Y\x03\x02\x02\x02\x02[\x03\x02\x02\x02\x02]\x03\x02\x02" + + "\x02\x02_\x03\x02\x02\x02\x02a\x03\x02\x02\x02\x02c\x03\x02\x02\x02\x02" + + "e\x03\x02\x02\x02\x02g\x03\x02\x02\x02\x02i\x03\x02\x02\x02\x02k\x03\x02" + + "\x02\x02\x02m\x03\x02\x02\x02\x02o\x03\x02\x02\x02\x02q\x03\x02\x02\x02" + + "\x02s\x03\x02\x02\x02\x02u\x03\x02\x02\x02\x03w\x03\x02\x02\x02\x05~\x03" + + "\x02\x02\x02\x07\x80\x03\x02\x02\x02\t\x8B\x03\x02\x02\x02\v\x8D\x03\x02" + + "\x02\x02\r\x8F\x03\x02\x02\x02\x0F\x92\x03\x02\x02\x02\x11\x94\x03\x02" + + "\x02\x02\x13\x96\x03\x02\x02\x02\x15\x99\x03\x02\x02\x02\x17\x9B\x03\x02" + + "\x02\x02\x19\xA4\x03\x02\x02\x02\x1B\xA6\x03\x02\x02\x02\x1D\xA8\x03\x02" + + "\x02\x02\x1F\xB1\x03\x02\x02\x02!\xB3\x03\x02\x02\x02#\xB5\x03\x02\x02" + + "\x02%\xB7\x03\x02\x02\x02\'\xBF\x03\x02\x02\x02)\xC2\x03\x02\x02\x02+" + + "\xC7\x03\x02\x02\x02-\xCB\x03\x02\x02\x02/\xCD\x03\x02\x02\x021\xCF\x03" + + "\x02\x02\x023\xDA\x03\x02\x02\x025\xE2\x03\x02\x02\x027\xE4\x03\x02\x02" + + "\x029\xE6\x03\x02\x02\x02;\xED\x03\x02\x02\x02=\xEF\x03\x02\x02\x02?\xF1" + + "\x03\x02\x02\x02A\xF3\x03\x02\x02\x02C\xF6\x03\x02\x02\x02E\xF9\x03\x02" + + "\x02\x02G\xFB\x03\x02\x02\x02I\xFD\x03\x02\x02\x02K\u0100\x03\x02\x02" + + "\x02M\u0103\x03\x02\x02\x02O\u0107\x03\x02\x02\x02Q\u010C\x03\x02\x02" + + "\x02S\u0113\x03\x02\x02\x02U\u011A\x03\x02\x02\x02W\u011E\x03\x02\x02" + + "\x02Y\u0127\x03\x02\x02\x02[\u0140\x03\x02\x02\x02]\u017B\x03\x02\x02" + + "\x02_\u017E\x03\x02\x02\x02a\u018D\x03\x02\x02\x02c\u0196\x03\x02\x02" + + "\x02e\u01B1\x03\x02\x02\x02g\u01B3\x03\x02\x02\x02i\u01BC\x03\x02\x02" + + "\x02k\u01D1\x03\x02\x02\x02m\u0253\x03\x02\x02\x02o\u0255\x03\x02\x02" + + "\x02q\u025D\x03\x02\x02\x02s\u0263\x03\x02\x02\x02u\u0271\x03\x02\x02" + + "\x02wx\x07r\x02\x02xy\x07t\x02\x02yz\x07c\x02\x02z{\x07i\x02\x02{|\x07" + + "o\x02\x02|}\x07c\x02\x02}\x04\x03\x02\x02\x02~\x7F\x07=\x02\x02\x7F\x06" + + "\x03\x02\x02\x02\x80\x81\x07e\x02\x02\x81\x82\x07c\x02\x02\x82\x83\x07" + + "u\x02\x02\x83\x84\x07j\x02\x02\x84\x85\x07u\x02\x02\x85\x86\x07e\x02\x02" + + "\x86\x87\x07t\x02\x02\x87\x88\x07k\x02\x02\x88\x89\x07r\x02\x02\x89\x8A" + + "\x07v\x02\x02\x8A\b\x03\x02\x02\x02\x8B\x8C\x07`\x02\x02\x8C\n\x03\x02" + + "\x02\x02\x8D\x8E\x07\x80\x02\x02\x8E\f\x03\x02\x02\x02\x8F\x90\x07@\x02" + + "\x02\x90\x91\x07?\x02\x02\x91\x0E\x03\x02\x02\x02\x92\x93\x07@\x02\x02" + + "\x93\x10\x03\x02\x02\x02\x94\x95\x07>\x02\x02\x95\x12\x03\x02\x02\x02" + + "\x96\x97\x07>\x02\x02\x97\x98\x07?\x02\x02\x98\x14\x03\x02\x02\x02\x99" + + "\x9A\x07?\x02\x02\x9A\x16\x03\x02\x02\x02\x9B\x9C\x07e\x02\x02\x9C\x9D" + + "\x07q\x02\x02\x9D\x9E\x07p\x02\x02\x9E\x9F\x07v\x02\x02\x9F\xA0\x07t\x02" + + "\x02\xA0\xA1\x07c\x02\x02\xA1\xA2\x07e\x02\x02\xA2\xA3\x07v\x02\x02\xA3" + + "\x18\x03\x02\x02\x02\xA4\xA5\x07}\x02\x02\xA5\x1A\x03\x02\x02\x02\xA6" + + "\xA7\x07\x7F\x02\x02\xA7\x1C\x03\x02\x02\x02\xA8\xA9\x07h\x02\x02\xA9" + + "\xAA\x07w\x02\x02\xAA\xAB\x07p\x02\x02\xAB\xAC\x07e\x02\x02\xAC\xAD\x07" + + "v\x02\x02\xAD\xAE\x07k\x02\x02\xAE\xAF\x07q\x02\x02\xAF\xB0\x07p\x02\x02" + + "\xB0\x1E\x03\x02\x02\x02\xB1\xB2\x07*\x02\x02\xB2 \x03\x02\x02\x02\xB3" + + "\xB4\x07.\x02\x02\xB4\"\x03\x02\x02\x02\xB5\xB6\x07+\x02\x02\xB6$\x03" + + "\x02\x02\x02\xB7\xB8\x07t\x02\x02\xB8\xB9\x07g\x02\x02\xB9\xBA\x07s\x02" + + "\x02\xBA\xBB\x07w\x02\x02\xBB\xBC\x07k\x02\x02\xBC\xBD\x07t\x02\x02\xBD" + + "\xBE\x07g\x02\x02\xBE&\x03\x02\x02\x02\xBF\xC0\x07k\x02\x02\xC0\xC1\x07" + + "h\x02\x02\xC1(\x03\x02\x02\x02\xC2\xC3\x07g\x02\x02\xC3\xC4\x07n\x02\x02" + + "\xC4\xC5\x07u\x02\x02\xC5\xC6\x07g\x02\x02\xC6*\x03\x02\x02\x02\xC7\xC8" + + "\x07p\x02\x02\xC8\xC9\x07g\x02\x02\xC9\xCA\x07y\x02\x02\xCA,\x03\x02\x02" + + "\x02\xCB\xCC\x07]\x02\x02\xCC.\x03\x02\x02\x02\xCD\xCE\x07_\x02\x02\xCE" + + "0\x03\x02\x02\x02\xCF\xD0\x070\x02\x02\xD0\xD1\x07t\x02\x02\xD1\xD2\x07" + + "g\x02\x02\xD2\xD3\x07x\x02\x02\xD3\xD4\x07g\x02\x02\xD4\xD5\x07t\x02\x02" + + "\xD5\xD6\x07u\x02\x02\xD6\xD7\x07g\x02\x02\xD7\xD8\x07*\x02\x02\xD8\xD9" + + "\x07+\x02\x02\xD92\x03\x02\x02\x02\xDA\xDB\x070\x02\x02\xDB\xDC\x07n\x02" + + "\x02\xDC\xDD\x07g\x02\x02\xDD\xDE\x07p\x02\x02\xDE\xDF\x07i\x02\x02\xDF" + + "\xE0\x07v\x02\x02\xE0\xE1\x07j\x02\x02\xE14\x03\x02\x02\x02\xE2\xE3\x07" + + "#\x02\x02\xE36\x03\x02\x02\x02\xE4\xE5\x07/\x02\x02\xE58\x03\x02\x02\x02" + + "\xE6\xE7\x070\x02\x02\xE7\xE8\x07u\x02\x02\xE8\xE9\x07r\x02\x02\xE9\xEA" + + "\x07n\x02\x02\xEA\xEB\x07k\x02\x02\xEB\xEC\x07v\x02\x02\xEC:\x03\x02\x02" + + "\x02\xED\xEE\x071\x02\x02\xEE<\x03\x02\x02\x02\xEF\xF0\x07\'\x02\x02\xF0" + + ">\x03\x02\x02\x02\xF1\xF2\x07-\x02\x02\xF2@\x03\x02\x02\x02\xF3\xF4\x07" + + "?\x02\x02\xF4\xF5\x07?\x02\x02\xF5B\x03\x02\x02\x02\xF6\xF7\x07#\x02\x02" + + "\xF7\xF8\x07?\x02\x02\xF8D\x03\x02\x02\x02\xF9\xFA\x07(\x02\x02\xFAF\x03" + + "\x02\x02\x02\xFB\xFC\x07~\x02\x02\xFCH\x03\x02\x02\x02\xFD\xFE\x07(\x02" + + "\x02\xFE\xFF\x07(\x02\x02\xFFJ\x03\x02\x02\x02\u0100\u0101\x07~\x02\x02" + + "\u0101\u0102\x07~\x02\x02\u0102L\x03\x02\x02\x02\u0103\u0104\x07k\x02" + + "\x02\u0104\u0105\x07p\x02\x02\u0105\u0106\x07v\x02\x02\u0106N\x03\x02" + + "\x02\x02\u0107\u0108\x07d\x02\x02\u0108\u0109\x07q\x02\x02\u0109\u010A" + + "\x07q\x02\x02\u010A\u010B\x07n\x02\x02\u010BP\x03\x02\x02\x02\u010C\u010D" + + "\x07u\x02\x02\u010D\u010E\x07v\x02\x02\u010E\u010F\x07t\x02\x02\u010F" + + "\u0110\x07k\x02\x02\u0110\u0111\x07p\x02\x02\u0111\u0112\x07i\x02\x02" + + "\u0112R\x03\x02\x02\x02\u0113\u0114\x07r\x02\x02\u0114\u0115\x07w\x02" + + "\x02\u0115\u0116\x07d\x02\x02\u0116\u0117\x07m\x02\x02\u0117\u0118\x07" + + "g\x02\x02\u0118\u0119\x07{\x02\x02\u0119T\x03\x02\x02\x02\u011A\u011B" + + "\x07u\x02\x02\u011B\u011C\x07k\x02\x02\u011C\u011D\x07i\x02\x02\u011D" + + "V\x03\x02\x02\x02\u011E\u011F\x07f\x02\x02\u011F\u0120\x07c\x02\x02\u0120" + + "\u0121\x07v\x02\x02\u0121\u0122\x07c\x02\x02\u0122\u0123\x07u\x02\x02" + + "\u0123\u0124\x07k\x02\x02\u0124\u0125\x07i\x02\x02\u0125X\x03\x02\x02" + + "\x02\u0126\u0128\t\x02\x02\x02\u0127\u0126\x03\x02\x02\x02\u0128\u0129" + + "\x03\x02\x02\x02\u0129\u0127\x03\x02\x02\x02\u0129\u012A\x03\x02\x02\x02" + + "\u012A\u012B\x03\x02\x02\x02\u012B\u012D\x070\x02\x02\u012C\u012E\t\x02" + + "\x02\x02\u012D\u012C\x03\x02\x02\x02\u012E\u012F\x03\x02\x02\x02\u012F" + + "\u012D\x03\x02\x02\x02\u012F\u0130\x03\x02\x02\x02\u0130\u0131\x03\x02" + + "\x02\x02\u0131\u0133\x070\x02\x02\u0132\u0134\t\x02\x02\x02\u0133\u0132" + + "\x03\x02\x02\x02\u0134\u0135\x03\x02\x02\x02\u0135\u0133\x03\x02\x02\x02" + + "\u0135\u0136\x03\x02\x02\x02\u0136Z\x03\x02\x02\x02\u0137\u0138\x07v\x02" + + "\x02\u0138\u0139\x07t\x02\x02\u0139\u013A\x07w\x02\x02\u013A\u0141\x07" + + "g\x02\x02\u013B\u013C\x07h\x02\x02\u013C\u013D\x07c\x02\x02\u013D\u013E" + + "\x07n\x02\x02\u013E\u013F\x07u\x02\x02\u013F\u0141\x07g\x02\x02\u0140" + + "\u0137\x03\x02\x02\x02\u0140\u013B\x03\x02\x02\x02\u0141\\\x03\x02\x02" + + "\x02\u0142\u0143\x07u\x02\x02\u0143\u0144\x07c\x02\x02\u0144\u0145\x07" + + "v\x02\x02\u0145\u0146\x07q\x02\x02\u0146\u0147\x07u\x02\x02\u0147\u0148" + + "\x07j\x02\x02\u0148\u0149\x07k\x02\x02\u0149\u017C\x07u\x02\x02\u014A" + + "\u014B\x07u\x02\x02\u014B\u014C\x07c\x02\x02\u014C\u014D\x07v\x02\x02" + + "\u014D\u017C\x07u\x02\x02\u014E\u014F\x07h\x02\x02\u014F\u0150\x07k\x02" + + "\x02\u0150\u0151\x07p\x02\x02\u0151\u0152\x07p\x02\x02\u0152\u0153\x07" + + "g\x02\x02\u0153\u017C\x07{\x02\x02\u0154\u0155\x07d\x02\x02\u0155\u0156" + + "\x07k\x02\x02\u0156\u0157\x07v\x02\x02\u0157\u017C\x07u\x02\x02\u0158" + + "\u0159\x07d\x02\x02\u0159\u015A\x07k\x02\x02\u015A\u015B\x07v\x02\x02" + + "\u015B\u015C\x07e\x02\x02\u015C\u015D\x07q\x02\x02\u015D\u015E\x07k\x02" + + "\x02\u015E\u017C\x07p\x02\x02\u015F\u0160\x07u\x02\x02\u0160\u0161\x07" + + "g\x02\x02\u0161\u0162\x07e\x02\x02\u0162\u0163\x07q\x02\x02\u0163\u0164" + + "\x07p\x02\x02\u0164\u0165\x07f\x02\x02\u0165\u017C\x07u\x02\x02\u0166" + + "\u0167\x07o\x02\x02\u0167\u0168\x07k\x02\x02\u0168\u0169\x07p\x02\x02" + + "\u0169\u016A\x07w\x02\x02\u016A\u016B\x07v\x02\x02\u016B\u016C\x07g\x02" + + "\x02\u016C\u017C\x07u\x02\x02\u016D\u016E\x07j\x02\x02\u016E\u016F\x07" + + "q\x02\x02\u016F\u0170\x07w\x02\x02\u0170\u0171\x07t\x02\x02\u0171\u017C" + + "\x07u\x02\x02\u0172\u0173\x07f\x02\x02\u0173\u0174\x07c\x02\x02\u0174" + + "\u0175\x07{\x02\x02\u0175\u017C\x07u\x02\x02\u0176\u0177\x07y\x02\x02" + + "\u0177\u0178\x07g\x02\x02\u0178\u0179\x07g\x02\x02\u0179\u017A\x07m\x02" + + "\x02\u017A\u017C\x07u\x02\x02\u017B\u0142\x03\x02\x02\x02\u017B\u014A" + + "\x03\x02\x02\x02\u017B\u014E\x03\x02\x02\x02\u017B\u0154\x03\x02\x02\x02" + + "\u017B\u0158\x03\x02\x02\x02\u017B\u015F\x03\x02\x02\x02\u017B\u0166\x03" + + "\x02\x02\x02\u017B\u016D\x03\x02\x02\x02\u017B\u0172\x03\x02\x02\x02\u017B" + + "\u0176\x03\x02\x02\x02\u017C^\x03\x02\x02\x02\u017D\u017F\t\x03\x02\x02" + + "\u017E\u017D\x03\x02\x02\x02\u017E\u017F\x03\x02\x02\x02\u017F\u0181\x03" + + "\x02\x02\x02\u0180\u0182\t\x02\x02\x02\u0181\u0180\x03\x02\x02\x02\u0182" + + "\u0183\x03\x02\x02\x02\u0183\u0181\x03\x02\x02\x02\u0183\u0184\x03\x02" + + "\x02\x02\u0184\u018B\x03\x02\x02\x02\u0185\u0187\t\x04\x02\x02\u0186\u0188" + + "\t\x02\x02\x02\u0187\u0186\x03\x02\x02\x02\u0188\u0189\x03\x02\x02\x02" + + "\u0189\u0187\x03\x02\x02\x02\u0189\u018A\x03\x02\x02\x02\u018A\u018C\x03" + + "\x02\x02\x02\u018B\u0185\x03\x02\x02\x02\u018B\u018C\x03\x02\x02\x02\u018C" + + "`\x03\x02\x02\x02\u018D\u018E\x07d\x02\x02\u018E\u018F\x07{\x02\x02\u018F" + + "\u0190\x07v\x02\x02\u0190\u0191\x07g\x02\x02\u0191\u0192\x07u\x02\x02" + + "\u0192\u0194\x03\x02\x02\x02\u0193\u0195\x05c2\x02\u0194\u0193\x03\x02" + + "\x02\x02\u0194\u0195\x03\x02\x02\x02\u0195b\x03\x02\x02\x02\u0196\u019A" + + "\t\x05\x02\x02\u0197\u0199\t\x02\x02\x02\u0198\u0197\x03\x02\x02\x02\u0199" + + "\u019C\x03\x02\x02\x02\u019A\u0198\x03\x02\x02\x02\u019A\u019B\x03\x02" + + "\x02\x02\u019Bd\x03\x02\x02\x02\u019C\u019A\x03\x02\x02\x02\u019D\u01A3" + + "\x07$\x02\x02\u019E\u019F\x07^\x02\x02\u019F\u01A2\x07$\x02\x02\u01A0" + + "\u01A2\n\x06\x02\x02\u01A1\u019E\x03\x02\x02\x02\u01A1\u01A0\x03\x02\x02" + + "\x02\u01A2\u01A5\x03\x02\x02\x02\u01A3\u01A4\x03\x02\x02\x02\u01A3\u01A1" + + "\x03\x02\x02\x02\u01A4\u01A6\x03\x02\x02\x02\u01A5\u01A3\x03\x02\x02\x02" + + "\u01A6\u01B2\x07$\x02\x02\u01A7\u01AD\x07)\x02\x02\u01A8\u01A9\x07^\x02" + + "\x02\u01A9\u01AC\x07)\x02\x02\u01AA\u01AC\n\x07\x02\x02\u01AB\u01A8\x03" + + "\x02\x02\x02\u01AB\u01AA\x03\x02\x02\x02\u01AC\u01AF\x03\x02\x02\x02\u01AD" + + "\u01AE\x03\x02\x02\x02\u01AD\u01AB\x03\x02\x02\x02\u01AE\u01B0\x03\x02" + + "\x02\x02\u01AF\u01AD\x03\x02\x02\x02\u01B0\u01B2\x07)\x02\x02\u01B1\u019D" + + "\x03\x02\x02\x02\u01B1\u01A7\x03\x02\x02\x02\u01B2f\x03\x02\x02\x02\u01B3" + + "\u01B4\x07f\x02\x02\u01B4\u01B5\x07c\x02\x02\u01B5\u01B6\x07v\x02\x02" + + "\u01B6\u01B7\x07g\x02\x02\u01B7\u01B8\x07*\x02\x02\u01B8\u01B9\x03\x02" + + "\x02\x02\u01B9\u01BA\x05e3\x02\u01BA\u01BB\x07+\x02\x02\u01BBh\x03\x02" + + "\x02\x02\u01BC\u01BD\x072\x02\x02\u01BD\u01C1\t\b\x02\x02\u01BE\u01C0" + + "\t\t\x02\x02\u01BF\u01BE\x03\x02\x02\x02\u01C0\u01C3\x03\x02\x02\x02\u01C1" + + "\u01BF\x03\x02\x02\x02\u01C1\u01C2\x03\x02\x02\x02\u01C2j\x03\x02\x02" + + "\x02\u01C3\u01C1\x03\x02\x02\x02\u01C4\u01C5\x07v\x02\x02\u01C5\u01C6" + + "\x07z\x02\x02\u01C6\u01C7\x070\x02\x02\u01C7\u01C8\x07c\x02\x02\u01C8" + + "\u01C9\x07i\x02\x02\u01C9\u01D2\x07g\x02\x02\u01CA\u01CB\x07v\x02\x02" + + "\u01CB\u01CC\x07z\x02\x02\u01CC\u01CD\x070\x02\x02\u01CD\u01CE\x07v\x02" + + "\x02\u01CE\u01CF\x07k\x02\x02\u01CF\u01D0\x07o\x02\x02\u01D0\u01D2\x07" + + "g\x02\x02\u01D1\u01C4\x03\x02\x02\x02\u01D1\u01CA\x03\x02\x02\x02\u01D2" + + "l\x03\x02\x02\x02\u01D3\u01D4\x07v\x02\x02\u01D4\u01D5\x07z\x02\x02\u01D5" + + "\u01D6\x070\x02\x02\u01D6\u01D7\x07x\x02\x02\u01D7\u01D8\x07g\x02\x02" + + "\u01D8\u01D9\x07t\x02\x02\u01D9\u01DA\x07u\x02\x02\u01DA\u01DB\x07k\x02" + + "\x02\u01DB\u01DC\x07q\x02\x02\u01DC\u0254\x07p\x02\x02\u01DD\u01DE\x07" + + "v\x02\x02\u01DE\u01DF\x07z\x02\x02\u01DF\u01E0\x070\x02\x02\u01E0\u01E1" + + "\x07j\x02\x02\u01E1\u01E2\x07c\x02\x02\u01E2\u01E3\x07u\x02\x02\u01E3" + + "\u01E4\x07j\x02\x02\u01E4\u01E5\x07R\x02\x02\u01E5\u01E6\x07t\x02\x02" + + "\u01E6\u01E7\x07g\x02\x02\u01E7\u01E8\x07x\x02\x02\u01E8\u01E9\x07q\x02" + + "\x02\u01E9\u01EA\x07w\x02\x02\u01EA\u01EB\x07v\x02\x02\u01EB\u0254\x07" + + "u\x02\x02\u01EC\u01ED\x07v\x02\x02\u01ED\u01EE\x07z\x02\x02\u01EE\u01EF" + + "\x070\x02\x02\u01EF\u01F0\x07j\x02\x02\u01F0\u01F1\x07c\x02\x02\u01F1" + + "\u01F2\x07u\x02\x02\u01F2\u01F3\x07j\x02\x02\u01F3\u01F4\x07U\x02\x02" + + "\u01F4\u01F5\x07g\x02\x02\u01F5\u01F6\x07s\x02\x02\u01F6\u01F7\x07w\x02" + + "\x02\u01F7\u01F8\x07g\x02\x02\u01F8\u01F9\x07p\x02\x02\u01F9\u01FA\x07" + + "e\x02\x02\u01FA\u0254\x07g\x02\x02\u01FB\u01FC\x07v\x02\x02\u01FC\u01FD" + + "\x07z\x02\x02\u01FD\u01FE\x070\x02\x02\u01FE\u01FF\x07q\x02\x02\u01FF" + + "\u0200\x07w\x02\x02\u0200\u0201\x07v\x02\x02\u0201\u0202\x07r\x02\x02" + + "\u0202\u0203\x07q\x02\x02\u0203\u0204\x07k\x02\x02\u0204\u0205\x07p\x02" + + "\x02\u0205\u0254\x07v\x02\x02\u0206\u0207\x07v\x02\x02\u0207\u0208\x07" + + "z\x02\x02\u0208\u0209\x070\x02\x02\u0209\u020A\x07d\x02\x02\u020A\u020B" + + "\x07{\x02\x02\u020B\u020C\x07v\x02\x02\u020C\u020D\x07g\x02\x02\u020D" + + "\u020E\x07e\x02\x02\u020E\u020F\x07q\x02\x02\u020F\u0210\x07f\x02\x02" + + "\u0210\u0254\x07g\x02\x02\u0211\u0212\x07v\x02\x02\u0212\u0213\x07z\x02" + + "\x02\u0213\u0214\x070\x02\x02\u0214\u0215\x07x\x02\x02\u0215\u0216\x07" + + "c\x02\x02\u0216\u0217\x07n\x02\x02\u0217\u0218\x07w\x02\x02\u0218\u0254" + + "\x07g\x02\x02\u0219\u021A\x07v\x02\x02\u021A\u021B\x07z\x02\x02\u021B" + + "\u021C\x070\x02\x02\u021C\u021D\x07u\x02\x02\u021D\u021E\x07g\x02\x02" + + "\u021E\u021F\x07s\x02\x02\u021F\u0220\x07w\x02\x02\u0220\u0221\x07g\x02" + + "\x02\u0221\u0222\x07p\x02\x02\u0222\u0223\x07e\x02\x02\u0223\u0254"; + private static readonly _serializedATNSegment1: string = + "\x07g\x02\x02\u0224\u0225\x07v\x02\x02\u0225\u0226\x07z\x02\x02\u0226" + + "\u0227\x070\x02\x02\u0227\u0228\x07j\x02\x02\u0228\u0229\x07c\x02\x02" + + "\u0229\u022A\x07u\x02\x02\u022A\u022B\x07j\x02\x02\u022B\u022C\x07Q\x02" + + "\x02\u022C\u022D\x07w\x02\x02\u022D\u022E\x07v\x02\x02\u022E\u022F\x07" + + "r\x02\x02\u022F\u0230\x07w\x02\x02\u0230\u0231\x07v\x02\x02\u0231\u0254" + + "\x07u\x02\x02\u0232\u0233\x07v\x02\x02\u0233\u0234\x07z\x02\x02\u0234" + + "\u0235\x070\x02\x02\u0235\u0236\x07n\x02\x02\u0236\u0237\x07q\x02\x02" + + "\u0237\u0238\x07e\x02\x02\u0238\u0239\x07m\x02\x02\u0239\u023A\x07v\x02" + + "\x02\u023A\u023B\x07k\x02\x02\u023B\u023C\x07o\x02\x02\u023C\u0254\x07" + + "g\x02\x02\u023D\u023E\x07v\x02\x02\u023E\u023F\x07z\x02\x02\u023F\u0240" + + "\x070\x02\x02\u0240\u0241\x07j\x02\x02\u0241\u0242\x07c\x02\x02\u0242" + + "\u0243\x07u\x02\x02\u0243\u0244\x07j\x02\x02\u0244\u0245\x07v\x02\x02" + + "\u0245\u0246\x07{\x02\x02\u0246\u0247\x07r\x02\x02\u0247\u0254\x07g\x02" + + "\x02\u0248\u0249\x07v\x02\x02\u0249\u024A\x07z\x02\x02\u024A\u024B\x07" + + "0\x02\x02\u024B\u024C\x07r\x02\x02\u024C\u024D\x07t\x02\x02\u024D\u024E" + + "\x07g\x02\x02\u024E\u024F\x07k\x02\x02\u024F\u0250\x07o\x02\x02\u0250" + + "\u0251\x07c\x02\x02\u0251\u0252\x07i\x02\x02\u0252\u0254\x07g\x02\x02" + + "\u0253\u01D3\x03\x02\x02\x02\u0253\u01DD\x03\x02\x02\x02\u0253\u01EC\x03" + + "\x02\x02\x02\u0253\u01FB\x03\x02\x02\x02\u0253\u0206\x03\x02\x02\x02\u0253" + + "\u0211\x03\x02\x02\x02\u0253\u0219\x03\x02\x02\x02\u0253\u0224\x03\x02" + + "\x02\x02\u0253\u0232\x03\x02\x02\x02\u0253\u023D\x03\x02\x02\x02\u0253" + + "\u0248\x03\x02\x02\x02\u0254n\x03\x02\x02\x02\u0255\u0259\t\n\x02\x02" + + "\u0256\u0258\t\v\x02\x02\u0257\u0256\x03\x02\x02\x02\u0258\u025B\x03\x02" + + "\x02\x02\u0259\u0257\x03\x02\x02\x02\u0259\u025A\x03\x02\x02\x02\u025A" + + "p\x03\x02\x02\x02\u025B\u0259\x03\x02\x02\x02\u025C\u025E\t\f\x02\x02" + + "\u025D\u025C\x03\x02\x02\x02\u025E\u025F\x03\x02\x02\x02\u025F\u025D\x03" + + "\x02\x02\x02\u025F\u0260\x03\x02\x02\x02\u0260\u0261\x03\x02\x02\x02\u0261" + + "\u0262\b9\x02\x02\u0262r\x03\x02\x02\x02\u0263\u0264\x071\x02\x02\u0264" + + "\u0265\x07,\x02\x02\u0265\u0269\x03\x02\x02\x02\u0266\u0268\v\x02\x02" + + "\x02\u0267\u0266\x03\x02\x02\x02\u0268\u026B\x03\x02\x02\x02\u0269\u026A" + + "\x03\x02\x02\x02\u0269\u0267\x03\x02\x02\x02\u026A\u026C\x03\x02\x02\x02" + + "\u026B\u0269\x03\x02\x02\x02\u026C\u026D\x07,\x02\x02\u026D\u026E\x07" + + "1\x02\x02\u026E\u026F\x03\x02\x02\x02\u026F\u0270\b:\x03\x02\u0270t\x03" + + "\x02\x02\x02\u0271\u0272\x071\x02\x02\u0272\u0273\x071\x02\x02\u0273\u0277" + + "\x03\x02\x02\x02\u0274\u0276\n\r\x02\x02\u0275\u0274\x03\x02\x02\x02\u0276" + + "\u0279\x03\x02\x02\x02\u0277\u0275\x03\x02\x02\x02\u0277\u0278\x03\x02" + + "\x02\x02\u0278\u027A\x03\x02\x02\x02\u0279\u0277\x03\x02\x02\x02\u027A" + + "\u027B\b;\x03\x02\u027Bv\x03\x02\x02\x02\x1A\x02\u0129\u012F\u0135\u0140" + + "\u017B\u017E\u0183\u0189\u018B\u0194\u019A\u01A1\u01A3\u01AB\u01AD\u01B1" + + "\u01C1\u01D1\u0253\u0259\u025F\u0269\u0277\x04\b\x02\x02\x02\x03\x02"; + public static readonly _serializedATN: string = Utils.join( + [ + CashScriptLexer._serializedATNSegment0, + CashScriptLexer._serializedATNSegment1, + ], + "", + ); + public static __ATN: ATN; + public static get _ATN(): ATN { + if (!CashScriptLexer.__ATN) { + CashScriptLexer.__ATN = new ATNDeserializer().deserialize(Utils.toCharArray(CashScriptLexer._serializedATN)); + } + + return CashScriptLexer.__ATN; + } + +} + diff --git a/vscode-cashscript/src/CashscriptLinter/grammar/CashScriptListener.ts b/vscode-cashscript/src/CashscriptLinter/grammar/CashScriptListener.ts new file mode 100644 index 0000000..767505a --- /dev/null +++ b/vscode-cashscript/src/CashscriptLinter/grammar/CashScriptListener.ts @@ -0,0 +1,443 @@ +// Generated from grammar/CashScript.g4 by ANTLR 4.9.0-SNAPSHOT + + +import { ParseTreeListener } from "antlr4ts/tree/ParseTreeListener"; + +import { ParenthesisedContext } from "./CashScriptParser"; +import { CastContext } from "./CashScriptParser"; +import { FunctionCallExpressionContext } from "./CashScriptParser"; +import { InstantiationContext } from "./CashScriptParser"; +import { TupleIndexOpContext } from "./CashScriptParser"; +import { UnaryOpContext } from "./CashScriptParser"; +import { BinaryOpContext } from "./CashScriptParser"; +import { ArrayContext } from "./CashScriptParser"; +import { PreimageFieldContext } from "./CashScriptParser"; +import { IdentifierContext } from "./CashScriptParser"; +import { LiteralExpressionContext } from "./CashScriptParser"; +import { SourceFileContext } from "./CashScriptParser"; +import { PragmaDirectiveContext } from "./CashScriptParser"; +import { PragmaNameContext } from "./CashScriptParser"; +import { PragmaValueContext } from "./CashScriptParser"; +import { VersionConstraintContext } from "./CashScriptParser"; +import { VersionOperatorContext } from "./CashScriptParser"; +import { ContractDefinitionContext } from "./CashScriptParser"; +import { FunctionDefinitionContext } from "./CashScriptParser"; +import { ParameterListContext } from "./CashScriptParser"; +import { ParameterContext } from "./CashScriptParser"; +import { BlockContext } from "./CashScriptParser"; +import { StatementContext } from "./CashScriptParser"; +import { VariableDefinitionContext } from "./CashScriptParser"; +import { AssignStatementContext } from "./CashScriptParser"; +import { TimeOpStatementContext } from "./CashScriptParser"; +import { RequireStatementContext } from "./CashScriptParser"; +import { IfStatementContext } from "./CashScriptParser"; +import { FunctionCallContext } from "./CashScriptParser"; +import { ExpressionListContext } from "./CashScriptParser"; +import { ExpressionContext } from "./CashScriptParser"; +import { LiteralContext } from "./CashScriptParser"; +import { NumberLiteralContext } from "./CashScriptParser"; +import { TypeNameContext } from "./CashScriptParser"; + + +/** + * This interface defines a complete listener for a parse tree produced by + * `CashScriptParser`. + */ +export interface CashScriptListener extends ParseTreeListener { + /** + * Enter a parse tree produced by the `Parenthesised` + * labeled alternative in `CashScriptParser.expression`. + * @param ctx the parse tree + */ + enterParenthesised?: (ctx: ParenthesisedContext) => void; + /** + * Exit a parse tree produced by the `Parenthesised` + * labeled alternative in `CashScriptParser.expression`. + * @param ctx the parse tree + */ + exitParenthesised?: (ctx: ParenthesisedContext) => void; + + /** + * Enter a parse tree produced by the `Cast` + * labeled alternative in `CashScriptParser.expression`. + * @param ctx the parse tree + */ + enterCast?: (ctx: CastContext) => void; + /** + * Exit a parse tree produced by the `Cast` + * labeled alternative in `CashScriptParser.expression`. + * @param ctx the parse tree + */ + exitCast?: (ctx: CastContext) => void; + + /** + * Enter a parse tree produced by the `FunctionCallExpression` + * labeled alternative in `CashScriptParser.expression`. + * @param ctx the parse tree + */ + enterFunctionCallExpression?: (ctx: FunctionCallExpressionContext) => void; + /** + * Exit a parse tree produced by the `FunctionCallExpression` + * labeled alternative in `CashScriptParser.expression`. + * @param ctx the parse tree + */ + exitFunctionCallExpression?: (ctx: FunctionCallExpressionContext) => void; + + /** + * Enter a parse tree produced by the `Instantiation` + * labeled alternative in `CashScriptParser.expression`. + * @param ctx the parse tree + */ + enterInstantiation?: (ctx: InstantiationContext) => void; + /** + * Exit a parse tree produced by the `Instantiation` + * labeled alternative in `CashScriptParser.expression`. + * @param ctx the parse tree + */ + exitInstantiation?: (ctx: InstantiationContext) => void; + + /** + * Enter a parse tree produced by the `TupleIndexOp` + * labeled alternative in `CashScriptParser.expression`. + * @param ctx the parse tree + */ + enterTupleIndexOp?: (ctx: TupleIndexOpContext) => void; + /** + * Exit a parse tree produced by the `TupleIndexOp` + * labeled alternative in `CashScriptParser.expression`. + * @param ctx the parse tree + */ + exitTupleIndexOp?: (ctx: TupleIndexOpContext) => void; + + /** + * Enter a parse tree produced by the `UnaryOp` + * labeled alternative in `CashScriptParser.expression`. + * @param ctx the parse tree + */ + enterUnaryOp?: (ctx: UnaryOpContext) => void; + /** + * Exit a parse tree produced by the `UnaryOp` + * labeled alternative in `CashScriptParser.expression`. + * @param ctx the parse tree + */ + exitUnaryOp?: (ctx: UnaryOpContext) => void; + + /** + * Enter a parse tree produced by the `BinaryOp` + * labeled alternative in `CashScriptParser.expression`. + * @param ctx the parse tree + */ + enterBinaryOp?: (ctx: BinaryOpContext) => void; + /** + * Exit a parse tree produced by the `BinaryOp` + * labeled alternative in `CashScriptParser.expression`. + * @param ctx the parse tree + */ + exitBinaryOp?: (ctx: BinaryOpContext) => void; + + /** + * Enter a parse tree produced by the `Array` + * labeled alternative in `CashScriptParser.expression`. + * @param ctx the parse tree + */ + enterArray?: (ctx: ArrayContext) => void; + /** + * Exit a parse tree produced by the `Array` + * labeled alternative in `CashScriptParser.expression`. + * @param ctx the parse tree + */ + exitArray?: (ctx: ArrayContext) => void; + + /** + * Enter a parse tree produced by the `PreimageField` + * labeled alternative in `CashScriptParser.expression`. + * @param ctx the parse tree + */ + enterPreimageField?: (ctx: PreimageFieldContext) => void; + /** + * Exit a parse tree produced by the `PreimageField` + * labeled alternative in `CashScriptParser.expression`. + * @param ctx the parse tree + */ + exitPreimageField?: (ctx: PreimageFieldContext) => void; + + /** + * Enter a parse tree produced by the `Identifier` + * labeled alternative in `CashScriptParser.expression`. + * @param ctx the parse tree + */ + enterIdentifier?: (ctx: IdentifierContext) => void; + /** + * Exit a parse tree produced by the `Identifier` + * labeled alternative in `CashScriptParser.expression`. + * @param ctx the parse tree + */ + exitIdentifier?: (ctx: IdentifierContext) => void; + + /** + * Enter a parse tree produced by the `LiteralExpression` + * labeled alternative in `CashScriptParser.expression`. + * @param ctx the parse tree + */ + enterLiteralExpression?: (ctx: LiteralExpressionContext) => void; + /** + * Exit a parse tree produced by the `LiteralExpression` + * labeled alternative in `CashScriptParser.expression`. + * @param ctx the parse tree + */ + exitLiteralExpression?: (ctx: LiteralExpressionContext) => void; + + /** + * Enter a parse tree produced by `CashScriptParser.sourceFile`. + * @param ctx the parse tree + */ + enterSourceFile?: (ctx: SourceFileContext) => void; + /** + * Exit a parse tree produced by `CashScriptParser.sourceFile`. + * @param ctx the parse tree + */ + exitSourceFile?: (ctx: SourceFileContext) => void; + + /** + * Enter a parse tree produced by `CashScriptParser.pragmaDirective`. + * @param ctx the parse tree + */ + enterPragmaDirective?: (ctx: PragmaDirectiveContext) => void; + /** + * Exit a parse tree produced by `CashScriptParser.pragmaDirective`. + * @param ctx the parse tree + */ + exitPragmaDirective?: (ctx: PragmaDirectiveContext) => void; + + /** + * Enter a parse tree produced by `CashScriptParser.pragmaName`. + * @param ctx the parse tree + */ + enterPragmaName?: (ctx: PragmaNameContext) => void; + /** + * Exit a parse tree produced by `CashScriptParser.pragmaName`. + * @param ctx the parse tree + */ + exitPragmaName?: (ctx: PragmaNameContext) => void; + + /** + * Enter a parse tree produced by `CashScriptParser.pragmaValue`. + * @param ctx the parse tree + */ + enterPragmaValue?: (ctx: PragmaValueContext) => void; + /** + * Exit a parse tree produced by `CashScriptParser.pragmaValue`. + * @param ctx the parse tree + */ + exitPragmaValue?: (ctx: PragmaValueContext) => void; + + /** + * Enter a parse tree produced by `CashScriptParser.versionConstraint`. + * @param ctx the parse tree + */ + enterVersionConstraint?: (ctx: VersionConstraintContext) => void; + /** + * Exit a parse tree produced by `CashScriptParser.versionConstraint`. + * @param ctx the parse tree + */ + exitVersionConstraint?: (ctx: VersionConstraintContext) => void; + + /** + * Enter a parse tree produced by `CashScriptParser.versionOperator`. + * @param ctx the parse tree + */ + enterVersionOperator?: (ctx: VersionOperatorContext) => void; + /** + * Exit a parse tree produced by `CashScriptParser.versionOperator`. + * @param ctx the parse tree + */ + exitVersionOperator?: (ctx: VersionOperatorContext) => void; + + /** + * Enter a parse tree produced by `CashScriptParser.contractDefinition`. + * @param ctx the parse tree + */ + enterContractDefinition?: (ctx: ContractDefinitionContext) => void; + /** + * Exit a parse tree produced by `CashScriptParser.contractDefinition`. + * @param ctx the parse tree + */ + exitContractDefinition?: (ctx: ContractDefinitionContext) => void; + + /** + * Enter a parse tree produced by `CashScriptParser.functionDefinition`. + * @param ctx the parse tree + */ + enterFunctionDefinition?: (ctx: FunctionDefinitionContext) => void; + /** + * Exit a parse tree produced by `CashScriptParser.functionDefinition`. + * @param ctx the parse tree + */ + exitFunctionDefinition?: (ctx: FunctionDefinitionContext) => void; + + /** + * Enter a parse tree produced by `CashScriptParser.parameterList`. + * @param ctx the parse tree + */ + enterParameterList?: (ctx: ParameterListContext) => void; + /** + * Exit a parse tree produced by `CashScriptParser.parameterList`. + * @param ctx the parse tree + */ + exitParameterList?: (ctx: ParameterListContext) => void; + + /** + * Enter a parse tree produced by `CashScriptParser.parameter`. + * @param ctx the parse tree + */ + enterParameter?: (ctx: ParameterContext) => void; + /** + * Exit a parse tree produced by `CashScriptParser.parameter`. + * @param ctx the parse tree + */ + exitParameter?: (ctx: ParameterContext) => void; + + /** + * Enter a parse tree produced by `CashScriptParser.block`. + * @param ctx the parse tree + */ + enterBlock?: (ctx: BlockContext) => void; + /** + * Exit a parse tree produced by `CashScriptParser.block`. + * @param ctx the parse tree + */ + exitBlock?: (ctx: BlockContext) => void; + + /** + * Enter a parse tree produced by `CashScriptParser.statement`. + * @param ctx the parse tree + */ + enterStatement?: (ctx: StatementContext) => void; + /** + * Exit a parse tree produced by `CashScriptParser.statement`. + * @param ctx the parse tree + */ + exitStatement?: (ctx: StatementContext) => void; + + /** + * Enter a parse tree produced by `CashScriptParser.variableDefinition`. + * @param ctx the parse tree + */ + enterVariableDefinition?: (ctx: VariableDefinitionContext) => void; + /** + * Exit a parse tree produced by `CashScriptParser.variableDefinition`. + * @param ctx the parse tree + */ + exitVariableDefinition?: (ctx: VariableDefinitionContext) => void; + + /** + * Enter a parse tree produced by `CashScriptParser.assignStatement`. + * @param ctx the parse tree + */ + enterAssignStatement?: (ctx: AssignStatementContext) => void; + /** + * Exit a parse tree produced by `CashScriptParser.assignStatement`. + * @param ctx the parse tree + */ + exitAssignStatement?: (ctx: AssignStatementContext) => void; + + /** + * Enter a parse tree produced by `CashScriptParser.timeOpStatement`. + * @param ctx the parse tree + */ + enterTimeOpStatement?: (ctx: TimeOpStatementContext) => void; + /** + * Exit a parse tree produced by `CashScriptParser.timeOpStatement`. + * @param ctx the parse tree + */ + exitTimeOpStatement?: (ctx: TimeOpStatementContext) => void; + + /** + * Enter a parse tree produced by `CashScriptParser.requireStatement`. + * @param ctx the parse tree + */ + enterRequireStatement?: (ctx: RequireStatementContext) => void; + /** + * Exit a parse tree produced by `CashScriptParser.requireStatement`. + * @param ctx the parse tree + */ + exitRequireStatement?: (ctx: RequireStatementContext) => void; + + /** + * Enter a parse tree produced by `CashScriptParser.ifStatement`. + * @param ctx the parse tree + */ + enterIfStatement?: (ctx: IfStatementContext) => void; + /** + * Exit a parse tree produced by `CashScriptParser.ifStatement`. + * @param ctx the parse tree + */ + exitIfStatement?: (ctx: IfStatementContext) => void; + + /** + * Enter a parse tree produced by `CashScriptParser.functionCall`. + * @param ctx the parse tree + */ + enterFunctionCall?: (ctx: FunctionCallContext) => void; + /** + * Exit a parse tree produced by `CashScriptParser.functionCall`. + * @param ctx the parse tree + */ + exitFunctionCall?: (ctx: FunctionCallContext) => void; + + /** + * Enter a parse tree produced by `CashScriptParser.expressionList`. + * @param ctx the parse tree + */ + enterExpressionList?: (ctx: ExpressionListContext) => void; + /** + * Exit a parse tree produced by `CashScriptParser.expressionList`. + * @param ctx the parse tree + */ + exitExpressionList?: (ctx: ExpressionListContext) => void; + + /** + * Enter a parse tree produced by `CashScriptParser.expression`. + * @param ctx the parse tree + */ + enterExpression?: (ctx: ExpressionContext) => void; + /** + * Exit a parse tree produced by `CashScriptParser.expression`. + * @param ctx the parse tree + */ + exitExpression?: (ctx: ExpressionContext) => void; + + /** + * Enter a parse tree produced by `CashScriptParser.literal`. + * @param ctx the parse tree + */ + enterLiteral?: (ctx: LiteralContext) => void; + /** + * Exit a parse tree produced by `CashScriptParser.literal`. + * @param ctx the parse tree + */ + exitLiteral?: (ctx: LiteralContext) => void; + + /** + * Enter a parse tree produced by `CashScriptParser.numberLiteral`. + * @param ctx the parse tree + */ + enterNumberLiteral?: (ctx: NumberLiteralContext) => void; + /** + * Exit a parse tree produced by `CashScriptParser.numberLiteral`. + * @param ctx the parse tree + */ + exitNumberLiteral?: (ctx: NumberLiteralContext) => void; + + /** + * Enter a parse tree produced by `CashScriptParser.typeName`. + * @param ctx the parse tree + */ + enterTypeName?: (ctx: TypeNameContext) => void; + /** + * Exit a parse tree produced by `CashScriptParser.typeName`. + * @param ctx the parse tree + */ + exitTypeName?: (ctx: TypeNameContext) => void; +} + diff --git a/vscode-cashscript/src/CashscriptLinter/grammar/CashScriptParser.ts b/vscode-cashscript/src/CashscriptLinter/grammar/CashScriptParser.ts new file mode 100644 index 0000000..6f5b889 --- /dev/null +++ b/vscode-cashscript/src/CashscriptLinter/grammar/CashScriptParser.ts @@ -0,0 +1,2922 @@ +// Generated from grammar/CashScript.g4 by ANTLR 4.9.0-SNAPSHOT + + +import { ATN } from "antlr4ts/atn/ATN"; +import { ATNDeserializer } from "antlr4ts/atn/ATNDeserializer"; +import { FailedPredicateException } from "antlr4ts/FailedPredicateException"; +import { NotNull } from "antlr4ts/Decorators"; +import { NoViableAltException } from "antlr4ts/NoViableAltException"; +import { Override } from "antlr4ts/Decorators"; +import { Parser } from "antlr4ts/Parser"; +import { ParserRuleContext } from "antlr4ts/ParserRuleContext"; +import { ParserATNSimulator } from "antlr4ts/atn/ParserATNSimulator"; +import { ParseTreeListener } from "antlr4ts/tree/ParseTreeListener"; +import { ParseTreeVisitor } from "antlr4ts/tree/ParseTreeVisitor"; +import { RecognitionException } from "antlr4ts/RecognitionException"; +import { RuleContext } from "antlr4ts/RuleContext"; +//import { RuleVersion } from "antlr4ts/RuleVersion"; +import { TerminalNode } from "antlr4ts/tree/TerminalNode"; +import { Token } from "antlr4ts/Token"; +import { TokenStream } from "antlr4ts/TokenStream"; +import { Vocabulary } from "antlr4ts/Vocabulary"; +import { VocabularyImpl } from "antlr4ts/VocabularyImpl"; + +import * as Utils from "antlr4ts/misc/Utils"; + +import { CashScriptListener } from "./CashScriptListener"; +import { CashScriptVisitor } from "./CashScriptVisitor"; + + +export class CashScriptParser extends Parser { + public static readonly T__0 = 1; + public static readonly T__1 = 2; + public static readonly T__2 = 3; + public static readonly T__3 = 4; + public static readonly T__4 = 5; + public static readonly T__5 = 6; + public static readonly T__6 = 7; + public static readonly T__7 = 8; + public static readonly T__8 = 9; + public static readonly T__9 = 10; + public static readonly T__10 = 11; + public static readonly T__11 = 12; + public static readonly T__12 = 13; + public static readonly T__13 = 14; + public static readonly T__14 = 15; + public static readonly T__15 = 16; + public static readonly T__16 = 17; + public static readonly T__17 = 18; + public static readonly T__18 = 19; + public static readonly T__19 = 20; + public static readonly T__20 = 21; + public static readonly T__21 = 22; + public static readonly T__22 = 23; + public static readonly T__23 = 24; + public static readonly T__24 = 25; + public static readonly T__25 = 26; + public static readonly T__26 = 27; + public static readonly T__27 = 28; + public static readonly T__28 = 29; + public static readonly T__29 = 30; + public static readonly T__30 = 31; + public static readonly T__31 = 32; + public static readonly T__32 = 33; + public static readonly T__33 = 34; + public static readonly T__34 = 35; + public static readonly T__35 = 36; + public static readonly T__36 = 37; + public static readonly T__37 = 38; + public static readonly T__38 = 39; + public static readonly T__39 = 40; + public static readonly T__40 = 41; + public static readonly T__41 = 42; + public static readonly T__42 = 43; + public static readonly VersionLiteral = 44; + public static readonly BooleanLiteral = 45; + public static readonly NumberUnit = 46; + public static readonly NumberLiteral = 47; + public static readonly Bytes = 48; + public static readonly Bound = 49; + public static readonly StringLiteral = 50; + public static readonly DateLiteral = 51; + public static readonly HexLiteral = 52; + public static readonly TxVar = 53; + public static readonly PreimageField = 54; + public static readonly Identifier = 55; + public static readonly WHITESPACE = 56; + public static readonly COMMENT = 57; + public static readonly LINE_COMMENT = 58; + public static readonly RULE_sourceFile = 0; + public static readonly RULE_pragmaDirective = 1; + public static readonly RULE_pragmaName = 2; + public static readonly RULE_pragmaValue = 3; + public static readonly RULE_versionConstraint = 4; + public static readonly RULE_versionOperator = 5; + public static readonly RULE_contractDefinition = 6; + public static readonly RULE_functionDefinition = 7; + public static readonly RULE_parameterList = 8; + public static readonly RULE_parameter = 9; + public static readonly RULE_block = 10; + public static readonly RULE_statement = 11; + public static readonly RULE_variableDefinition = 12; + public static readonly RULE_assignStatement = 13; + public static readonly RULE_timeOpStatement = 14; + public static readonly RULE_requireStatement = 15; + public static readonly RULE_ifStatement = 16; + public static readonly RULE_functionCall = 17; + public static readonly RULE_expressionList = 18; + public static readonly RULE_expression = 19; + public static readonly RULE_literal = 20; + public static readonly RULE_numberLiteral = 21; + public static readonly RULE_typeName = 22; + // tslint:disable:no-trailing-whitespace + public static readonly ruleNames: string[] = [ + "sourceFile", "pragmaDirective", "pragmaName", "pragmaValue", "versionConstraint", + "versionOperator", "contractDefinition", "functionDefinition", "parameterList", + "parameter", "block", "statement", "variableDefinition", "assignStatement", + "timeOpStatement", "requireStatement", "ifStatement", "functionCall", + "expressionList", "expression", "literal", "numberLiteral", "typeName", + ]; + + private static readonly _LITERAL_NAMES: Array = [ + undefined, "'pragma'", "';'", "'cashscript'", "'^'", "'~'", "'>='", "'>'", + "'<'", "'<='", "'='", "'contract'", "'{'", "'}'", "'function'", "'('", + "','", "')'", "'require'", "'if'", "'else'", "'new'", "'['", "']'", "'.reverse()'", + "'.length'", "'!'", "'-'", "'.split'", "'/'", "'%'", "'+'", "'=='", "'!='", + "'&'", "'|'", "'&&'", "'||'", "'int'", "'bool'", "'string'", "'pubkey'", + "'sig'", "'datasig'", + ]; + private static readonly _SYMBOLIC_NAMES: Array = [ + undefined, undefined, undefined, undefined, undefined, undefined, undefined, + undefined, undefined, undefined, undefined, undefined, undefined, undefined, + undefined, undefined, undefined, undefined, undefined, undefined, undefined, + undefined, undefined, undefined, undefined, undefined, undefined, undefined, + undefined, undefined, undefined, undefined, undefined, undefined, undefined, + undefined, undefined, undefined, undefined, undefined, undefined, undefined, + undefined, undefined, "VersionLiteral", "BooleanLiteral", "NumberUnit", + "NumberLiteral", "Bytes", "Bound", "StringLiteral", "DateLiteral", "HexLiteral", + "TxVar", "PreimageField", "Identifier", "WHITESPACE", "COMMENT", "LINE_COMMENT", + ]; + public static readonly VOCABULARY: Vocabulary = new VocabularyImpl(CashScriptParser._LITERAL_NAMES, CashScriptParser._SYMBOLIC_NAMES, []); + + // @Override + // @NotNull + public get vocabulary(): Vocabulary { + return CashScriptParser.VOCABULARY; + } + // tslint:enable:no-trailing-whitespace + + // @Override + public get grammarFileName(): string { return "CashScript.g4"; } + + // @Override + public get ruleNames(): string[] { return CashScriptParser.ruleNames; } + + // @Override + public get serializedATN(): string { return CashScriptParser._serializedATN; } + + protected createFailedPredicateException(predicate?: string, message?: string): FailedPredicateException { + return new FailedPredicateException(this, predicate, message); + } + + constructor(input: TokenStream) { + super(input); + this._interp = new ParserATNSimulator(CashScriptParser._ATN, this); + } + // @RuleVersion(0) + public sourceFile(): SourceFileContext { + let _localctx: SourceFileContext = new SourceFileContext(this._ctx, this.state); + this.enterRule(_localctx, 0, CashScriptParser.RULE_sourceFile); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 49; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === CashScriptParser.T__0) { + { + { + this.state = 46; + this.pragmaDirective(); + } + } + this.state = 51; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 52; + this.contractDefinition(); + this.state = 53; + this.match(CashScriptParser.EOF); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public pragmaDirective(): PragmaDirectiveContext { + let _localctx: PragmaDirectiveContext = new PragmaDirectiveContext(this._ctx, this.state); + this.enterRule(_localctx, 2, CashScriptParser.RULE_pragmaDirective); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 55; + this.match(CashScriptParser.T__0); + this.state = 56; + this.pragmaName(); + this.state = 57; + this.pragmaValue(); + this.state = 58; + this.match(CashScriptParser.T__1); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public pragmaName(): PragmaNameContext { + let _localctx: PragmaNameContext = new PragmaNameContext(this._ctx, this.state); + this.enterRule(_localctx, 4, CashScriptParser.RULE_pragmaName); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 60; + this.match(CashScriptParser.T__2); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public pragmaValue(): PragmaValueContext { + let _localctx: PragmaValueContext = new PragmaValueContext(this._ctx, this.state); + this.enterRule(_localctx, 6, CashScriptParser.RULE_pragmaValue); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 62; + this.versionConstraint(); + this.state = 64; + this._errHandler.sync(this); + _la = this._input.LA(1); + if ((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << CashScriptParser.T__3) | (1 << CashScriptParser.T__4) | (1 << CashScriptParser.T__5) | (1 << CashScriptParser.T__6) | (1 << CashScriptParser.T__7) | (1 << CashScriptParser.T__8) | (1 << CashScriptParser.T__9))) !== 0) || _la === CashScriptParser.VersionLiteral) { + { + this.state = 63; + this.versionConstraint(); + } + } + + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public versionConstraint(): VersionConstraintContext { + let _localctx: VersionConstraintContext = new VersionConstraintContext(this._ctx, this.state); + this.enterRule(_localctx, 8, CashScriptParser.RULE_versionConstraint); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 67; + this._errHandler.sync(this); + _la = this._input.LA(1); + if ((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << CashScriptParser.T__3) | (1 << CashScriptParser.T__4) | (1 << CashScriptParser.T__5) | (1 << CashScriptParser.T__6) | (1 << CashScriptParser.T__7) | (1 << CashScriptParser.T__8) | (1 << CashScriptParser.T__9))) !== 0)) { + { + this.state = 66; + this.versionOperator(); + } + } + + this.state = 69; + this.match(CashScriptParser.VersionLiteral); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public versionOperator(): VersionOperatorContext { + let _localctx: VersionOperatorContext = new VersionOperatorContext(this._ctx, this.state); + this.enterRule(_localctx, 10, CashScriptParser.RULE_versionOperator); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 71; + _la = this._input.LA(1); + if (!((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << CashScriptParser.T__3) | (1 << CashScriptParser.T__4) | (1 << CashScriptParser.T__5) | (1 << CashScriptParser.T__6) | (1 << CashScriptParser.T__7) | (1 << CashScriptParser.T__8) | (1 << CashScriptParser.T__9))) !== 0))) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public contractDefinition(): ContractDefinitionContext { + let _localctx: ContractDefinitionContext = new ContractDefinitionContext(this._ctx, this.state); + this.enterRule(_localctx, 12, CashScriptParser.RULE_contractDefinition); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 73; + this.match(CashScriptParser.T__10); + this.state = 74; + this.match(CashScriptParser.Identifier); + this.state = 75; + this.parameterList(); + this.state = 76; + this.match(CashScriptParser.T__11); + this.state = 80; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === CashScriptParser.T__13) { + { + { + this.state = 77; + this.functionDefinition(); + } + } + this.state = 82; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 83; + this.match(CashScriptParser.T__12); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public functionDefinition(): FunctionDefinitionContext { + let _localctx: FunctionDefinitionContext = new FunctionDefinitionContext(this._ctx, this.state); + this.enterRule(_localctx, 14, CashScriptParser.RULE_functionDefinition); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 85; + this.match(CashScriptParser.T__13); + this.state = 86; + this.match(CashScriptParser.Identifier); + this.state = 87; + this.parameterList(); + this.state = 88; + this.match(CashScriptParser.T__11); + this.state = 92; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === CashScriptParser.T__17 || _la === CashScriptParser.T__18 || ((((_la - 38)) & ~0x1F) === 0 && ((1 << (_la - 38)) & ((1 << (CashScriptParser.T__37 - 38)) | (1 << (CashScriptParser.T__38 - 38)) | (1 << (CashScriptParser.T__39 - 38)) | (1 << (CashScriptParser.T__40 - 38)) | (1 << (CashScriptParser.T__41 - 38)) | (1 << (CashScriptParser.T__42 - 38)) | (1 << (CashScriptParser.Bytes - 38)) | (1 << (CashScriptParser.Identifier - 38)))) !== 0)) { + { + { + this.state = 89; + this.statement(); + } + } + this.state = 94; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 95; + this.match(CashScriptParser.T__12); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public parameterList(): ParameterListContext { + let _localctx: ParameterListContext = new ParameterListContext(this._ctx, this.state); + this.enterRule(_localctx, 16, CashScriptParser.RULE_parameterList); + let _la: number; + try { + let _alt: number; + this.enterOuterAlt(_localctx, 1); + { + this.state = 97; + this.match(CashScriptParser.T__14); + this.state = 109; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (((((_la - 38)) & ~0x1F) === 0 && ((1 << (_la - 38)) & ((1 << (CashScriptParser.T__37 - 38)) | (1 << (CashScriptParser.T__38 - 38)) | (1 << (CashScriptParser.T__39 - 38)) | (1 << (CashScriptParser.T__40 - 38)) | (1 << (CashScriptParser.T__41 - 38)) | (1 << (CashScriptParser.T__42 - 38)) | (1 << (CashScriptParser.Bytes - 38)))) !== 0)) { + { + this.state = 98; + this.parameter(); + this.state = 103; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 5, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + { + { + this.state = 99; + this.match(CashScriptParser.T__15); + this.state = 100; + this.parameter(); + } + } + } + this.state = 105; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 5, this._ctx); + } + this.state = 107; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === CashScriptParser.T__15) { + { + this.state = 106; + this.match(CashScriptParser.T__15); + } + } + + } + } + + this.state = 111; + this.match(CashScriptParser.T__16); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public parameter(): ParameterContext { + let _localctx: ParameterContext = new ParameterContext(this._ctx, this.state); + this.enterRule(_localctx, 18, CashScriptParser.RULE_parameter); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 113; + this.typeName(); + this.state = 114; + this.match(CashScriptParser.Identifier); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public block(): BlockContext { + let _localctx: BlockContext = new BlockContext(this._ctx, this.state); + this.enterRule(_localctx, 20, CashScriptParser.RULE_block); + let _la: number; + try { + this.state = 125; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case CashScriptParser.T__11: + this.enterOuterAlt(_localctx, 1); + { + this.state = 116; + this.match(CashScriptParser.T__11); + this.state = 120; + this._errHandler.sync(this); + _la = this._input.LA(1); + while (_la === CashScriptParser.T__17 || _la === CashScriptParser.T__18 || ((((_la - 38)) & ~0x1F) === 0 && ((1 << (_la - 38)) & ((1 << (CashScriptParser.T__37 - 38)) | (1 << (CashScriptParser.T__38 - 38)) | (1 << (CashScriptParser.T__39 - 38)) | (1 << (CashScriptParser.T__40 - 38)) | (1 << (CashScriptParser.T__41 - 38)) | (1 << (CashScriptParser.T__42 - 38)) | (1 << (CashScriptParser.Bytes - 38)) | (1 << (CashScriptParser.Identifier - 38)))) !== 0)) { + { + { + this.state = 117; + this.statement(); + } + } + this.state = 122; + this._errHandler.sync(this); + _la = this._input.LA(1); + } + this.state = 123; + this.match(CashScriptParser.T__12); + } + break; + case CashScriptParser.T__17: + case CashScriptParser.T__18: + case CashScriptParser.T__37: + case CashScriptParser.T__38: + case CashScriptParser.T__39: + case CashScriptParser.T__40: + case CashScriptParser.T__41: + case CashScriptParser.T__42: + case CashScriptParser.Bytes: + case CashScriptParser.Identifier: + this.enterOuterAlt(_localctx, 2); + { + this.state = 124; + this.statement(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public statement(): StatementContext { + let _localctx: StatementContext = new StatementContext(this._ctx, this.state); + this.enterRule(_localctx, 22, CashScriptParser.RULE_statement); + try { + this.state = 132; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 10, this._ctx) ) { + case 1: + this.enterOuterAlt(_localctx, 1); + { + this.state = 127; + this.variableDefinition(); + } + break; + + case 2: + this.enterOuterAlt(_localctx, 2); + { + this.state = 128; + this.assignStatement(); + } + break; + + case 3: + this.enterOuterAlt(_localctx, 3); + { + this.state = 129; + this.timeOpStatement(); + } + break; + + case 4: + this.enterOuterAlt(_localctx, 4); + { + this.state = 130; + this.requireStatement(); + } + break; + + case 5: + this.enterOuterAlt(_localctx, 5); + { + this.state = 131; + this.ifStatement(); + } + break; + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public variableDefinition(): VariableDefinitionContext { + let _localctx: VariableDefinitionContext = new VariableDefinitionContext(this._ctx, this.state); + this.enterRule(_localctx, 24, CashScriptParser.RULE_variableDefinition); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 134; + this.typeName(); + this.state = 135; + this.match(CashScriptParser.Identifier); + this.state = 136; + this.match(CashScriptParser.T__9); + this.state = 137; + this.expression(0); + this.state = 138; + this.match(CashScriptParser.T__1); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public assignStatement(): AssignStatementContext { + let _localctx: AssignStatementContext = new AssignStatementContext(this._ctx, this.state); + this.enterRule(_localctx, 26, CashScriptParser.RULE_assignStatement); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 140; + this.match(CashScriptParser.Identifier); + this.state = 141; + this.match(CashScriptParser.T__9); + this.state = 142; + this.expression(0); + this.state = 143; + this.match(CashScriptParser.T__1); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public timeOpStatement(): TimeOpStatementContext { + let _localctx: TimeOpStatementContext = new TimeOpStatementContext(this._ctx, this.state); + this.enterRule(_localctx, 28, CashScriptParser.RULE_timeOpStatement); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 145; + this.match(CashScriptParser.T__17); + this.state = 146; + this.match(CashScriptParser.T__14); + this.state = 147; + this.match(CashScriptParser.TxVar); + this.state = 148; + this.match(CashScriptParser.T__5); + this.state = 149; + this.expression(0); + this.state = 150; + this.match(CashScriptParser.T__16); + this.state = 151; + this.match(CashScriptParser.T__1); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public requireStatement(): RequireStatementContext { + let _localctx: RequireStatementContext = new RequireStatementContext(this._ctx, this.state); + this.enterRule(_localctx, 30, CashScriptParser.RULE_requireStatement); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 153; + this.match(CashScriptParser.T__17); + this.state = 154; + this.match(CashScriptParser.T__14); + this.state = 155; + this.expression(0); + this.state = 156; + this.match(CashScriptParser.T__16); + this.state = 157; + this.match(CashScriptParser.T__1); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public ifStatement(): IfStatementContext { + let _localctx: IfStatementContext = new IfStatementContext(this._ctx, this.state); + this.enterRule(_localctx, 32, CashScriptParser.RULE_ifStatement); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 159; + this.match(CashScriptParser.T__18); + this.state = 160; + this.match(CashScriptParser.T__14); + this.state = 161; + this.expression(0); + this.state = 162; + this.match(CashScriptParser.T__16); + this.state = 163; + _localctx._ifBlock = this.block(); + this.state = 166; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 11, this._ctx) ) { + case 1: + { + this.state = 164; + this.match(CashScriptParser.T__19); + this.state = 165; + _localctx._elseBlock = this.block(); + } + break; + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public functionCall(): FunctionCallContext { + let _localctx: FunctionCallContext = new FunctionCallContext(this._ctx, this.state); + this.enterRule(_localctx, 34, CashScriptParser.RULE_functionCall); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 168; + this.match(CashScriptParser.Identifier); + this.state = 169; + this.expressionList(); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public expressionList(): ExpressionListContext { + let _localctx: ExpressionListContext = new ExpressionListContext(this._ctx, this.state); + this.enterRule(_localctx, 36, CashScriptParser.RULE_expressionList); + let _la: number; + try { + let _alt: number; + this.enterOuterAlt(_localctx, 1); + { + this.state = 171; + this.match(CashScriptParser.T__14); + this.state = 183; + this._errHandler.sync(this); + _la = this._input.LA(1); + if ((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << CashScriptParser.T__14) | (1 << CashScriptParser.T__20) | (1 << CashScriptParser.T__21) | (1 << CashScriptParser.T__25) | (1 << CashScriptParser.T__26))) !== 0) || ((((_la - 38)) & ~0x1F) === 0 && ((1 << (_la - 38)) & ((1 << (CashScriptParser.T__37 - 38)) | (1 << (CashScriptParser.T__38 - 38)) | (1 << (CashScriptParser.T__39 - 38)) | (1 << (CashScriptParser.T__40 - 38)) | (1 << (CashScriptParser.T__41 - 38)) | (1 << (CashScriptParser.T__42 - 38)) | (1 << (CashScriptParser.BooleanLiteral - 38)) | (1 << (CashScriptParser.NumberLiteral - 38)) | (1 << (CashScriptParser.Bytes - 38)) | (1 << (CashScriptParser.StringLiteral - 38)) | (1 << (CashScriptParser.DateLiteral - 38)) | (1 << (CashScriptParser.HexLiteral - 38)) | (1 << (CashScriptParser.PreimageField - 38)) | (1 << (CashScriptParser.Identifier - 38)))) !== 0)) { + { + this.state = 172; + this.expression(0); + this.state = 177; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 12, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + { + { + this.state = 173; + this.match(CashScriptParser.T__15); + this.state = 174; + this.expression(0); + } + } + } + this.state = 179; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 12, this._ctx); + } + this.state = 181; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === CashScriptParser.T__15) { + { + this.state = 180; + this.match(CashScriptParser.T__15); + } + } + + } + } + + this.state = 185; + this.match(CashScriptParser.T__16); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + + public expression(): ExpressionContext; + public expression(_p: number): ExpressionContext; + // @RuleVersion(0) + public expression(_p?: number): ExpressionContext { + if (_p === undefined) { + _p = 0; + } + + let _parentctx: ParserRuleContext = this._ctx; + let _parentState: number = this.state; + let _localctx: ExpressionContext = new ExpressionContext(this._ctx, _parentState); + let _prevctx: ExpressionContext = _localctx; + let _startState: number = 38; + this.enterRecursionRule(_localctx, 38, CashScriptParser.RULE_expression, _p); + let _la: number; + try { + let _alt: number; + this.enterOuterAlt(_localctx, 1); + { + this.state = 228; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 20, this._ctx) ) { + case 1: + { + _localctx = new ParenthesisedContext(_localctx); + this._ctx = _localctx; + _prevctx = _localctx; + + this.state = 188; + this.match(CashScriptParser.T__14); + this.state = 189; + this.expression(0); + this.state = 190; + this.match(CashScriptParser.T__16); + } + break; + + case 2: + { + _localctx = new CastContext(_localctx); + this._ctx = _localctx; + _prevctx = _localctx; + this.state = 192; + this.typeName(); + this.state = 193; + this.match(CashScriptParser.T__14); + this.state = 194; + (_localctx as CastContext)._castable = this.expression(0); + this.state = 197; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 15, this._ctx) ) { + case 1: + { + this.state = 195; + this.match(CashScriptParser.T__15); + this.state = 196; + (_localctx as CastContext)._size = this.expression(0); + } + break; + } + this.state = 200; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === CashScriptParser.T__15) { + { + this.state = 199; + this.match(CashScriptParser.T__15); + } + } + + this.state = 202; + this.match(CashScriptParser.T__16); + } + break; + + case 3: + { + _localctx = new FunctionCallExpressionContext(_localctx); + this._ctx = _localctx; + _prevctx = _localctx; + this.state = 204; + this.functionCall(); + } + break; + + case 4: + { + _localctx = new InstantiationContext(_localctx); + this._ctx = _localctx; + _prevctx = _localctx; + this.state = 205; + this.match(CashScriptParser.T__20); + this.state = 206; + this.match(CashScriptParser.Identifier); + this.state = 207; + this.expressionList(); + } + break; + + case 5: + { + _localctx = new UnaryOpContext(_localctx); + this._ctx = _localctx; + _prevctx = _localctx; + this.state = 208; + (_localctx as UnaryOpContext)._op = this._input.LT(1); + _la = this._input.LA(1); + if (!(_la === CashScriptParser.T__25 || _la === CashScriptParser.T__26)) { + (_localctx as UnaryOpContext)._op = this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 209; + this.expression(15); + } + break; + + case 6: + { + _localctx = new ArrayContext(_localctx); + this._ctx = _localctx; + _prevctx = _localctx; + this.state = 210; + this.match(CashScriptParser.T__21); + this.state = 222; + this._errHandler.sync(this); + _la = this._input.LA(1); + if ((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << CashScriptParser.T__14) | (1 << CashScriptParser.T__20) | (1 << CashScriptParser.T__21) | (1 << CashScriptParser.T__25) | (1 << CashScriptParser.T__26))) !== 0) || ((((_la - 38)) & ~0x1F) === 0 && ((1 << (_la - 38)) & ((1 << (CashScriptParser.T__37 - 38)) | (1 << (CashScriptParser.T__38 - 38)) | (1 << (CashScriptParser.T__39 - 38)) | (1 << (CashScriptParser.T__40 - 38)) | (1 << (CashScriptParser.T__41 - 38)) | (1 << (CashScriptParser.T__42 - 38)) | (1 << (CashScriptParser.BooleanLiteral - 38)) | (1 << (CashScriptParser.NumberLiteral - 38)) | (1 << (CashScriptParser.Bytes - 38)) | (1 << (CashScriptParser.StringLiteral - 38)) | (1 << (CashScriptParser.DateLiteral - 38)) | (1 << (CashScriptParser.HexLiteral - 38)) | (1 << (CashScriptParser.PreimageField - 38)) | (1 << (CashScriptParser.Identifier - 38)))) !== 0)) { + { + this.state = 211; + this.expression(0); + this.state = 216; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 17, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + { + { + this.state = 212; + this.match(CashScriptParser.T__15); + this.state = 213; + this.expression(0); + } + } + } + this.state = 218; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 17, this._ctx); + } + this.state = 220; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la === CashScriptParser.T__15) { + { + this.state = 219; + this.match(CashScriptParser.T__15); + } + } + + } + } + + this.state = 224; + this.match(CashScriptParser.T__22); + } + break; + + case 7: + { + _localctx = new PreimageFieldContext(_localctx); + this._ctx = _localctx; + _prevctx = _localctx; + this.state = 225; + this.match(CashScriptParser.PreimageField); + } + break; + + case 8: + { + _localctx = new IdentifierContext(_localctx); + this._ctx = _localctx; + _prevctx = _localctx; + this.state = 226; + this.match(CashScriptParser.Identifier); + } + break; + + case 9: + { + _localctx = new LiteralExpressionContext(_localctx); + this._ctx = _localctx; + _prevctx = _localctx; + this.state = 227; + this.literal(); + } + break; + } + this._ctx._stop = this._input.tryLT(-1); + this.state = 271; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 22, this._ctx); + while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { + if (_alt === 1) { + if (this._parseListeners != null) { + this.triggerExitRuleEvent(); + } + _prevctx = _localctx; + { + this.state = 269; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 21, this._ctx) ) { + case 1: + { + _localctx = new BinaryOpContext(new ExpressionContext(_parentctx, _parentState)); + (_localctx as BinaryOpContext)._left = _prevctx; + this.pushNewRecursionContext(_localctx, _startState, CashScriptParser.RULE_expression); + this.state = 230; + if (!(this.precpred(this._ctx, 13))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 13)"); + } + this.state = 231; + (_localctx as BinaryOpContext)._op = this._input.LT(1); + _la = this._input.LA(1); + if (!(_la === CashScriptParser.T__28 || _la === CashScriptParser.T__29)) { + (_localctx as BinaryOpContext)._op = this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 232; + (_localctx as BinaryOpContext)._right = this.expression(14); + } + break; + + case 2: + { + _localctx = new BinaryOpContext(new ExpressionContext(_parentctx, _parentState)); + (_localctx as BinaryOpContext)._left = _prevctx; + this.pushNewRecursionContext(_localctx, _startState, CashScriptParser.RULE_expression); + this.state = 233; + if (!(this.precpred(this._ctx, 12))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 12)"); + } + this.state = 234; + (_localctx as BinaryOpContext)._op = this._input.LT(1); + _la = this._input.LA(1); + if (!(_la === CashScriptParser.T__26 || _la === CashScriptParser.T__30)) { + (_localctx as BinaryOpContext)._op = this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 235; + (_localctx as BinaryOpContext)._right = this.expression(13); + } + break; + + case 3: + { + _localctx = new BinaryOpContext(new ExpressionContext(_parentctx, _parentState)); + (_localctx as BinaryOpContext)._left = _prevctx; + this.pushNewRecursionContext(_localctx, _startState, CashScriptParser.RULE_expression); + this.state = 236; + if (!(this.precpred(this._ctx, 11))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 11)"); + } + this.state = 237; + (_localctx as BinaryOpContext)._op = this._input.LT(1); + _la = this._input.LA(1); + if (!((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << CashScriptParser.T__5) | (1 << CashScriptParser.T__6) | (1 << CashScriptParser.T__7) | (1 << CashScriptParser.T__8))) !== 0))) { + (_localctx as BinaryOpContext)._op = this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 238; + (_localctx as BinaryOpContext)._right = this.expression(12); + } + break; + + case 4: + { + _localctx = new BinaryOpContext(new ExpressionContext(_parentctx, _parentState)); + (_localctx as BinaryOpContext)._left = _prevctx; + this.pushNewRecursionContext(_localctx, _startState, CashScriptParser.RULE_expression); + this.state = 239; + if (!(this.precpred(this._ctx, 10))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 10)"); + } + this.state = 240; + (_localctx as BinaryOpContext)._op = this._input.LT(1); + _la = this._input.LA(1); + if (!(_la === CashScriptParser.T__31 || _la === CashScriptParser.T__32)) { + (_localctx as BinaryOpContext)._op = this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + this.state = 241; + (_localctx as BinaryOpContext)._right = this.expression(11); + } + break; + + case 5: + { + _localctx = new BinaryOpContext(new ExpressionContext(_parentctx, _parentState)); + (_localctx as BinaryOpContext)._left = _prevctx; + this.pushNewRecursionContext(_localctx, _startState, CashScriptParser.RULE_expression); + this.state = 242; + if (!(this.precpred(this._ctx, 9))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 9)"); + } + this.state = 243; + (_localctx as BinaryOpContext)._op = this.match(CashScriptParser.T__33); + this.state = 244; + (_localctx as BinaryOpContext)._right = this.expression(10); + } + break; + + case 6: + { + _localctx = new BinaryOpContext(new ExpressionContext(_parentctx, _parentState)); + (_localctx as BinaryOpContext)._left = _prevctx; + this.pushNewRecursionContext(_localctx, _startState, CashScriptParser.RULE_expression); + this.state = 245; + if (!(this.precpred(this._ctx, 8))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 8)"); + } + this.state = 246; + (_localctx as BinaryOpContext)._op = this.match(CashScriptParser.T__3); + this.state = 247; + (_localctx as BinaryOpContext)._right = this.expression(9); + } + break; + + case 7: + { + _localctx = new BinaryOpContext(new ExpressionContext(_parentctx, _parentState)); + (_localctx as BinaryOpContext)._left = _prevctx; + this.pushNewRecursionContext(_localctx, _startState, CashScriptParser.RULE_expression); + this.state = 248; + if (!(this.precpred(this._ctx, 7))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 7)"); + } + this.state = 249; + (_localctx as BinaryOpContext)._op = this.match(CashScriptParser.T__34); + this.state = 250; + (_localctx as BinaryOpContext)._right = this.expression(8); + } + break; + + case 8: + { + _localctx = new BinaryOpContext(new ExpressionContext(_parentctx, _parentState)); + (_localctx as BinaryOpContext)._left = _prevctx; + this.pushNewRecursionContext(_localctx, _startState, CashScriptParser.RULE_expression); + this.state = 251; + if (!(this.precpred(this._ctx, 6))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 6)"); + } + this.state = 252; + (_localctx as BinaryOpContext)._op = this.match(CashScriptParser.T__35); + this.state = 253; + (_localctx as BinaryOpContext)._right = this.expression(7); + } + break; + + case 9: + { + _localctx = new BinaryOpContext(new ExpressionContext(_parentctx, _parentState)); + (_localctx as BinaryOpContext)._left = _prevctx; + this.pushNewRecursionContext(_localctx, _startState, CashScriptParser.RULE_expression); + this.state = 254; + if (!(this.precpred(this._ctx, 5))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 5)"); + } + this.state = 255; + (_localctx as BinaryOpContext)._op = this.match(CashScriptParser.T__36); + this.state = 256; + (_localctx as BinaryOpContext)._right = this.expression(6); + } + break; + + case 10: + { + _localctx = new TupleIndexOpContext(new ExpressionContext(_parentctx, _parentState)); + this.pushNewRecursionContext(_localctx, _startState, CashScriptParser.RULE_expression); + this.state = 257; + if (!(this.precpred(this._ctx, 17))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 17)"); + } + this.state = 258; + this.match(CashScriptParser.T__21); + this.state = 259; + (_localctx as TupleIndexOpContext)._index = this.match(CashScriptParser.NumberLiteral); + this.state = 260; + this.match(CashScriptParser.T__22); + } + break; + + case 11: + { + _localctx = new UnaryOpContext(new ExpressionContext(_parentctx, _parentState)); + this.pushNewRecursionContext(_localctx, _startState, CashScriptParser.RULE_expression); + this.state = 261; + if (!(this.precpred(this._ctx, 16))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 16)"); + } + this.state = 262; + (_localctx as UnaryOpContext)._op = this._input.LT(1); + _la = this._input.LA(1); + if (!(_la === CashScriptParser.T__23 || _la === CashScriptParser.T__24)) { + (_localctx as UnaryOpContext)._op = this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + } + break; + + case 12: + { + _localctx = new BinaryOpContext(new ExpressionContext(_parentctx, _parentState)); + (_localctx as BinaryOpContext)._left = _prevctx; + this.pushNewRecursionContext(_localctx, _startState, CashScriptParser.RULE_expression); + this.state = 263; + if (!(this.precpred(this._ctx, 14))) { + throw this.createFailedPredicateException("this.precpred(this._ctx, 14)"); + } + this.state = 264; + (_localctx as BinaryOpContext)._op = this.match(CashScriptParser.T__27); + this.state = 265; + this.match(CashScriptParser.T__14); + this.state = 266; + (_localctx as BinaryOpContext)._right = this.expression(0); + this.state = 267; + this.match(CashScriptParser.T__16); + } + break; + } + } + } + this.state = 273; + this._errHandler.sync(this); + _alt = this.interpreter.adaptivePredict(this._input, 22, this._ctx); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.unrollRecursionContexts(_parentctx); + } + return _localctx; + } + // @RuleVersion(0) + public literal(): LiteralContext { + let _localctx: LiteralContext = new LiteralContext(this._ctx, this.state); + this.enterRule(_localctx, 40, CashScriptParser.RULE_literal); + try { + this.state = 279; + this._errHandler.sync(this); + switch (this._input.LA(1)) { + case CashScriptParser.BooleanLiteral: + this.enterOuterAlt(_localctx, 1); + { + this.state = 274; + this.match(CashScriptParser.BooleanLiteral); + } + break; + case CashScriptParser.NumberLiteral: + this.enterOuterAlt(_localctx, 2); + { + this.state = 275; + this.numberLiteral(); + } + break; + case CashScriptParser.StringLiteral: + this.enterOuterAlt(_localctx, 3); + { + this.state = 276; + this.match(CashScriptParser.StringLiteral); + } + break; + case CashScriptParser.DateLiteral: + this.enterOuterAlt(_localctx, 4); + { + this.state = 277; + this.match(CashScriptParser.DateLiteral); + } + break; + case CashScriptParser.HexLiteral: + this.enterOuterAlt(_localctx, 5); + { + this.state = 278; + this.match(CashScriptParser.HexLiteral); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public numberLiteral(): NumberLiteralContext { + let _localctx: NumberLiteralContext = new NumberLiteralContext(this._ctx, this.state); + this.enterRule(_localctx, 42, CashScriptParser.RULE_numberLiteral); + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 281; + this.match(CashScriptParser.NumberLiteral); + this.state = 283; + this._errHandler.sync(this); + switch ( this.interpreter.adaptivePredict(this._input, 24, this._ctx) ) { + case 1: + { + this.state = 282; + this.match(CashScriptParser.NumberUnit); + } + break; + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + // @RuleVersion(0) + public typeName(): TypeNameContext { + let _localctx: TypeNameContext = new TypeNameContext(this._ctx, this.state); + this.enterRule(_localctx, 44, CashScriptParser.RULE_typeName); + let _la: number; + try { + this.enterOuterAlt(_localctx, 1); + { + this.state = 285; + _la = this._input.LA(1); + if (!(((((_la - 38)) & ~0x1F) === 0 && ((1 << (_la - 38)) & ((1 << (CashScriptParser.T__37 - 38)) | (1 << (CashScriptParser.T__38 - 38)) | (1 << (CashScriptParser.T__39 - 38)) | (1 << (CashScriptParser.T__40 - 38)) | (1 << (CashScriptParser.T__41 - 38)) | (1 << (CashScriptParser.T__42 - 38)) | (1 << (CashScriptParser.Bytes - 38)))) !== 0))) { + this._errHandler.recoverInline(this); + } else { + if (this._input.LA(1) === Token.EOF) { + this.matchedEOF = true; + } + + this._errHandler.reportMatch(this); + this.consume(); + } + } + } + catch (re) { + if (re instanceof RecognitionException) { + _localctx.exception = re; + this._errHandler.reportError(this, re); + this._errHandler.recover(this, re); + } else { + throw re; + } + } + finally { + this.exitRule(); + } + return _localctx; + } + + public sempred(_localctx: RuleContext, ruleIndex: number, predIndex: number): boolean { + switch (ruleIndex) { + case 19: + return this.expression_sempred(_localctx as ExpressionContext, predIndex); + } + return true; + } + private expression_sempred(_localctx: ExpressionContext, predIndex: number): boolean { + switch (predIndex) { + case 0: + return this.precpred(this._ctx, 13); + + case 1: + return this.precpred(this._ctx, 12); + + case 2: + return this.precpred(this._ctx, 11); + + case 3: + return this.precpred(this._ctx, 10); + + case 4: + return this.precpred(this._ctx, 9); + + case 5: + return this.precpred(this._ctx, 8); + + case 6: + return this.precpred(this._ctx, 7); + + case 7: + return this.precpred(this._ctx, 6); + + case 8: + return this.precpred(this._ctx, 5); + + case 9: + return this.precpred(this._ctx, 17); + + case 10: + return this.precpred(this._ctx, 16); + + case 11: + return this.precpred(this._ctx, 14); + } + return true; + } + + public static readonly _serializedATN: string = + "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x03<\u0122\x04\x02" + + "\t\x02\x04\x03\t\x03\x04\x04\t\x04\x04\x05\t\x05\x04\x06\t\x06\x04\x07" + + "\t\x07\x04\b\t\b\x04\t\t\t\x04\n\t\n\x04\v\t\v\x04\f\t\f\x04\r\t\r\x04" + + "\x0E\t\x0E\x04\x0F\t\x0F\x04\x10\t\x10\x04\x11\t\x11\x04\x12\t\x12\x04" + + "\x13\t\x13\x04\x14\t\x14\x04\x15\t\x15\x04\x16\t\x16\x04\x17\t\x17\x04" + + "\x18\t\x18\x03\x02\x07\x022\n\x02\f\x02\x0E\x025\v\x02\x03\x02\x03\x02" + + "\x03\x02\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x04\x03\x04\x03\x05" + + "\x03\x05\x05\x05C\n\x05\x03\x06\x05\x06F\n\x06\x03\x06\x03\x06\x03\x07" + + "\x03\x07\x03\b\x03\b\x03\b\x03\b\x03\b\x07\bQ\n\b\f\b\x0E\bT\v\b\x03\b" + + "\x03\b\x03\t\x03\t\x03\t\x03\t\x03\t\x07\t]\n\t\f\t\x0E\t`\v\t\x03\t\x03" + + "\t\x03\n\x03\n\x03\n\x03\n\x07\nh\n\n\f\n\x0E\nk\v\n\x03\n\x05\nn\n\n" + + "\x05\np\n\n\x03\n\x03\n\x03\v\x03\v\x03\v\x03\f\x03\f\x07\fy\n\f\f\f\x0E" + + "\f|\v\f\x03\f\x03\f\x05\f\x80\n\f\x03\r\x03\r\x03\r\x03\r\x03\r\x05\r" + + "\x87\n\r\x03\x0E\x03\x0E\x03\x0E\x03\x0E\x03\x0E\x03\x0E\x03\x0F\x03\x0F" + + "\x03\x0F\x03\x0F\x03\x0F\x03\x10\x03\x10\x03\x10\x03\x10\x03\x10\x03\x10" + + "\x03\x10\x03\x10\x03\x11\x03\x11\x03\x11\x03\x11\x03\x11\x03\x11\x03\x12" + + "\x03\x12\x03\x12\x03\x12\x03\x12\x03\x12\x03\x12\x05\x12\xA9\n\x12\x03" + + "\x13\x03\x13\x03\x13\x03\x14\x03\x14\x03\x14\x03\x14\x07\x14\xB2\n\x14" + + "\f\x14\x0E\x14\xB5\v\x14\x03\x14\x05\x14\xB8\n\x14\x05\x14\xBA\n\x14\x03" + + "\x14\x03\x14\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03" + + "\x15\x03\x15\x03\x15\x05\x15\xC8\n\x15\x03\x15\x05\x15\xCB\n\x15\x03\x15" + + "\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15" + + "\x03\x15\x03\x15\x07\x15\xD9\n\x15\f\x15\x0E\x15\xDC\v\x15\x03\x15\x05" + + "\x15\xDF\n\x15\x05\x15\xE1\n\x15\x03\x15\x03\x15\x03\x15\x03\x15\x05\x15" + + "\xE7\n\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03" + + "\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03" + + "\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03" + + "\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03" + + "\x15\x03\x15\x03\x15\x03\x15\x03\x15\x07\x15\u0110\n\x15\f\x15\x0E\x15" + + "\u0113\v\x15\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x05\x16\u011A\n\x16" + + "\x03\x17\x03\x17\x05\x17\u011E\n\x17\x03\x18\x03\x18\x03\x18\x02\x02\x03" + + "(\x19\x02\x02\x04\x02\x06\x02\b\x02\n\x02\f\x02\x0E\x02\x10\x02\x12\x02" + + "\x14\x02\x16\x02\x18\x02\x1A\x02\x1C\x02\x1E\x02 \x02\"\x02$\x02&\x02" + + "(\x02*\x02,\x02.\x02\x02\n\x03\x02\x06\f\x03\x02\x1C\x1D\x03\x02\x1F " + + "\x04\x02\x1D\x1D!!\x03\x02\b\v\x03\x02\"#\x03\x02\x1A\x1B\x04\x02(-22" + + "\x02\u013A\x023\x03\x02\x02\x02\x049\x03\x02\x02\x02\x06>\x03\x02\x02" + + "\x02\b@\x03\x02\x02\x02\nE\x03\x02\x02\x02\fI\x03\x02\x02\x02\x0EK\x03" + + "\x02\x02\x02\x10W\x03\x02\x02\x02\x12c\x03\x02\x02\x02\x14s\x03\x02\x02" + + "\x02\x16\x7F\x03\x02\x02\x02\x18\x86\x03\x02\x02\x02\x1A\x88\x03\x02\x02" + + "\x02\x1C\x8E\x03\x02\x02\x02\x1E\x93\x03\x02\x02\x02 \x9B\x03\x02\x02" + + "\x02\"\xA1\x03\x02\x02\x02$\xAA\x03\x02\x02\x02&\xAD\x03\x02\x02\x02(" + + "\xE6\x03\x02\x02\x02*\u0119\x03\x02\x02\x02,\u011B\x03\x02\x02\x02.\u011F" + + "\x03\x02\x02\x0202\x05\x04\x03\x0210\x03\x02\x02\x0225\x03\x02\x02\x02" + + "31\x03\x02\x02\x0234\x03\x02\x02\x0246\x03\x02\x02\x0253\x03\x02\x02\x02" + + "67\x05\x0E\b\x0278\x07\x02\x02\x038\x03\x03\x02\x02\x029:\x07\x03\x02" + + "\x02:;\x05\x06\x04\x02;<\x05\b\x05\x02<=\x07\x04\x02\x02=\x05\x03\x02" + + "\x02\x02>?\x07\x05\x02\x02?\x07\x03\x02\x02\x02@B\x05\n\x06\x02AC\x05" + + "\n\x06\x02BA\x03\x02\x02\x02BC\x03\x02\x02\x02C\t\x03\x02\x02\x02DF\x05" + + "\f\x07\x02ED\x03\x02\x02\x02EF\x03\x02\x02\x02FG\x03\x02\x02\x02GH\x07" + + ".\x02\x02H\v\x03\x02\x02\x02IJ\t\x02\x02\x02J\r\x03\x02\x02\x02KL\x07" + + "\r\x02\x02LM\x079\x02\x02MN\x05\x12\n\x02NR\x07\x0E\x02\x02OQ\x05\x10" + + "\t\x02PO\x03\x02\x02\x02QT\x03\x02\x02\x02RP\x03\x02\x02\x02RS\x03\x02" + + "\x02\x02SU\x03\x02\x02\x02TR\x03\x02\x02\x02UV\x07\x0F\x02\x02V\x0F\x03" + + "\x02\x02\x02WX\x07\x10\x02\x02XY\x079\x02\x02YZ\x05\x12\n\x02Z^\x07\x0E" + + "\x02\x02[]\x05\x18\r\x02\\[\x03\x02\x02\x02]`\x03\x02\x02\x02^\\\x03\x02" + + "\x02\x02^_\x03\x02\x02\x02_a\x03\x02\x02\x02`^\x03\x02\x02\x02ab\x07\x0F" + + "\x02\x02b\x11\x03\x02\x02\x02co\x07\x11\x02\x02di\x05\x14\v\x02ef\x07" + + "\x12\x02\x02fh\x05\x14\v\x02ge\x03\x02\x02\x02hk\x03\x02\x02\x02ig\x03" + + "\x02\x02\x02ij\x03\x02\x02\x02jm\x03\x02\x02\x02ki\x03\x02\x02\x02ln\x07" + + "\x12\x02\x02ml\x03\x02\x02\x02mn\x03\x02\x02\x02np\x03\x02\x02\x02od\x03" + + "\x02\x02\x02op\x03\x02\x02\x02pq\x03\x02\x02\x02qr\x07\x13\x02\x02r\x13" + + "\x03\x02\x02\x02st\x05.\x18\x02tu\x079\x02\x02u\x15\x03\x02\x02\x02vz" + + "\x07\x0E\x02\x02wy\x05\x18\r\x02xw\x03\x02\x02\x02y|\x03\x02\x02\x02z" + + "x\x03\x02\x02\x02z{\x03\x02\x02\x02{}\x03\x02\x02\x02|z\x03\x02\x02\x02" + + "}\x80\x07\x0F\x02\x02~\x80\x05\x18\r\x02\x7Fv\x03\x02\x02\x02\x7F~\x03" + + "\x02\x02\x02\x80\x17\x03\x02\x02\x02\x81\x87\x05\x1A\x0E\x02\x82\x87\x05" + + "\x1C\x0F\x02\x83\x87\x05\x1E\x10\x02\x84\x87\x05 \x11\x02\x85\x87\x05" + + "\"\x12\x02\x86\x81\x03\x02\x02\x02\x86\x82\x03\x02\x02\x02\x86\x83\x03" + + "\x02\x02\x02\x86\x84\x03\x02\x02\x02\x86\x85\x03\x02\x02\x02\x87\x19\x03" + + "\x02\x02\x02\x88\x89\x05.\x18\x02\x89\x8A\x079\x02\x02\x8A\x8B\x07\f\x02" + + "\x02\x8B\x8C\x05(\x15\x02\x8C\x8D\x07\x04\x02\x02\x8D\x1B\x03\x02\x02" + + "\x02\x8E\x8F\x079\x02\x02\x8F\x90\x07\f\x02\x02\x90\x91\x05(\x15\x02\x91" + + "\x92\x07\x04\x02\x02\x92\x1D\x03\x02\x02\x02\x93\x94\x07\x14\x02\x02\x94" + + "\x95\x07\x11\x02\x02\x95\x96\x077\x02\x02\x96\x97\x07\b\x02\x02\x97\x98" + + "\x05(\x15\x02\x98\x99\x07\x13\x02\x02\x99\x9A\x07\x04\x02\x02\x9A\x1F" + + "\x03\x02\x02\x02\x9B\x9C\x07\x14\x02\x02\x9C\x9D\x07\x11\x02\x02\x9D\x9E" + + "\x05(\x15\x02\x9E\x9F\x07\x13\x02\x02\x9F\xA0\x07\x04\x02\x02\xA0!\x03" + + "\x02\x02\x02\xA1\xA2\x07\x15\x02\x02\xA2\xA3\x07\x11\x02\x02\xA3\xA4\x05" + + "(\x15\x02\xA4\xA5\x07\x13\x02\x02\xA5\xA8\x05\x16\f\x02\xA6\xA7\x07\x16" + + "\x02\x02\xA7\xA9\x05\x16\f\x02\xA8\xA6\x03\x02\x02\x02\xA8\xA9\x03\x02" + + "\x02\x02\xA9#\x03\x02\x02\x02\xAA\xAB\x079\x02\x02\xAB\xAC\x05&\x14\x02" + + "\xAC%\x03\x02\x02\x02\xAD\xB9\x07\x11\x02\x02\xAE\xB3\x05(\x15\x02\xAF" + + "\xB0\x07\x12\x02\x02\xB0\xB2\x05(\x15\x02\xB1\xAF\x03\x02\x02\x02\xB2" + + "\xB5\x03\x02\x02\x02\xB3\xB1\x03\x02\x02\x02\xB3\xB4\x03\x02\x02\x02\xB4" + + "\xB7\x03\x02\x02\x02\xB5\xB3\x03\x02\x02\x02\xB6\xB8\x07\x12\x02\x02\xB7" + + "\xB6\x03\x02\x02\x02\xB7\xB8\x03\x02\x02\x02\xB8\xBA\x03\x02\x02\x02\xB9" + + "\xAE\x03\x02\x02\x02\xB9\xBA\x03\x02\x02\x02\xBA\xBB\x03\x02\x02\x02\xBB" + + "\xBC\x07\x13\x02\x02\xBC\'\x03\x02\x02\x02\xBD\xBE\b\x15\x01\x02\xBE\xBF" + + "\x07\x11\x02\x02\xBF\xC0\x05(\x15\x02\xC0\xC1\x07\x13\x02\x02\xC1\xE7" + + "\x03\x02\x02\x02\xC2\xC3\x05.\x18\x02\xC3\xC4\x07\x11\x02\x02\xC4\xC7" + + "\x05(\x15\x02\xC5\xC6\x07\x12\x02\x02\xC6\xC8\x05(\x15\x02\xC7\xC5\x03" + + "\x02\x02\x02\xC7\xC8\x03\x02\x02\x02\xC8\xCA\x03\x02\x02\x02\xC9\xCB\x07" + + "\x12\x02\x02\xCA\xC9\x03\x02\x02\x02\xCA\xCB\x03\x02\x02\x02\xCB\xCC\x03" + + "\x02\x02\x02\xCC\xCD\x07\x13\x02\x02\xCD\xE7\x03\x02\x02\x02\xCE\xE7\x05" + + "$\x13\x02\xCF\xD0\x07\x17\x02\x02\xD0\xD1\x079\x02\x02\xD1\xE7\x05&\x14" + + "\x02\xD2\xD3\t\x03\x02\x02\xD3\xE7\x05(\x15\x11\xD4\xE0\x07\x18\x02\x02" + + "\xD5\xDA\x05(\x15\x02\xD6\xD7\x07\x12\x02\x02\xD7\xD9\x05(\x15\x02\xD8" + + "\xD6\x03\x02\x02\x02\xD9\xDC\x03\x02\x02\x02\xDA\xD8\x03\x02\x02\x02\xDA" + + "\xDB\x03\x02\x02\x02\xDB\xDE\x03\x02\x02\x02\xDC\xDA\x03\x02\x02\x02\xDD" + + "\xDF\x07\x12\x02\x02\xDE\xDD\x03\x02\x02\x02\xDE\xDF\x03\x02\x02\x02\xDF" + + "\xE1\x03\x02\x02\x02\xE0\xD5\x03\x02\x02\x02\xE0\xE1\x03\x02\x02\x02\xE1" + + "\xE2\x03\x02\x02\x02\xE2\xE7\x07\x19\x02\x02\xE3\xE7\x078\x02\x02\xE4" + + "\xE7\x079\x02\x02\xE5\xE7\x05*\x16\x02\xE6\xBD\x03\x02\x02\x02\xE6\xC2" + + "\x03\x02\x02\x02\xE6\xCE\x03\x02\x02\x02\xE6\xCF\x03\x02\x02\x02\xE6\xD2" + + "\x03\x02\x02\x02\xE6\xD4\x03\x02\x02\x02\xE6\xE3\x03\x02\x02\x02\xE6\xE4" + + "\x03\x02\x02\x02\xE6\xE5\x03\x02\x02\x02\xE7\u0111\x03\x02\x02\x02\xE8" + + "\xE9\f\x0F\x02\x02\xE9\xEA\t\x04\x02\x02\xEA\u0110\x05(\x15\x10\xEB\xEC" + + "\f\x0E\x02\x02\xEC\xED\t\x05\x02\x02\xED\u0110\x05(\x15\x0F\xEE\xEF\f" + + "\r\x02\x02\xEF\xF0\t\x06\x02\x02\xF0\u0110\x05(\x15\x0E\xF1\xF2\f\f\x02" + + "\x02\xF2\xF3\t\x07\x02\x02\xF3\u0110\x05(\x15\r\xF4\xF5\f\v\x02\x02\xF5" + + "\xF6\x07$\x02\x02\xF6\u0110\x05(\x15\f\xF7\xF8\f\n\x02\x02\xF8\xF9\x07" + + "\x06\x02\x02\xF9\u0110\x05(\x15\v\xFA\xFB\f\t\x02\x02\xFB\xFC\x07%\x02" + + "\x02\xFC\u0110\x05(\x15\n\xFD\xFE\f\b\x02\x02\xFE\xFF\x07&\x02\x02\xFF" + + "\u0110\x05(\x15\t\u0100\u0101\f\x07\x02\x02\u0101\u0102\x07\'\x02\x02" + + "\u0102\u0110\x05(\x15\b\u0103\u0104\f\x13\x02\x02\u0104\u0105\x07\x18" + + "\x02\x02\u0105\u0106\x071\x02\x02\u0106\u0110\x07\x19\x02\x02\u0107\u0108" + + "\f\x12\x02\x02\u0108\u0110\t\b\x02\x02\u0109\u010A\f\x10\x02\x02\u010A" + + "\u010B\x07\x1E\x02\x02\u010B\u010C\x07\x11\x02\x02\u010C\u010D\x05(\x15" + + "\x02\u010D\u010E\x07\x13\x02\x02\u010E\u0110\x03\x02\x02\x02\u010F\xE8" + + "\x03\x02\x02\x02\u010F\xEB\x03\x02\x02\x02\u010F\xEE\x03\x02\x02\x02\u010F" + + "\xF1\x03\x02\x02\x02\u010F\xF4\x03\x02\x02\x02\u010F\xF7\x03\x02\x02\x02" + + "\u010F\xFA\x03\x02\x02\x02\u010F\xFD\x03\x02\x02\x02\u010F\u0100\x03\x02" + + "\x02\x02\u010F\u0103\x03\x02\x02\x02\u010F\u0107\x03\x02\x02\x02\u010F" + + "\u0109\x03\x02\x02\x02\u0110\u0113\x03\x02\x02\x02\u0111\u010F\x03\x02" + + "\x02\x02\u0111\u0112\x03\x02\x02\x02\u0112)\x03\x02\x02\x02\u0113\u0111" + + "\x03\x02\x02\x02\u0114\u011A\x07/\x02\x02\u0115\u011A\x05,\x17\x02\u0116" + + "\u011A\x074\x02\x02\u0117\u011A\x075\x02\x02\u0118\u011A\x076\x02\x02" + + "\u0119\u0114\x03\x02\x02\x02\u0119\u0115\x03\x02\x02\x02\u0119\u0116\x03" + + "\x02\x02\x02\u0119\u0117\x03\x02\x02\x02\u0119\u0118\x03\x02\x02\x02\u011A" + + "+\x03\x02\x02\x02\u011B\u011D\x071\x02\x02\u011C\u011E\x070\x02\x02\u011D" + + "\u011C\x03\x02\x02\x02\u011D\u011E\x03\x02\x02\x02\u011E-\x03\x02\x02" + + "\x02\u011F\u0120\t\t\x02\x02\u0120/\x03\x02\x02\x02\x1B3BER^imoz\x7F\x86" + + "\xA8\xB3\xB7\xB9\xC7\xCA\xDA\xDE\xE0\xE6\u010F\u0111\u0119\u011D"; + public static __ATN: ATN; + public static get _ATN(): ATN { + if (!CashScriptParser.__ATN) { + CashScriptParser.__ATN = new ATNDeserializer().deserialize(Utils.toCharArray(CashScriptParser._serializedATN)); + } + + return CashScriptParser.__ATN; + } + +} + +export class SourceFileContext extends ParserRuleContext { + public contractDefinition(): ContractDefinitionContext { + return this.getRuleContext(0, ContractDefinitionContext); + } + public EOF(): TerminalNode { return this.getToken(CashScriptParser.EOF, 0); } + public pragmaDirective(): PragmaDirectiveContext[]; + public pragmaDirective(i: number): PragmaDirectiveContext; + public pragmaDirective(i?: number): PragmaDirectiveContext | PragmaDirectiveContext[] { + if (i === undefined) { + return this.getRuleContexts(PragmaDirectiveContext); + } else { + return this.getRuleContext(i, PragmaDirectiveContext); + } + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return CashScriptParser.RULE_sourceFile; } + // @Override + public enterRule(listener: CashScriptListener): void { + if (listener.enterSourceFile) { + listener.enterSourceFile(this); + } + } + // @Override + public exitRule(listener: CashScriptListener): void { + if (listener.exitSourceFile) { + listener.exitSourceFile(this); + } + } + // @Override + public accept(visitor: CashScriptVisitor): Result { + if (visitor.visitSourceFile) { + return visitor.visitSourceFile(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class PragmaDirectiveContext extends ParserRuleContext { + public pragmaName(): PragmaNameContext { + return this.getRuleContext(0, PragmaNameContext); + } + public pragmaValue(): PragmaValueContext { + return this.getRuleContext(0, PragmaValueContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return CashScriptParser.RULE_pragmaDirective; } + // @Override + public enterRule(listener: CashScriptListener): void { + if (listener.enterPragmaDirective) { + listener.enterPragmaDirective(this); + } + } + // @Override + public exitRule(listener: CashScriptListener): void { + if (listener.exitPragmaDirective) { + listener.exitPragmaDirective(this); + } + } + // @Override + public accept(visitor: CashScriptVisitor): Result { + if (visitor.visitPragmaDirective) { + return visitor.visitPragmaDirective(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class PragmaNameContext extends ParserRuleContext { + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return CashScriptParser.RULE_pragmaName; } + // @Override + public enterRule(listener: CashScriptListener): void { + if (listener.enterPragmaName) { + listener.enterPragmaName(this); + } + } + // @Override + public exitRule(listener: CashScriptListener): void { + if (listener.exitPragmaName) { + listener.exitPragmaName(this); + } + } + // @Override + public accept(visitor: CashScriptVisitor): Result { + if (visitor.visitPragmaName) { + return visitor.visitPragmaName(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class PragmaValueContext extends ParserRuleContext { + public versionConstraint(): VersionConstraintContext[]; + public versionConstraint(i: number): VersionConstraintContext; + public versionConstraint(i?: number): VersionConstraintContext | VersionConstraintContext[] { + if (i === undefined) { + return this.getRuleContexts(VersionConstraintContext); + } else { + return this.getRuleContext(i, VersionConstraintContext); + } + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return CashScriptParser.RULE_pragmaValue; } + // @Override + public enterRule(listener: CashScriptListener): void { + if (listener.enterPragmaValue) { + listener.enterPragmaValue(this); + } + } + // @Override + public exitRule(listener: CashScriptListener): void { + if (listener.exitPragmaValue) { + listener.exitPragmaValue(this); + } + } + // @Override + public accept(visitor: CashScriptVisitor): Result { + if (visitor.visitPragmaValue) { + return visitor.visitPragmaValue(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class VersionConstraintContext extends ParserRuleContext { + public VersionLiteral(): TerminalNode { return this.getToken(CashScriptParser.VersionLiteral, 0); } + public versionOperator(): VersionOperatorContext | undefined { + return this.tryGetRuleContext(0, VersionOperatorContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return CashScriptParser.RULE_versionConstraint; } + // @Override + public enterRule(listener: CashScriptListener): void { + if (listener.enterVersionConstraint) { + listener.enterVersionConstraint(this); + } + } + // @Override + public exitRule(listener: CashScriptListener): void { + if (listener.exitVersionConstraint) { + listener.exitVersionConstraint(this); + } + } + // @Override + public accept(visitor: CashScriptVisitor): Result { + if (visitor.visitVersionConstraint) { + return visitor.visitVersionConstraint(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class VersionOperatorContext extends ParserRuleContext { + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return CashScriptParser.RULE_versionOperator; } + // @Override + public enterRule(listener: CashScriptListener): void { + if (listener.enterVersionOperator) { + listener.enterVersionOperator(this); + } + } + // @Override + public exitRule(listener: CashScriptListener): void { + if (listener.exitVersionOperator) { + listener.exitVersionOperator(this); + } + } + // @Override + public accept(visitor: CashScriptVisitor): Result { + if (visitor.visitVersionOperator) { + return visitor.visitVersionOperator(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ContractDefinitionContext extends ParserRuleContext { + public Identifier(): TerminalNode { return this.getToken(CashScriptParser.Identifier, 0); } + public parameterList(): ParameterListContext { + return this.getRuleContext(0, ParameterListContext); + } + public functionDefinition(): FunctionDefinitionContext[]; + public functionDefinition(i: number): FunctionDefinitionContext; + public functionDefinition(i?: number): FunctionDefinitionContext | FunctionDefinitionContext[] { + if (i === undefined) { + return this.getRuleContexts(FunctionDefinitionContext); + } else { + return this.getRuleContext(i, FunctionDefinitionContext); + } + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return CashScriptParser.RULE_contractDefinition; } + // @Override + public enterRule(listener: CashScriptListener): void { + if (listener.enterContractDefinition) { + listener.enterContractDefinition(this); + } + } + // @Override + public exitRule(listener: CashScriptListener): void { + if (listener.exitContractDefinition) { + listener.exitContractDefinition(this); + } + } + // @Override + public accept(visitor: CashScriptVisitor): Result { + if (visitor.visitContractDefinition) { + return visitor.visitContractDefinition(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class FunctionDefinitionContext extends ParserRuleContext { + public Identifier(): TerminalNode { return this.getToken(CashScriptParser.Identifier, 0); } + public parameterList(): ParameterListContext { + return this.getRuleContext(0, ParameterListContext); + } + public statement(): StatementContext[]; + public statement(i: number): StatementContext; + public statement(i?: number): StatementContext | StatementContext[] { + if (i === undefined) { + return this.getRuleContexts(StatementContext); + } else { + return this.getRuleContext(i, StatementContext); + } + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return CashScriptParser.RULE_functionDefinition; } + // @Override + public enterRule(listener: CashScriptListener): void { + if (listener.enterFunctionDefinition) { + listener.enterFunctionDefinition(this); + } + } + // @Override + public exitRule(listener: CashScriptListener): void { + if (listener.exitFunctionDefinition) { + listener.exitFunctionDefinition(this); + } + } + // @Override + public accept(visitor: CashScriptVisitor): Result { + if (visitor.visitFunctionDefinition) { + return visitor.visitFunctionDefinition(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ParameterListContext extends ParserRuleContext { + public parameter(): ParameterContext[]; + public parameter(i: number): ParameterContext; + public parameter(i?: number): ParameterContext | ParameterContext[] { + if (i === undefined) { + return this.getRuleContexts(ParameterContext); + } else { + return this.getRuleContext(i, ParameterContext); + } + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return CashScriptParser.RULE_parameterList; } + // @Override + public enterRule(listener: CashScriptListener): void { + if (listener.enterParameterList) { + listener.enterParameterList(this); + } + } + // @Override + public exitRule(listener: CashScriptListener): void { + if (listener.exitParameterList) { + listener.exitParameterList(this); + } + } + // @Override + public accept(visitor: CashScriptVisitor): Result { + if (visitor.visitParameterList) { + return visitor.visitParameterList(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ParameterContext extends ParserRuleContext { + public typeName(): TypeNameContext { + return this.getRuleContext(0, TypeNameContext); + } + public Identifier(): TerminalNode { return this.getToken(CashScriptParser.Identifier, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return CashScriptParser.RULE_parameter; } + // @Override + public enterRule(listener: CashScriptListener): void { + if (listener.enterParameter) { + listener.enterParameter(this); + } + } + // @Override + public exitRule(listener: CashScriptListener): void { + if (listener.exitParameter) { + listener.exitParameter(this); + } + } + // @Override + public accept(visitor: CashScriptVisitor): Result { + if (visitor.visitParameter) { + return visitor.visitParameter(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class BlockContext extends ParserRuleContext { + public statement(): StatementContext[]; + public statement(i: number): StatementContext; + public statement(i?: number): StatementContext | StatementContext[] { + if (i === undefined) { + return this.getRuleContexts(StatementContext); + } else { + return this.getRuleContext(i, StatementContext); + } + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return CashScriptParser.RULE_block; } + // @Override + public enterRule(listener: CashScriptListener): void { + if (listener.enterBlock) { + listener.enterBlock(this); + } + } + // @Override + public exitRule(listener: CashScriptListener): void { + if (listener.exitBlock) { + listener.exitBlock(this); + } + } + // @Override + public accept(visitor: CashScriptVisitor): Result { + if (visitor.visitBlock) { + return visitor.visitBlock(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class StatementContext extends ParserRuleContext { + public variableDefinition(): VariableDefinitionContext | undefined { + return this.tryGetRuleContext(0, VariableDefinitionContext); + } + public assignStatement(): AssignStatementContext | undefined { + return this.tryGetRuleContext(0, AssignStatementContext); + } + public timeOpStatement(): TimeOpStatementContext | undefined { + return this.tryGetRuleContext(0, TimeOpStatementContext); + } + public requireStatement(): RequireStatementContext | undefined { + return this.tryGetRuleContext(0, RequireStatementContext); + } + public ifStatement(): IfStatementContext | undefined { + return this.tryGetRuleContext(0, IfStatementContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return CashScriptParser.RULE_statement; } + // @Override + public enterRule(listener: CashScriptListener): void { + if (listener.enterStatement) { + listener.enterStatement(this); + } + } + // @Override + public exitRule(listener: CashScriptListener): void { + if (listener.exitStatement) { + listener.exitStatement(this); + } + } + // @Override + public accept(visitor: CashScriptVisitor): Result { + if (visitor.visitStatement) { + return visitor.visitStatement(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class VariableDefinitionContext extends ParserRuleContext { + public typeName(): TypeNameContext { + return this.getRuleContext(0, TypeNameContext); + } + public Identifier(): TerminalNode { return this.getToken(CashScriptParser.Identifier, 0); } + public expression(): ExpressionContext { + return this.getRuleContext(0, ExpressionContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return CashScriptParser.RULE_variableDefinition; } + // @Override + public enterRule(listener: CashScriptListener): void { + if (listener.enterVariableDefinition) { + listener.enterVariableDefinition(this); + } + } + // @Override + public exitRule(listener: CashScriptListener): void { + if (listener.exitVariableDefinition) { + listener.exitVariableDefinition(this); + } + } + // @Override + public accept(visitor: CashScriptVisitor): Result { + if (visitor.visitVariableDefinition) { + return visitor.visitVariableDefinition(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class AssignStatementContext extends ParserRuleContext { + public Identifier(): TerminalNode { return this.getToken(CashScriptParser.Identifier, 0); } + public expression(): ExpressionContext { + return this.getRuleContext(0, ExpressionContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return CashScriptParser.RULE_assignStatement; } + // @Override + public enterRule(listener: CashScriptListener): void { + if (listener.enterAssignStatement) { + listener.enterAssignStatement(this); + } + } + // @Override + public exitRule(listener: CashScriptListener): void { + if (listener.exitAssignStatement) { + listener.exitAssignStatement(this); + } + } + // @Override + public accept(visitor: CashScriptVisitor): Result { + if (visitor.visitAssignStatement) { + return visitor.visitAssignStatement(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class TimeOpStatementContext extends ParserRuleContext { + public TxVar(): TerminalNode { return this.getToken(CashScriptParser.TxVar, 0); } + public expression(): ExpressionContext { + return this.getRuleContext(0, ExpressionContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return CashScriptParser.RULE_timeOpStatement; } + // @Override + public enterRule(listener: CashScriptListener): void { + if (listener.enterTimeOpStatement) { + listener.enterTimeOpStatement(this); + } + } + // @Override + public exitRule(listener: CashScriptListener): void { + if (listener.exitTimeOpStatement) { + listener.exitTimeOpStatement(this); + } + } + // @Override + public accept(visitor: CashScriptVisitor): Result { + if (visitor.visitTimeOpStatement) { + return visitor.visitTimeOpStatement(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class RequireStatementContext extends ParserRuleContext { + public expression(): ExpressionContext { + return this.getRuleContext(0, ExpressionContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return CashScriptParser.RULE_requireStatement; } + // @Override + public enterRule(listener: CashScriptListener): void { + if (listener.enterRequireStatement) { + listener.enterRequireStatement(this); + } + } + // @Override + public exitRule(listener: CashScriptListener): void { + if (listener.exitRequireStatement) { + listener.exitRequireStatement(this); + } + } + // @Override + public accept(visitor: CashScriptVisitor): Result { + if (visitor.visitRequireStatement) { + return visitor.visitRequireStatement(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class IfStatementContext extends ParserRuleContext { + public _ifBlock!: BlockContext; + public _elseBlock!: BlockContext; + public expression(): ExpressionContext { + return this.getRuleContext(0, ExpressionContext); + } + public block(): BlockContext[]; + public block(i: number): BlockContext; + public block(i?: number): BlockContext | BlockContext[] { + if (i === undefined) { + return this.getRuleContexts(BlockContext); + } else { + return this.getRuleContext(i, BlockContext); + } + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return CashScriptParser.RULE_ifStatement; } + // @Override + public enterRule(listener: CashScriptListener): void { + if (listener.enterIfStatement) { + listener.enterIfStatement(this); + } + } + // @Override + public exitRule(listener: CashScriptListener): void { + if (listener.exitIfStatement) { + listener.exitIfStatement(this); + } + } + // @Override + public accept(visitor: CashScriptVisitor): Result { + if (visitor.visitIfStatement) { + return visitor.visitIfStatement(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class FunctionCallContext extends ParserRuleContext { + public Identifier(): TerminalNode { return this.getToken(CashScriptParser.Identifier, 0); } + public expressionList(): ExpressionListContext { + return this.getRuleContext(0, ExpressionListContext); + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return CashScriptParser.RULE_functionCall; } + // @Override + public enterRule(listener: CashScriptListener): void { + if (listener.enterFunctionCall) { + listener.enterFunctionCall(this); + } + } + // @Override + public exitRule(listener: CashScriptListener): void { + if (listener.exitFunctionCall) { + listener.exitFunctionCall(this); + } + } + // @Override + public accept(visitor: CashScriptVisitor): Result { + if (visitor.visitFunctionCall) { + return visitor.visitFunctionCall(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ExpressionListContext extends ParserRuleContext { + public expression(): ExpressionContext[]; + public expression(i: number): ExpressionContext; + public expression(i?: number): ExpressionContext | ExpressionContext[] { + if (i === undefined) { + return this.getRuleContexts(ExpressionContext); + } else { + return this.getRuleContext(i, ExpressionContext); + } + } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return CashScriptParser.RULE_expressionList; } + // @Override + public enterRule(listener: CashScriptListener): void { + if (listener.enterExpressionList) { + listener.enterExpressionList(this); + } + } + // @Override + public exitRule(listener: CashScriptListener): void { + if (listener.exitExpressionList) { + listener.exitExpressionList(this); + } + } + // @Override + public accept(visitor: CashScriptVisitor): Result { + if (visitor.visitExpressionList) { + return visitor.visitExpressionList(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class ExpressionContext extends ParserRuleContext { + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return CashScriptParser.RULE_expression; } + public copyFrom(ctx: ExpressionContext): void { + super.copyFrom(ctx); + } +} +export class ParenthesisedContext extends ExpressionContext { + public expression(): ExpressionContext { + return this.getRuleContext(0, ExpressionContext); + } + constructor(ctx: ExpressionContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: CashScriptListener): void { + if (listener.enterParenthesised) { + listener.enterParenthesised(this); + } + } + // @Override + public exitRule(listener: CashScriptListener): void { + if (listener.exitParenthesised) { + listener.exitParenthesised(this); + } + } + // @Override + public accept(visitor: CashScriptVisitor): Result { + if (visitor.visitParenthesised) { + return visitor.visitParenthesised(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class CastContext extends ExpressionContext { + public _castable!: ExpressionContext; + public _size!: ExpressionContext; + public typeName(): TypeNameContext { + return this.getRuleContext(0, TypeNameContext); + } + public expression(): ExpressionContext[]; + public expression(i: number): ExpressionContext; + public expression(i?: number): ExpressionContext | ExpressionContext[] { + if (i === undefined) { + return this.getRuleContexts(ExpressionContext); + } else { + return this.getRuleContext(i, ExpressionContext); + } + } + constructor(ctx: ExpressionContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: CashScriptListener): void { + if (listener.enterCast) { + listener.enterCast(this); + } + } + // @Override + public exitRule(listener: CashScriptListener): void { + if (listener.exitCast) { + listener.exitCast(this); + } + } + // @Override + public accept(visitor: CashScriptVisitor): Result { + if (visitor.visitCast) { + return visitor.visitCast(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class FunctionCallExpressionContext extends ExpressionContext { + public functionCall(): FunctionCallContext { + return this.getRuleContext(0, FunctionCallContext); + } + constructor(ctx: ExpressionContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: CashScriptListener): void { + if (listener.enterFunctionCallExpression) { + listener.enterFunctionCallExpression(this); + } + } + // @Override + public exitRule(listener: CashScriptListener): void { + if (listener.exitFunctionCallExpression) { + listener.exitFunctionCallExpression(this); + } + } + // @Override + public accept(visitor: CashScriptVisitor): Result { + if (visitor.visitFunctionCallExpression) { + return visitor.visitFunctionCallExpression(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class InstantiationContext extends ExpressionContext { + public Identifier(): TerminalNode { return this.getToken(CashScriptParser.Identifier, 0); } + public expressionList(): ExpressionListContext { + return this.getRuleContext(0, ExpressionListContext); + } + constructor(ctx: ExpressionContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: CashScriptListener): void { + if (listener.enterInstantiation) { + listener.enterInstantiation(this); + } + } + // @Override + public exitRule(listener: CashScriptListener): void { + if (listener.exitInstantiation) { + listener.exitInstantiation(this); + } + } + // @Override + public accept(visitor: CashScriptVisitor): Result { + if (visitor.visitInstantiation) { + return visitor.visitInstantiation(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class TupleIndexOpContext extends ExpressionContext { + public _index!: Token; + public expression(): ExpressionContext { + return this.getRuleContext(0, ExpressionContext); + } + public NumberLiteral(): TerminalNode { return this.getToken(CashScriptParser.NumberLiteral, 0); } + constructor(ctx: ExpressionContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: CashScriptListener): void { + if (listener.enterTupleIndexOp) { + listener.enterTupleIndexOp(this); + } + } + // @Override + public exitRule(listener: CashScriptListener): void { + if (listener.exitTupleIndexOp) { + listener.exitTupleIndexOp(this); + } + } + // @Override + public accept(visitor: CashScriptVisitor): Result { + if (visitor.visitTupleIndexOp) { + return visitor.visitTupleIndexOp(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class UnaryOpContext extends ExpressionContext { + public _op!: Token; + public expression(): ExpressionContext { + return this.getRuleContext(0, ExpressionContext); + } + constructor(ctx: ExpressionContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: CashScriptListener): void { + if (listener.enterUnaryOp) { + listener.enterUnaryOp(this); + } + } + // @Override + public exitRule(listener: CashScriptListener): void { + if (listener.exitUnaryOp) { + listener.exitUnaryOp(this); + } + } + // @Override + public accept(visitor: CashScriptVisitor): Result { + if (visitor.visitUnaryOp) { + return visitor.visitUnaryOp(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class BinaryOpContext extends ExpressionContext { + public _left!: ExpressionContext; + public _op!: Token; + public _right!: ExpressionContext; + public expression(): ExpressionContext[]; + public expression(i: number): ExpressionContext; + public expression(i?: number): ExpressionContext | ExpressionContext[] { + if (i === undefined) { + return this.getRuleContexts(ExpressionContext); + } else { + return this.getRuleContext(i, ExpressionContext); + } + } + constructor(ctx: ExpressionContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: CashScriptListener): void { + if (listener.enterBinaryOp) { + listener.enterBinaryOp(this); + } + } + // @Override + public exitRule(listener: CashScriptListener): void { + if (listener.exitBinaryOp) { + listener.exitBinaryOp(this); + } + } + // @Override + public accept(visitor: CashScriptVisitor): Result { + if (visitor.visitBinaryOp) { + return visitor.visitBinaryOp(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class ArrayContext extends ExpressionContext { + public expression(): ExpressionContext[]; + public expression(i: number): ExpressionContext; + public expression(i?: number): ExpressionContext | ExpressionContext[] { + if (i === undefined) { + return this.getRuleContexts(ExpressionContext); + } else { + return this.getRuleContext(i, ExpressionContext); + } + } + constructor(ctx: ExpressionContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: CashScriptListener): void { + if (listener.enterArray) { + listener.enterArray(this); + } + } + // @Override + public exitRule(listener: CashScriptListener): void { + if (listener.exitArray) { + listener.exitArray(this); + } + } + // @Override + public accept(visitor: CashScriptVisitor): Result { + if (visitor.visitArray) { + return visitor.visitArray(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class PreimageFieldContext extends ExpressionContext { + public PreimageField(): TerminalNode { return this.getToken(CashScriptParser.PreimageField, 0); } + constructor(ctx: ExpressionContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: CashScriptListener): void { + if (listener.enterPreimageField) { + listener.enterPreimageField(this); + } + } + // @Override + public exitRule(listener: CashScriptListener): void { + if (listener.exitPreimageField) { + listener.exitPreimageField(this); + } + } + // @Override + public accept(visitor: CashScriptVisitor): Result { + if (visitor.visitPreimageField) { + return visitor.visitPreimageField(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class IdentifierContext extends ExpressionContext { + public Identifier(): TerminalNode { return this.getToken(CashScriptParser.Identifier, 0); } + constructor(ctx: ExpressionContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: CashScriptListener): void { + if (listener.enterIdentifier) { + listener.enterIdentifier(this); + } + } + // @Override + public exitRule(listener: CashScriptListener): void { + if (listener.exitIdentifier) { + listener.exitIdentifier(this); + } + } + // @Override + public accept(visitor: CashScriptVisitor): Result { + if (visitor.visitIdentifier) { + return visitor.visitIdentifier(this); + } else { + return visitor.visitChildren(this); + } + } +} +export class LiteralExpressionContext extends ExpressionContext { + public literal(): LiteralContext { + return this.getRuleContext(0, LiteralContext); + } + constructor(ctx: ExpressionContext) { + super(ctx.parent, ctx.invokingState); + this.copyFrom(ctx); + } + // @Override + public enterRule(listener: CashScriptListener): void { + if (listener.enterLiteralExpression) { + listener.enterLiteralExpression(this); + } + } + // @Override + public exitRule(listener: CashScriptListener): void { + if (listener.exitLiteralExpression) { + listener.exitLiteralExpression(this); + } + } + // @Override + public accept(visitor: CashScriptVisitor): Result { + if (visitor.visitLiteralExpression) { + return visitor.visitLiteralExpression(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class LiteralContext extends ParserRuleContext { + public BooleanLiteral(): TerminalNode | undefined { return this.tryGetToken(CashScriptParser.BooleanLiteral, 0); } + public numberLiteral(): NumberLiteralContext | undefined { + return this.tryGetRuleContext(0, NumberLiteralContext); + } + public StringLiteral(): TerminalNode | undefined { return this.tryGetToken(CashScriptParser.StringLiteral, 0); } + public DateLiteral(): TerminalNode | undefined { return this.tryGetToken(CashScriptParser.DateLiteral, 0); } + public HexLiteral(): TerminalNode | undefined { return this.tryGetToken(CashScriptParser.HexLiteral, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return CashScriptParser.RULE_literal; } + // @Override + public enterRule(listener: CashScriptListener): void { + if (listener.enterLiteral) { + listener.enterLiteral(this); + } + } + // @Override + public exitRule(listener: CashScriptListener): void { + if (listener.exitLiteral) { + listener.exitLiteral(this); + } + } + // @Override + public accept(visitor: CashScriptVisitor): Result { + if (visitor.visitLiteral) { + return visitor.visitLiteral(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class NumberLiteralContext extends ParserRuleContext { + public NumberLiteral(): TerminalNode { return this.getToken(CashScriptParser.NumberLiteral, 0); } + public NumberUnit(): TerminalNode | undefined { return this.tryGetToken(CashScriptParser.NumberUnit, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return CashScriptParser.RULE_numberLiteral; } + // @Override + public enterRule(listener: CashScriptListener): void { + if (listener.enterNumberLiteral) { + listener.enterNumberLiteral(this); + } + } + // @Override + public exitRule(listener: CashScriptListener): void { + if (listener.exitNumberLiteral) { + listener.exitNumberLiteral(this); + } + } + // @Override + public accept(visitor: CashScriptVisitor): Result { + if (visitor.visitNumberLiteral) { + return visitor.visitNumberLiteral(this); + } else { + return visitor.visitChildren(this); + } + } +} + + +export class TypeNameContext extends ParserRuleContext { + public Bytes(): TerminalNode { return this.getToken(CashScriptParser.Bytes, 0); } + constructor(parent: ParserRuleContext | undefined, invokingState: number) { + super(parent, invokingState); + } + // @Override + public get ruleIndex(): number { return CashScriptParser.RULE_typeName; } + // @Override + public enterRule(listener: CashScriptListener): void { + if (listener.enterTypeName) { + listener.enterTypeName(this); + } + } + // @Override + public exitRule(listener: CashScriptListener): void { + if (listener.exitTypeName) { + listener.exitTypeName(this); + } + } + // @Override + public accept(visitor: CashScriptVisitor): Result { + if (visitor.visitTypeName) { + return visitor.visitTypeName(this); + } else { + return visitor.visitChildren(this); + } + } +} + + diff --git a/vscode-cashscript/src/CashscriptLinter/grammar/CashScriptVisitor.ts b/vscode-cashscript/src/CashscriptLinter/grammar/CashScriptVisitor.ts new file mode 100644 index 0000000..ff4c973 --- /dev/null +++ b/vscode-cashscript/src/CashscriptLinter/grammar/CashScriptVisitor.ts @@ -0,0 +1,299 @@ +// Generated from grammar/CashScript.g4 by ANTLR 4.9.0-SNAPSHOT + + +import { ParseTreeVisitor } from "antlr4ts/tree/ParseTreeVisitor"; + +import { ParenthesisedContext } from "./CashScriptParser"; +import { CastContext } from "./CashScriptParser"; +import { FunctionCallExpressionContext } from "./CashScriptParser"; +import { InstantiationContext } from "./CashScriptParser"; +import { TupleIndexOpContext } from "./CashScriptParser"; +import { UnaryOpContext } from "./CashScriptParser"; +import { BinaryOpContext } from "./CashScriptParser"; +import { ArrayContext } from "./CashScriptParser"; +import { PreimageFieldContext } from "./CashScriptParser"; +import { IdentifierContext } from "./CashScriptParser"; +import { LiteralExpressionContext } from "./CashScriptParser"; +import { SourceFileContext } from "./CashScriptParser"; +import { PragmaDirectiveContext } from "./CashScriptParser"; +import { PragmaNameContext } from "./CashScriptParser"; +import { PragmaValueContext } from "./CashScriptParser"; +import { VersionConstraintContext } from "./CashScriptParser"; +import { VersionOperatorContext } from "./CashScriptParser"; +import { ContractDefinitionContext } from "./CashScriptParser"; +import { FunctionDefinitionContext } from "./CashScriptParser"; +import { ParameterListContext } from "./CashScriptParser"; +import { ParameterContext } from "./CashScriptParser"; +import { BlockContext } from "./CashScriptParser"; +import { StatementContext } from "./CashScriptParser"; +import { VariableDefinitionContext } from "./CashScriptParser"; +import { AssignStatementContext } from "./CashScriptParser"; +import { TimeOpStatementContext } from "./CashScriptParser"; +import { RequireStatementContext } from "./CashScriptParser"; +import { IfStatementContext } from "./CashScriptParser"; +import { FunctionCallContext } from "./CashScriptParser"; +import { ExpressionListContext } from "./CashScriptParser"; +import { ExpressionContext } from "./CashScriptParser"; +import { LiteralContext } from "./CashScriptParser"; +import { NumberLiteralContext } from "./CashScriptParser"; +import { TypeNameContext } from "./CashScriptParser"; + + +/** + * This interface defines a complete generic visitor for a parse tree produced + * by `CashScriptParser`. + * + * @param The return type of the visit operation. Use `void` for + * operations with no return type. + */ +export interface CashScriptVisitor extends ParseTreeVisitor { + /** + * Visit a parse tree produced by the `Parenthesised` + * labeled alternative in `CashScriptParser.expression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitParenthesised?: (ctx: ParenthesisedContext) => Result; + + /** + * Visit a parse tree produced by the `Cast` + * labeled alternative in `CashScriptParser.expression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitCast?: (ctx: CastContext) => Result; + + /** + * Visit a parse tree produced by the `FunctionCallExpression` + * labeled alternative in `CashScriptParser.expression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitFunctionCallExpression?: (ctx: FunctionCallExpressionContext) => Result; + + /** + * Visit a parse tree produced by the `Instantiation` + * labeled alternative in `CashScriptParser.expression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitInstantiation?: (ctx: InstantiationContext) => Result; + + /** + * Visit a parse tree produced by the `TupleIndexOp` + * labeled alternative in `CashScriptParser.expression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTupleIndexOp?: (ctx: TupleIndexOpContext) => Result; + + /** + * Visit a parse tree produced by the `UnaryOp` + * labeled alternative in `CashScriptParser.expression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitUnaryOp?: (ctx: UnaryOpContext) => Result; + + /** + * Visit a parse tree produced by the `BinaryOp` + * labeled alternative in `CashScriptParser.expression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitBinaryOp?: (ctx: BinaryOpContext) => Result; + + /** + * Visit a parse tree produced by the `Array` + * labeled alternative in `CashScriptParser.expression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitArray?: (ctx: ArrayContext) => Result; + + /** + * Visit a parse tree produced by the `PreimageField` + * labeled alternative in `CashScriptParser.expression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPreimageField?: (ctx: PreimageFieldContext) => Result; + + /** + * Visit a parse tree produced by the `Identifier` + * labeled alternative in `CashScriptParser.expression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitIdentifier?: (ctx: IdentifierContext) => Result; + + /** + * Visit a parse tree produced by the `LiteralExpression` + * labeled alternative in `CashScriptParser.expression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitLiteralExpression?: (ctx: LiteralExpressionContext) => Result; + + /** + * Visit a parse tree produced by `CashScriptParser.sourceFile`. + * @param ctx the parse tree + * @return the visitor result + */ + visitSourceFile?: (ctx: SourceFileContext) => Result; + + /** + * Visit a parse tree produced by `CashScriptParser.pragmaDirective`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPragmaDirective?: (ctx: PragmaDirectiveContext) => Result; + + /** + * Visit a parse tree produced by `CashScriptParser.pragmaName`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPragmaName?: (ctx: PragmaNameContext) => Result; + + /** + * Visit a parse tree produced by `CashScriptParser.pragmaValue`. + * @param ctx the parse tree + * @return the visitor result + */ + visitPragmaValue?: (ctx: PragmaValueContext) => Result; + + /** + * Visit a parse tree produced by `CashScriptParser.versionConstraint`. + * @param ctx the parse tree + * @return the visitor result + */ + visitVersionConstraint?: (ctx: VersionConstraintContext) => Result; + + /** + * Visit a parse tree produced by `CashScriptParser.versionOperator`. + * @param ctx the parse tree + * @return the visitor result + */ + visitVersionOperator?: (ctx: VersionOperatorContext) => Result; + + /** + * Visit a parse tree produced by `CashScriptParser.contractDefinition`. + * @param ctx the parse tree + * @return the visitor result + */ + visitContractDefinition?: (ctx: ContractDefinitionContext) => Result; + + /** + * Visit a parse tree produced by `CashScriptParser.functionDefinition`. + * @param ctx the parse tree + * @return the visitor result + */ + visitFunctionDefinition?: (ctx: FunctionDefinitionContext) => Result; + + /** + * Visit a parse tree produced by `CashScriptParser.parameterList`. + * @param ctx the parse tree + * @return the visitor result + */ + visitParameterList?: (ctx: ParameterListContext) => Result; + + /** + * Visit a parse tree produced by `CashScriptParser.parameter`. + * @param ctx the parse tree + * @return the visitor result + */ + visitParameter?: (ctx: ParameterContext) => Result; + + /** + * Visit a parse tree produced by `CashScriptParser.block`. + * @param ctx the parse tree + * @return the visitor result + */ + visitBlock?: (ctx: BlockContext) => Result; + + /** + * Visit a parse tree produced by `CashScriptParser.statement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitStatement?: (ctx: StatementContext) => Result; + + /** + * Visit a parse tree produced by `CashScriptParser.variableDefinition`. + * @param ctx the parse tree + * @return the visitor result + */ + visitVariableDefinition?: (ctx: VariableDefinitionContext) => Result; + + /** + * Visit a parse tree produced by `CashScriptParser.assignStatement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitAssignStatement?: (ctx: AssignStatementContext) => Result; + + /** + * Visit a parse tree produced by `CashScriptParser.timeOpStatement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTimeOpStatement?: (ctx: TimeOpStatementContext) => Result; + + /** + * Visit a parse tree produced by `CashScriptParser.requireStatement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitRequireStatement?: (ctx: RequireStatementContext) => Result; + + /** + * Visit a parse tree produced by `CashScriptParser.ifStatement`. + * @param ctx the parse tree + * @return the visitor result + */ + visitIfStatement?: (ctx: IfStatementContext) => Result; + + /** + * Visit a parse tree produced by `CashScriptParser.functionCall`. + * @param ctx the parse tree + * @return the visitor result + */ + visitFunctionCall?: (ctx: FunctionCallContext) => Result; + + /** + * Visit a parse tree produced by `CashScriptParser.expressionList`. + * @param ctx the parse tree + * @return the visitor result + */ + visitExpressionList?: (ctx: ExpressionListContext) => Result; + + /** + * Visit a parse tree produced by `CashScriptParser.expression`. + * @param ctx the parse tree + * @return the visitor result + */ + visitExpression?: (ctx: ExpressionContext) => Result; + + /** + * Visit a parse tree produced by `CashScriptParser.literal`. + * @param ctx the parse tree + * @return the visitor result + */ + visitLiteral?: (ctx: LiteralContext) => Result; + + /** + * Visit a parse tree produced by `CashScriptParser.numberLiteral`. + * @param ctx the parse tree + * @return the visitor result + */ + visitNumberLiteral?: (ctx: NumberLiteralContext) => Result; + + /** + * Visit a parse tree produced by `CashScriptParser.typeName`. + * @param ctx the parse tree + * @return the visitor result + */ + visitTypeName?: (ctx: TypeNameContext) => Result; +} + diff --git a/vscode-cashscript/src/extension.ts b/vscode-cashscript/src/extension.ts index 476483d..61be341 100644 --- a/vscode-cashscript/src/extension.ts +++ b/vscode-cashscript/src/extension.ts @@ -50,7 +50,7 @@ export function activate(context: ExtensionContext){ vscode.languages.registerHoverProvider('cashscript', new CashscriptHoverProvider()) vscode.languages.registerSignatureHelpProvider('cashscript', new CashscriptSignatureCompleter(), '('); - vscode.languages.registerCompletionItemProvider('cashscript', new CashscriptCompletionProvider(), '.') + vscode.languages.registerCompletionItemProvider('cashscript', new CashscriptCompletionProvider(), '.'); client.start(); } diff --git a/vscode-cashscript/src/server.ts b/vscode-cashscript/src/server.ts index bcb04c1..c49c734 100644 --- a/vscode-cashscript/src/server.ts +++ b/vscode-cashscript/src/server.ts @@ -1,14 +1,62 @@ import { createConnection, + InitializeParams, + InitializeResult, ProposedFeatures, TextDocuments } from 'vscode-languageserver/node' import { TextDocument } from 'vscode-languageserver-textdocument'; +import CashscriptLinter from './CashscriptLinter/CashscriptLinter'; let connection = createConnection(ProposedFeatures.all); let documents: TextDocuments = new TextDocuments(TextDocument); -// Connection stuff here +let isValidatingFile = false; // stop excessive checks for performace +let validationDelay = 750 // Delay in ms for checking file + + +// Initialize connection +connection.onInitialize((params: InitializeParams) => { + let capabilities = params.capabilities; + + const result: InitializeResult = { + capabilities: { + + } + } + + return result; +}); + + + + +/** + * On document change + * - validate + */ +documents.onDidChangeContent(change => { + if(!isValidatingFile){ + isValidatingFile = true; + setTimeout(() => validateDocument(change.document), validationDelay) + } +}); + + +/** + * Reports diagnostics to language client + * + * @param textDocument vscode-languageserver textDocument + */ +async function validateDocument(textDocument:TextDocument): Promise { + const code = textDocument.getText(); + const diagnostics = CashscriptLinter.getDiagnostics(code); + connection.sendDiagnostics({ + uri:textDocument.uri, + diagnostics + }); + isValidatingFile = false; +} From a3afd53c15fddfe9ba1ea4f4e6d4a4c234797316 Mon Sep 17 00:00:00 2001 From: Nathaniel Cherian Date: Tue, 8 Jun 2021 14:10:03 -0700 Subject: [PATCH 09/14] compile command --- client/testFixture/P2PKH.cash | 6 +- client/testFixture/P2PKH.json | 6 +- client/testFixture/p.json | 4 +- vscode-cashscript/package-lock.json | 139 ++++++++++++++++++++++++++++ vscode-cashscript/package.json | 28 +++++- vscode-cashscript/src/extension.ts | 38 +++++++- vscode-cashscript/src/server.ts | 2 - 7 files changed, 210 insertions(+), 13 deletions(-) diff --git a/client/testFixture/P2PKH.cash b/client/testFixture/P2PKH.cash index fb63277..1b9e665 100644 --- a/client/testFixture/P2PKH.cash +++ b/client/testFixture/P2PKH.cash @@ -5,9 +5,9 @@ contract P2PKH(bytes20 pkh) { require(hash160(pk) == pkh); require(checkSig(s, pk)); require(checkSig(s, pk)); - int d = 2; - require(checkDataSig()); - require(checkDataSig(s, pk)); + // int d = 2; + // require(checkDataSig()); + // require(checkDataSig(s, pk)); } diff --git a/client/testFixture/P2PKH.json b/client/testFixture/P2PKH.json index 4389526..86488e4 100644 --- a/client/testFixture/P2PKH.json +++ b/client/testFixture/P2PKH.json @@ -23,10 +23,10 @@ } ], "bytecode": "OP_OVER OP_HASH160 OP_EQUALVERIFY OP_2DUP OP_CHECKSIGVERIFY OP_CHECKSIG", - "source": "pragma cashscript ^0.6.0;\r\n\r\ncontract P2PKH(bytes20 pkh) {\r\n function spend( pubkey pk , sig s) {\r\n require(hash160(pk) == pkh);\r\n require(checkSig(s, pk));\r\n require(checkSig(s, pk));\r\n }\r\n\r\n}\r\n", + "source": "pragma cashscript ^0.6.0;\r\n\r\ncontract P2PKH(bytes20 pkh) {\r\n function spend( pubkey pk , sig s) {\r\n require(hash160(pk) == pkh);\r\n require(checkSig(s, pk));\r\n require(checkSig(s, pk));\r\n // int d = 2;\r\n // require(checkDataSig());\r\n // require(checkDataSig(s, pk));\r\n }\r\n\r\n\r\n}\r\n\r\n", "compiler": { "name": "cashc", - "version": "0.6.0" + "version": "0.6.3" }, - "updatedAt": "2021-05-01T22:10:47.753Z" + "updatedAt": "2021-06-08T21:07:14.555Z" } \ No newline at end of file diff --git a/client/testFixture/p.json b/client/testFixture/p.json index 832fdee..0e52c40 100644 --- a/client/testFixture/p.json +++ b/client/testFixture/p.json @@ -27,7 +27,7 @@ "source": "pragma cashscript ^0.6.0;\r\n\r\ncontract MyContract() {\r\n \r\n function myFunction(int num) {\r\n require(num == 1);\r\n }\r\n\r\n function spend(bool b) {\r\n require(b == true);\r\n }\r\n\r\n}", "compiler": { "name": "cashc", - "version": "0.6.0" + "version": "0.6.3" }, - "updatedAt": "2021-04-28T15:57:05.356Z" + "updatedAt": "2021-06-08T21:07:20.075Z" } \ No newline at end of file diff --git a/vscode-cashscript/package-lock.json b/vscode-cashscript/package-lock.json index 005fcf7..5415dbc 100644 --- a/vscode-cashscript/package-lock.json +++ b/vscode-cashscript/package-lock.json @@ -4,11 +4,38 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "@bitauth/libauth": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/@bitauth/libauth/-/libauth-1.18.1.tgz", + "integrity": "sha512-s7evdGbdGAnGkv7xt6mCbcWTTNvburc1Z9EX/8JKwcRLqofjDs7VAEz+RP3a8OGEo4MWFV6Ydqu/BeJjIA7Kdg==" + }, + "@cashscript/utils": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@cashscript/utils/-/utils-0.6.3.tgz", + "integrity": "sha512-DwWxgAM/XRmpGaeiQ0qZUQKw0C+eDNnjvkwo6hWux1JCY5Sv/HyysEIF1wk+mpAmV4nzpnfuAsU6muu/aF7B0w==", + "requires": { + "@bitauth/libauth": "^1.18.1", + "hash.js": "^1.1.7" + } + }, "@tootallnate/once": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" }, + "@types/node": { + "version": "15.12.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.12.2.tgz", + "integrity": "sha512-zjQ69G564OCIWIOHSXyQEEDpdpGl+G348RAKY0XXy9Z5kU9Vzv1GMNnkar/ZJ8dzXB3COzD9Mo9NtRZ4xfgUww==" + }, + "@types/ws": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.4.tgz", + "integrity": "sha512-d/7W23JAXPodQNbOZNXvl2K+bqAQrCMwlh/nuQsPSQk6Fq0opHoPrUw43aHsvSbIiQPr8Of2hkFbnz1XBFVyZQ==", + "requires": { + "@types/node": "*" + } + }, "agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", @@ -22,11 +49,37 @@ "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==" }, + "async-mutex": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.2.6.tgz", + "integrity": "sha512-Hs4R+4SPgamu6rSGW8C7cV9gaWUKEHykfzCCvIRuaVv636Ju10ZdeUbvb4TBEW0INuq2DHZqXbK4Nd3yG4RaRw==", + "requires": { + "tslib": "^2.0.0" + } + }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, + "bip68": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/bip68/-/bip68-1.0.4.tgz", + "integrity": "sha512-O1htyufFTYy3EO0JkHg2CLykdXEtV2ssqw47Gq9A0WByp662xpJnMEB9m43LZjsSDjIAOozWRExlFQk2hlV1XQ==" + }, + "bitcoin-rpc-promise-retry": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/bitcoin-rpc-promise-retry/-/bitcoin-rpc-promise-retry-1.3.0.tgz", + "integrity": "sha512-xhldBhYwiUNY4spzkXXcU9LEq+nbSKJ5tvYWEUe/XTCe1VYoe8tEb5jJq4MBA2d+5egiUOA+P1QTTYm1FqPtOg==", + "requires": { + "bitcoind-rpc": "^0.8.0" + } + }, + "bitcoind-rpc": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/bitcoind-rpc/-/bitcoind-rpc-0.8.1.tgz", + "integrity": "sha512-NfhykAT/x/P1SOiog8UzltvTiv6A6d2X5VWJ3UjGeAqFLXv+IYHy+E4fFCBmgQRyIb1EIcyIZK1SVpSOGRHsaw==" + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -46,6 +99,46 @@ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" }, + "cashc": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/cashc/-/cashc-0.6.3.tgz", + "integrity": "sha512-Jd19Em2y3fMK4Xtr9citQqVRlSUMjZG+PVPRSGM5BVcJaYuLOLzHL1iAXAz+RIvkMvaFMaownpOP4yFyMJRWIA==", + "requires": { + "@bitauth/libauth": "^1.18.1", + "@cashscript/utils": "^0.6.3", + "antlr4ts": "^0.5.0-alpha.4", + "commander": "^7.1.0", + "semver": "^7.3.4" + }, + "dependencies": { + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "cashscript": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/cashscript/-/cashscript-0.6.3.tgz", + "integrity": "sha512-ISWioARsX/TnUJrcU6w0WsBW5HCY5GKxM2F065AovGf9z7XhmK+UeQnch+mKVUzV96BzPw0HUuTAQpDvFqbMeg==", + "requires": { + "@bitauth/libauth": "^1.18.1", + "@cashscript/utils": "^0.6.3", + "bip68": "^1.0.4", + "bitcoin-rpc-promise-retry": "^1.3.0", + "delay": "^5.0.0", + "electrum-cash": "^2.0.6" + } + }, "commander": { "version": "2.15.1", "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", @@ -64,11 +157,28 @@ "ms": "2.1.2" } }, + "delay": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/delay/-/delay-5.0.0.tgz", + "integrity": "sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==" + }, "diff": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==" }, + "electrum-cash": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/electrum-cash/-/electrum-cash-2.0.7.tgz", + "integrity": "sha512-AHgrJR7WVdo8mWH3E1Us1VygOUvLuJVFJnItMbj/thsApqecqxZznzhlqMjc+mHhole6S1xq/nOkmRo5OAtRow==", + "requires": { + "@types/ws": "^7.2.6", + "async-mutex": "^0.2.4", + "debug": "^4.1.1", + "isomorphic-ws": "^4.0.1", + "ws": "^7.3.1" + } + }, "es6-promise": { "version": "4.2.8", "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", @@ -115,6 +225,15 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, "he": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", @@ -153,6 +272,11 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, + "isomorphic-ws": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz", + "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==" + }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -161,6 +285,11 @@ "yallist": "^4.0.0" } }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -273,6 +402,11 @@ "has-flag": "^3.0.0" } }, + "tslib": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", + "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" + }, "vscode": { "version": "1.1.37", "resolved": "https://registry.npmjs.org/vscode/-/vscode-1.1.37.tgz", @@ -394,6 +528,11 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, + "ws": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==" + }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", diff --git a/vscode-cashscript/package.json b/vscode-cashscript/package.json index 59dcde0..1208ef0 100644 --- a/vscode-cashscript/package.json +++ b/vscode-cashscript/package.json @@ -10,7 +10,8 @@ "Programming Languages" ], "activationEvents": [ - "onLanguage:cashscript" + "onLanguage:cashscript", + "onCommand:cashscript.compile" ], "main": "./out/src/extension", "scripts": { @@ -45,10 +46,33 @@ "language": "cashscript", "path": "./snippets/cashscript.snippets.json" } - ] + ], + "commands": [ + { + "command": "cashscript.compile", + "title": "Compile Contract" + } + ], + "keybindings":[ + { + "command": "cashscript.compile", + "key": "ctrl+f5" + } + ], + "menus": { + "editor/title": [ + { + "when": "resourceLangId == cashscript", + "command": "cashscript.compile", + "group": "navigation" + } + ] + } }, "dependencies": { "antlr4ts": "^0.5.0-alpha.4", + "cashc": "^0.6.3", + "cashscript": "^0.6.3", "vscode": "^1.1.37", "vscode-languageclient": "^7.0.0", "vscode-languageserver": "^7.0.0", diff --git a/vscode-cashscript/src/extension.ts b/vscode-cashscript/src/extension.ts index 61be341..0f21637 100644 --- a/vscode-cashscript/src/extension.ts +++ b/vscode-cashscript/src/extension.ts @@ -1,10 +1,17 @@ import * as path from 'path'; import * as vscode from 'vscode'; +import * as fs from 'fs'; import { ExtensionContext, workspace } from 'vscode'; import { LanguageClient, LanguageClientOptions, ServerOptions, TransportKind } from 'vscode-languageclient/node'; import CashscriptHoverProvider from './CashscriptHoverProvider'; import CashscriptSignatureCompleter from './CashscriptSignatureCompleter'; import CashscriptCompletionProvider from './CashscriptCompletionProvider'; +import { compileFile } from 'cashc'; +import { + asmToScript, + calculateBytesize, + countOpcodes, + } from '@cashscript/utils'; let client: LanguageClient; @@ -46,8 +53,37 @@ export function activate(context: ExtensionContext){ clientOptions ) - // Subscribe to events here + + // Subscribe to Commands here + context.subscriptions.push(vscode.commands.registerCommand('cashscript.compile', () => { + var filename = vscode.window.activeTextEditor.document.fileName; + try{ + const artifact = compileFile(filename); + const artifactJSON = JSON.stringify(artifact, null, 2); + filename = filename.split('.').slice(0, -1).join('.') + ".json" + fs.writeFile(filename, artifactJSON, (err) => { + if(err){ + throw err + } + }); + const script = asmToScript(artifact.bytecode); + const opcount = countOpcodes(script); + const bytesize = calculateBytesize(script); + if(opcount > 201){ + vscode.window.showWarningMessage('Warning: Your contract\'s opcount is over the limit of 201 and will not be accepted by the BCH network'); + } + if(bytesize > 520){ + vscode.window.showWarningMessage('Warning: Your contract\'s bytesize is over the limit of 520 and will not be accepted by the BCH network'); + } + vscode.window.showInformationMessage(`Compiled contract to artifact '${path.basename(filename)}'`); + console.log(`Compiled contact to ${filename}`); + }catch(e){ + vscode.window.showErrorMessage(`Unable to compile '${path.basename(filename)}', ` + e); + } + })); + + // Subscribe to events here vscode.languages.registerHoverProvider('cashscript', new CashscriptHoverProvider()) vscode.languages.registerSignatureHelpProvider('cashscript', new CashscriptSignatureCompleter(), '('); vscode.languages.registerCompletionItemProvider('cashscript', new CashscriptCompletionProvider(), '.'); diff --git a/vscode-cashscript/src/server.ts b/vscode-cashscript/src/server.ts index c49c734..63997cf 100644 --- a/vscode-cashscript/src/server.ts +++ b/vscode-cashscript/src/server.ts @@ -29,8 +29,6 @@ connection.onInitialize((params: InitializeParams) => { }); - - /** * On document change * - validate From 9f829c312c15f56efe8f738c898518f9fa10ec6d Mon Sep 17 00:00:00 2001 From: Nathaniel Cherian Date: Wed, 9 Jun 2021 08:42:29 -0700 Subject: [PATCH 10/14] fix dependencies --- client/testFixture/P2PKH.json | 2 +- vscode-cashscript/package-lock.json | 394 +++++++++++++++------------- vscode-cashscript/package.json | 40 +-- vscode-cashscript/tsconfig.json | 20 +- 4 files changed, 242 insertions(+), 214 deletions(-) diff --git a/client/testFixture/P2PKH.json b/client/testFixture/P2PKH.json index 86488e4..2fdfc7c 100644 --- a/client/testFixture/P2PKH.json +++ b/client/testFixture/P2PKH.json @@ -28,5 +28,5 @@ "name": "cashc", "version": "0.6.3" }, - "updatedAt": "2021-06-08T21:07:14.555Z" + "updatedAt": "2021-06-09T15:38:43.124Z" } \ No newline at end of file diff --git a/vscode-cashscript/package-lock.json b/vscode-cashscript/package-lock.json index 5415dbc..fde33c4 100644 --- a/vscode-cashscript/package-lock.json +++ b/vscode-cashscript/package-lock.json @@ -21,13 +21,20 @@ "@tootallnate/once": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true }, "@types/node": { "version": "15.12.2", "resolved": "https://registry.npmjs.org/@types/node/-/node-15.12.2.tgz", "integrity": "sha512-zjQ69G564OCIWIOHSXyQEEDpdpGl+G348RAKY0XXy9Z5kU9Vzv1GMNnkar/ZJ8dzXB3COzD9Mo9NtRZ4xfgUww==" }, + "@types/vscode": { + "version": "1.56.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.56.0.tgz", + "integrity": "sha512-Q5VmQxOx+L1Y6lIJiGcJzwcyV3pQo/eiW8P+7sNLhFI16tJCwtua2DLjHRcpjbCLNVYpQM73kzfFo1Z0HyP9eQ==", + "dev": true + }, "@types/ws": { "version": "7.4.4", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.4.tgz", @@ -40,6 +47,7 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, "requires": { "debug": "4" } @@ -62,6 +70,22 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, + "big-integer": { + "version": "1.6.48", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz", + "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==", + "dev": true + }, + "binary": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", + "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=", + "dev": true, + "requires": { + "buffers": "~0.1.1", + "chainsaw": "~0.1.0" + } + }, "bip68": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/bip68/-/bip68-1.0.4.tgz", @@ -80,6 +104,12 @@ "resolved": "https://registry.npmjs.org/bitcoind-rpc/-/bitcoind-rpc-0.8.1.tgz", "integrity": "sha512-NfhykAT/x/P1SOiog8UzltvTiv6A6d2X5VWJ3UjGeAqFLXv+IYHy+E4fFCBmgQRyIb1EIcyIZK1SVpSOGRHsaw==" }, + "bluebird": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", + "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=", + "dev": true + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -89,15 +119,17 @@ "concat-map": "0.0.1" } }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" + "buffer-indexof-polyfill": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", + "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==", + "dev": true }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + "buffers": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", + "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=", + "dev": true }, "cashc": { "version": "0.6.3", @@ -139,16 +171,26 @@ "electrum-cash": "^2.0.6" } }, - "commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==" + "chainsaw": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", + "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=", + "dev": true, + "requires": { + "traverse": ">=0.3.0 <0.4" + } }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, "debug": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", @@ -162,10 +204,14 @@ "resolved": "https://registry.npmjs.org/delay/-/delay-5.0.0.tgz", "integrity": "sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==" }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==" + "duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "dev": true, + "requires": { + "readable-stream": "^2.0.2" + } }, "electrum-cash": { "version": "2.0.7", @@ -179,33 +225,40 @@ "ws": "^7.3.1" } }, - "es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" - }, - "es6-promisify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", - "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", - "requires": { - "es6-promise": "^4.0.3" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } }, "glob": { "version": "7.1.7", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -215,15 +268,11 @@ "path-is-absolute": "^1.0.0" } }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "dev": true }, "hash.js": { "version": "1.1.7", @@ -234,15 +283,11 @@ "minimalistic-assert": "^1.0.1" } }, - "he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=" - }, "http-proxy-agent": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, "requires": { "@tootallnate/once": "1", "agent-base": "6", @@ -253,6 +298,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dev": true, "requires": { "agent-base": "6", "debug": "4" @@ -262,6 +308,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -272,11 +319,23 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, "isomorphic-ws": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz", "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==" }, + "listenercount": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", + "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=", + "dev": true + }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -299,62 +358,18 @@ } }, "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true }, "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, "requires": { - "minimist": "0.0.8" - } - }, - "mocha": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", - "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", - "requires": { - "browser-stdout": "1.3.1", - "commander": "2.15.1", - "debug": "3.1.0", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "glob": "7.1.2", - "growl": "1.10.5", - "he": "1.1.1", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "supports-color": "5.4.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } + "minimist": "^1.2.5" } }, "ms": { @@ -366,6 +381,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, "requires": { "wrappy": "1" } @@ -373,54 +389,101 @@ "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, "requires": { - "has-flag": "^3.0.0" + "glob": "^7.1.3" } }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "traverse": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=", + "dev": true + }, "tslib": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" }, - "vscode": { - "version": "1.1.37", - "resolved": "https://registry.npmjs.org/vscode/-/vscode-1.1.37.tgz", - "integrity": "sha512-vJNj6IlN7IJPdMavlQa1KoFB3Ihn06q1AiN3ZFI/HfzPNzbKZWPPuiU+XkpNOfGU5k15m4r80nxNPlM7wcc0wg==", + "typescript": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.2.tgz", + "integrity": "sha512-zZ4hShnmnoVnAHpVHWpTcxdv7dWP60S2FsydQLV8V5PbS3FifjWFFRiHSWpDJahly88PRyV5teTSLoq4eG7mKw==", + "dev": true + }, + "unzipper": { + "version": "0.10.11", + "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz", + "integrity": "sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==", + "dev": true, "requires": { - "glob": "^7.1.2", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "mocha": "^5.2.0", - "semver": "^5.4.1", - "source-map-support": "^0.5.0", - "vscode-test": "^0.4.1" + "big-integer": "^1.6.17", + "binary": "~0.3.0", + "bluebird": "~3.4.1", + "buffer-indexof-polyfill": "~1.0.0", + "duplexer2": "~0.1.4", + "fstream": "^1.0.12", + "graceful-fs": "^4.2.2", + "listenercount": "~1.0.1", + "readable-stream": "~2.3.6", + "setimmediate": "~1.0.4" } }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, "vscode-jsonrpc": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", @@ -474,59 +537,22 @@ "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==" }, "vscode-test": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-0.4.3.tgz", - "integrity": "sha512-EkMGqBSefZH2MgW65nY05rdRSko15uvzq4VAPM5jVmwYuFQKE7eikKXNJDRxL+OITXHB6pI+a3XqqD32Y3KC5w==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-1.5.2.tgz", + "integrity": "sha512-x9PVfKxF6EInH9iSFGQi0V8H5zIW1fC7RAer6yNQR6sy3WyOwlWkuT3I+wf75xW/cO53hxMi1aj/EvqQfDFOAg==", + "dev": true, "requires": { - "http-proxy-agent": "^2.1.0", - "https-proxy-agent": "^2.2.1" - }, - "dependencies": { - "agent-base": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", - "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", - "requires": { - "es6-promisify": "^5.0.0" - } - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - }, - "http-proxy-agent": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", - "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", - "requires": { - "agent-base": "4", - "debug": "3.1.0" - } - }, - "https-proxy-agent": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", - "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", - "requires": { - "agent-base": "^4.3.0", - "debug": "^3.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "rimraf": "^3.0.2", + "unzipper": "^0.10.11" } }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true }, "ws": { "version": "7.4.6", diff --git a/vscode-cashscript/package.json b/vscode-cashscript/package.json index 1208ef0..d506885 100644 --- a/vscode-cashscript/package.json +++ b/vscode-cashscript/package.json @@ -49,33 +49,37 @@ ], "commands": [ { - "command": "cashscript.compile", - "title": "Compile Contract" - } + "command": "cashscript.compile", + "title": "Compile Contract" + } + ], + "keybindings": [ + { + "command": "cashscript.compile", + "key": "ctrl+f5" + } ], - "keybindings":[ - { - "command": "cashscript.compile", - "key": "ctrl+f5" - } - ], "menus": { - "editor/title": [ - { - "when": "resourceLangId == cashscript", - "command": "cashscript.compile", - "group": "navigation" - } - ] - } + "editor/title": [ + { + "when": "resourceLangId == cashscript", + "command": "cashscript.compile", + "group": "navigation" + } + ] + } }, "dependencies": { "antlr4ts": "^0.5.0-alpha.4", "cashc": "^0.6.3", "cashscript": "^0.6.3", - "vscode": "^1.1.37", "vscode-languageclient": "^7.0.0", "vscode-languageserver": "^7.0.0", "vscode-languageserver-textdocument": "^1.0.1" + }, + "devDependencies": { + "@types/vscode": "^1.56.0", + "typescript": "^4.3.2", + "vscode-test": "^1.5.2" } } diff --git a/vscode-cashscript/tsconfig.json b/vscode-cashscript/tsconfig.json index fc419cb..4a07459 100644 --- a/vscode-cashscript/tsconfig.json +++ b/vscode-cashscript/tsconfig.json @@ -1,19 +1,17 @@ { - "compilerOptions": { - "module": "commonjs", - "target": "es6", - "outDir": "out", - "lib": [ - "es2020" - ], - "sourceMap": true, - "rootDir": ".", - }, + "compilerOptions": { + "module": "commonjs", + "target": "es2019", + "lib": ["ES2019", "ES2020", "DOM"], + "outDir": "out", + "rootDir": "src", + "sourceMap": true + }, "include": [ "src/**/*" ], "exclude": [ - "node_modules", + "./node_modules", ".vscode-test" ] } \ No newline at end of file From 79741ffb570fcbcde286e9bf0ae807cd3b89e0c9 Mon Sep 17 00:00:00 2001 From: Nathaniel Cherian Date: Wed, 9 Jun 2021 09:39:17 -0700 Subject: [PATCH 11/14] add files --- client/testFixture/P2PKH.cash | 16 ++-------------- client/testFixture/P2PKH.json | 16 +++++++++++++--- vscode-cashscript/README.md | 12 ++++++++++-- .../snippets/cashscript.snippets.json | 5 +++++ .../src/CashscriptCompletionProvider.ts | 1 - 5 files changed, 30 insertions(+), 20 deletions(-) diff --git a/client/testFixture/P2PKH.cash b/client/testFixture/P2PKH.cash index 1b9e665..74bfd3a 100644 --- a/client/testFixture/P2PKH.cash +++ b/client/testFixture/P2PKH.cash @@ -1,15 +1,3 @@ -pragma cashscript ^0.6.0; - -contract P2PKH(bytes20 pkh) { - function spend( pubkey pk , sig s) { - require(hash160(pk) == pkh); - require(checkSig(s, pk)); - require(checkSig(s, pk)); - // int d = 2; - // require(checkDataSig()); - // require(checkDataSig(s, pk)); - } - - -} +contract P2PKH() { +} \ No newline at end of file diff --git a/client/testFixture/P2PKH.json b/client/testFixture/P2PKH.json index 2fdfc7c..6017b77 100644 --- a/client/testFixture/P2PKH.json +++ b/client/testFixture/P2PKH.json @@ -20,13 +20,23 @@ "type": "sig" } ] + }, + { + "name": "name", + "covenant": false, + "inputs": [ + { + "name": "m", + "type": "int" + } + ] } ], - "bytecode": "OP_OVER OP_HASH160 OP_EQUALVERIFY OP_2DUP OP_CHECKSIGVERIFY OP_CHECKSIG", - "source": "pragma cashscript ^0.6.0;\r\n\r\ncontract P2PKH(bytes20 pkh) {\r\n function spend( pubkey pk , sig s) {\r\n require(hash160(pk) == pkh);\r\n require(checkSig(s, pk));\r\n require(checkSig(s, pk));\r\n // int d = 2;\r\n // require(checkDataSig());\r\n // require(checkDataSig(s, pk));\r\n }\r\n\r\n\r\n}\r\n\r\n", + "bytecode": "OP_OVER OP_0 OP_NUMEQUAL OP_IF OP_2 OP_PICK OP_HASH160 OP_EQUALVERIFY OP_2 OP_PICK OP_2 OP_PICK OP_CHECKSIGVERIFY OP_ROT OP_ROT OP_CHECKSIG OP_NIP OP_ELSE OP_SWAP OP_1 OP_NUMEQUALVERIFY OP_OVER OP_1 OP_NUMEQUAL OP_IF OP_OVER OP_1 OP_NUMEQUALVERIFY OP_ELSE OP_OVER OP_10 OP_LESSTHAN OP_VERIFY OP_ENDIF OP_2DROP OP_1 OP_ENDIF", + "source": "pragma cashscript ^0.6.0;\r\n\r\ncontract P2PKH(bytes20 pkh) {\r\n function spend( pubkey pk , sig s) {\r\n require(hash160(pk) == pkh);\r\n require(checkSig(s, pk));\r\n require(checkSig(s, pk));\r\n\r\n }\r\n\r\n function name(int m) {\r\n if(m == 1){\r\n require(m == 1);\r\n }else {\r\n require(m < 10);\r\n }\r\n }\r\n\r\n}\r\n\r\n", "compiler": { "name": "cashc", "version": "0.6.3" }, - "updatedAt": "2021-06-09T15:38:43.124Z" + "updatedAt": "2021-06-09T15:45:29.447Z" } \ No newline at end of file diff --git a/vscode-cashscript/README.md b/vscode-cashscript/README.md index 6d24224..22d268e 100644 --- a/vscode-cashscript/README.md +++ b/vscode-cashscript/README.md @@ -1,9 +1,17 @@ -# vscode-cashscript = +# vscode-cashscript + +Vscode-cashscript provides tools that make it easier for developers to write smart contracts with [cashscript](cashscript.org). + -This is the README for your extension "vscode-cashscript". After writing up a brief description, we recommend including the following sections. ## Features +- Syntax Highlighting +- Auto-Completion +- Snippets +- Linting +- Contract Compilation + Describe specific features of your extension including screenshots of your extension in action. Image paths are relative to this README file. For example if there is an image subfolder under your extension project workspace: diff --git a/vscode-cashscript/snippets/cashscript.snippets.json b/vscode-cashscript/snippets/cashscript.snippets.json index 62279b6..eecf663 100644 --- a/vscode-cashscript/snippets/cashscript.snippets.json +++ b/vscode-cashscript/snippets/cashscript.snippets.json @@ -5,6 +5,11 @@ "description":"Set semantic version" }, + "Create Contract": { + "prefix":"contract", + "body":"contract ${1:ContractName}($2) {\n\n}", + "description":"Creates a contract" + }, "Function Statement" : { "prefix":"function", diff --git a/vscode-cashscript/src/CashscriptCompletionProvider.ts b/vscode-cashscript/src/CashscriptCompletionProvider.ts index 5443445..aae02e0 100644 --- a/vscode-cashscript/src/CashscriptCompletionProvider.ts +++ b/vscode-cashscript/src/CashscriptCompletionProvider.ts @@ -148,7 +148,6 @@ export default class CashscriptCompletionProvider implements vscode.CompletionIt label:"contract", detail:"Instantiate a new Contract", insertText:"contract ${1:ContractName}($2) {\n\n}", - // insertTextFormat:2 }); } From d496b7d9eae1d4b7b33737b327d5ac57dc553b2a Mon Sep 17 00:00:00 2001 From: Nathaniel Cherian Date: Wed, 9 Jun 2021 13:42:51 -0700 Subject: [PATCH 12/14] overhaul --- .eslintignore | 5 - .eslintrc.js | 20 - .eslintrc.json | 18 - .vscode/extensions.json | 9 - .vscode/launch.json | 75 +- .vscode/settings.json | 9 - .vscode/tasks.json | 47 +- .vscodeignore | 14 +- .../CHANGELOG.md => CHANGELOG.md | 0 README.md | 81 +- client/package-lock.json | 276 -- client/package.json | 23 - client/src/CashscriptHoverProvider.ts | 127 - client/src/CashscriptSignatureCompleter.ts | 23 - client/src/extension.ts | 135 - client/src/test/completion.test.ts | 43 - client/src/test/diagnostics.test.ts | 41 - client/src/test/helper.ts | 47 - client/src/test/index.ts | 43 - client/src/test/runTest.ts | 27 - client/testFixture/P2PKH.cash | 3 - client/testFixture/P2PKH.json | 42 - client/testFixture/m.cash | 0 client/testFixture/p.cash | 13 - client/testFixture/p.json | 33 - client/testFixture/t.cash | 8 - client/testFixture/t.json | 18 - client/testFixture/t.sol | 5 - client/testFixture/t.ts | 1 - client/testFixture/test.cash | 26 - client/testFixture/textfile.txt | 0 client/testFixture/time.cash | 45 - client/tsconfig.json | 12 - comp/AST.ts | 3 - comp/AstVisitor.ts | 0 comp/compile.ts | 28 - comp/package.json | 19 - comp/visitor.ts | 30 - comp/yarn.lock | 13 - examples/test.cash | 9 + fileicons/cashscript-icon-theme.json | 13 - fileicons/save.txt | 8 - images/cashscript.svg | 1 - package-lock.json | 2887 +++++----------- package.json | 198 +- scripts/e2e.sh | 6 - server/package-lock.json | 185 -- server/package.json | 22 - server/src/CashLinter/CashLinter.ts | 31 - server/src/CashLinter/grammar/CashScript.g4 | 198 -- .../src/CashLinter/grammar/CashScript.interp | 150 - .../src/CashLinter/grammar/CashScript.tokens | 101 - .../CashLinter/grammar/CashScriptLexer.interp | 191 -- .../CashLinter/grammar/CashScriptLexer.tokens | 101 - .../src/CashLinter/grammar/CashScriptLexer.ts | 463 --- .../CashLinter/grammar/CashScriptListener.ts | 443 --- .../CashLinter/grammar/CashScriptParser.ts | 2922 ----------------- .../CashLinter/grammar/CashScriptVisitor.ts | 299 -- server/src/compilerErrors.ts | 20 - server/src/completionService.ts | 344 -- server/src/server.ts | 265 -- server/tsconfig.json | 19 - snippets/cashscript.snippets.json | 5 + .../CashscriptCompletionProvider.ts | 10 +- .../src => src}/CashscriptHoverProvider.ts | 0 .../CashscriptLinter/CashscriptLinter.ts | 0 .../CashscriptLinter}/ErrorListeners.ts | 0 .../CashscriptLinter}/grammar/CashScript.g4 | 0 .../grammar/CashScript.interp | 0 .../grammar/CashScript.tokens | 0 .../grammar/CashScriptLexer.interp | 0 .../grammar/CashScriptLexer.tokens | 0 .../grammar/CashScriptLexer.ts | 0 .../grammar/CashScriptListener.ts | 0 .../grammar/CashScriptParser.ts | 0 .../grammar/CashScriptVisitor.ts | 0 .../CashscriptSignatureCompleter.ts | 0 {client/src => src}/LanguageDesc.ts | 0 {vscode-cashscript/src => src}/extension.ts | 0 {vscode-cashscript/src => src}/server.ts | 0 syntaxes/cash.tmGrammar.json | 198 -- .../cashscript.tmLanguage.json | 0 tsconfig.json | 25 +- ...ickstart.md => vsc-extension-quickstart.md | 0 vscode-cashscript/.vscode/launch.json | 34 - vscode-cashscript/.vscode/tasks.json | 18 - vscode-cashscript/.vscodeignore | 4 - vscode-cashscript/README.md | 73 - .../cashscript.configuration.json | 26 - vscode-cashscript/package-lock.json | 568 ---- vscode-cashscript/package.json | 85 - .../snippets/cashscript.snippets.json | 33 - .../src/CashscriptLinter/ErrorListeners.ts | 45 - .../CashscriptLinter/grammar/CashScript.g4 | 198 -- .../grammar/CashScript.interp | 150 - .../grammar/CashScript.tokens | 101 - .../grammar/CashScriptLexer.interp | 191 -- .../grammar/CashScriptLexer.tokens | 101 - .../grammar/CashScriptLexer.ts | 463 --- .../grammar/CashScriptListener.ts | 443 --- .../grammar/CashScriptParser.ts | 2922 ----------------- .../grammar/CashScriptVisitor.ts | 299 -- vscode-cashscript/src/LanguageDesc.ts | 111 - vscode-cashscript/tsconfig.json | 17 - yarn.lock | 1327 -------- 105 files changed, 1037 insertions(+), 16648 deletions(-) delete mode 100644 .eslintignore delete mode 100644 .eslintrc.js delete mode 100644 .eslintrc.json delete mode 100644 .vscode/extensions.json delete mode 100644 .vscode/settings.json rename vscode-cashscript/CHANGELOG.md => CHANGELOG.md (100%) delete mode 100644 client/package-lock.json delete mode 100644 client/package.json delete mode 100644 client/src/CashscriptHoverProvider.ts delete mode 100644 client/src/CashscriptSignatureCompleter.ts delete mode 100644 client/src/extension.ts delete mode 100644 client/src/test/completion.test.ts delete mode 100644 client/src/test/diagnostics.test.ts delete mode 100644 client/src/test/helper.ts delete mode 100644 client/src/test/index.ts delete mode 100644 client/src/test/runTest.ts delete mode 100644 client/testFixture/P2PKH.cash delete mode 100644 client/testFixture/P2PKH.json delete mode 100644 client/testFixture/m.cash delete mode 100644 client/testFixture/p.cash delete mode 100644 client/testFixture/p.json delete mode 100644 client/testFixture/t.cash delete mode 100644 client/testFixture/t.json delete mode 100644 client/testFixture/t.sol delete mode 100644 client/testFixture/t.ts delete mode 100644 client/testFixture/test.cash delete mode 100644 client/testFixture/textfile.txt delete mode 100644 client/testFixture/time.cash delete mode 100644 client/tsconfig.json delete mode 100644 comp/AST.ts delete mode 100644 comp/AstVisitor.ts delete mode 100644 comp/compile.ts delete mode 100644 comp/package.json delete mode 100644 comp/visitor.ts delete mode 100644 comp/yarn.lock create mode 100644 examples/test.cash delete mode 100644 fileicons/cashscript-icon-theme.json delete mode 100644 fileicons/save.txt delete mode 100644 images/cashscript.svg delete mode 100644 scripts/e2e.sh delete mode 100644 server/package-lock.json delete mode 100644 server/package.json delete mode 100644 server/src/CashLinter/CashLinter.ts delete mode 100644 server/src/CashLinter/grammar/CashScript.g4 delete mode 100644 server/src/CashLinter/grammar/CashScript.interp delete mode 100644 server/src/CashLinter/grammar/CashScript.tokens delete mode 100644 server/src/CashLinter/grammar/CashScriptLexer.interp delete mode 100644 server/src/CashLinter/grammar/CashScriptLexer.tokens delete mode 100644 server/src/CashLinter/grammar/CashScriptLexer.ts delete mode 100644 server/src/CashLinter/grammar/CashScriptListener.ts delete mode 100644 server/src/CashLinter/grammar/CashScriptParser.ts delete mode 100644 server/src/CashLinter/grammar/CashScriptVisitor.ts delete mode 100644 server/src/compilerErrors.ts delete mode 100644 server/src/completionService.ts delete mode 100644 server/src/server.ts delete mode 100644 server/tsconfig.json rename {vscode-cashscript/src => src}/CashscriptCompletionProvider.ts (96%) rename {vscode-cashscript/src => src}/CashscriptHoverProvider.ts (100%) rename {vscode-cashscript/src => src}/CashscriptLinter/CashscriptLinter.ts (100%) rename {server/src/CashLinter => src/CashscriptLinter}/ErrorListeners.ts (100%) rename {comp => src/CashscriptLinter}/grammar/CashScript.g4 (100%) rename {comp => src/CashscriptLinter}/grammar/CashScript.interp (100%) rename {comp => src/CashscriptLinter}/grammar/CashScript.tokens (100%) rename {comp => src/CashscriptLinter}/grammar/CashScriptLexer.interp (100%) rename {comp => src/CashscriptLinter}/grammar/CashScriptLexer.tokens (100%) rename {comp => src/CashscriptLinter}/grammar/CashScriptLexer.ts (100%) rename {comp => src/CashscriptLinter}/grammar/CashScriptListener.ts (100%) rename {comp => src/CashscriptLinter}/grammar/CashScriptParser.ts (100%) rename {comp => src/CashscriptLinter}/grammar/CashScriptVisitor.ts (100%) rename {vscode-cashscript/src => src}/CashscriptSignatureCompleter.ts (100%) rename {client/src => src}/LanguageDesc.ts (100%) rename {vscode-cashscript/src => src}/extension.ts (100%) rename {vscode-cashscript/src => src}/server.ts (100%) delete mode 100644 syntaxes/cash.tmGrammar.json rename {vscode-cashscript/syntaxes => syntaxes}/cashscript.tmLanguage.json (100%) rename vscode-cashscript/vsc-extension-quickstart.md => vsc-extension-quickstart.md (100%) delete mode 100644 vscode-cashscript/.vscode/launch.json delete mode 100644 vscode-cashscript/.vscode/tasks.json delete mode 100644 vscode-cashscript/.vscodeignore delete mode 100644 vscode-cashscript/README.md delete mode 100644 vscode-cashscript/cashscript.configuration.json delete mode 100644 vscode-cashscript/package-lock.json delete mode 100644 vscode-cashscript/package.json delete mode 100644 vscode-cashscript/snippets/cashscript.snippets.json delete mode 100644 vscode-cashscript/src/CashscriptLinter/ErrorListeners.ts delete mode 100644 vscode-cashscript/src/CashscriptLinter/grammar/CashScript.g4 delete mode 100644 vscode-cashscript/src/CashscriptLinter/grammar/CashScript.interp delete mode 100644 vscode-cashscript/src/CashscriptLinter/grammar/CashScript.tokens delete mode 100644 vscode-cashscript/src/CashscriptLinter/grammar/CashScriptLexer.interp delete mode 100644 vscode-cashscript/src/CashscriptLinter/grammar/CashScriptLexer.tokens delete mode 100644 vscode-cashscript/src/CashscriptLinter/grammar/CashScriptLexer.ts delete mode 100644 vscode-cashscript/src/CashscriptLinter/grammar/CashScriptListener.ts delete mode 100644 vscode-cashscript/src/CashscriptLinter/grammar/CashScriptParser.ts delete mode 100644 vscode-cashscript/src/CashscriptLinter/grammar/CashScriptVisitor.ts delete mode 100644 vscode-cashscript/src/LanguageDesc.ts delete mode 100644 vscode-cashscript/tsconfig.json delete mode 100644 yarn.lock diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 63239ea..0000000 --- a/.eslintignore +++ /dev/null @@ -1,5 +0,0 @@ -node_modules/** -client/node_modules/** -client/out/** -server/node_modules/** -server/out/** \ No newline at end of file diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index f660e39..0000000 --- a/.eslintrc.js +++ /dev/null @@ -1,20 +0,0 @@ -/**@type {import('eslint').Linter.Config} */ -// eslint-disable-next-line no-undef -module.exports = { - root: true, - parser: '@typescript-eslint/parser', - plugins: [ - '@typescript-eslint', - ], - extends: [ - 'eslint:recommended', - 'plugin:@typescript-eslint/recommended', - ], - rules: { - 'semi': [2, "always"], - '@typescript-eslint/no-unused-vars': 0, - '@typescript-eslint/no-explicit-any': 0, - '@typescript-eslint/explicit-module-boundary-types': 0, - '@typescript-eslint/no-non-null-assertion': 0, - } -}; \ No newline at end of file diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index 4af7c61..0000000 --- a/.eslintrc.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "parser": "@typescript-eslint/parser", - "parserOptions": { - "ecmaVersion": 6, - "sourceType": "module" - }, - "env": { - "node": true - }, - "rules": { - "semi": "error", - "no-extra-semi": "warn", - "curly": "warn", - "quotes": ["error", "single", { "allowTemplateLiterals": true } ], - "eqeqeq": "error", - "indent": ["warn", "tab", { "SwitchCase": 1 } ] - } -} \ No newline at end of file diff --git a/.vscode/extensions.json b/.vscode/extensions.json deleted file mode 100644 index af51550..0000000 --- a/.vscode/extensions.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - // See https://go.microsoft.com/fwlink/?LinkId=827846 to learn about workspace recommendations. - // Extension identifier format: ${publisher}.${name}. Example: vscode.csharp - - // List of extensions which should be recommended for users of this workspace. - "recommendations": [ - "dbaeumer.vscode-eslint" - ] -} \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json index f28b3a0..3ebc5bd 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -1,45 +1,34 @@ -// A launch configuration that compiles the extension and then opens it inside a new window +// A launch configuration that launches the extension inside a new window +// Use IntelliSense to learn about possible attributes. +// Hover to view descriptions of existing attributes. +// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 { "version": "0.2.0", - "configurations": [ - - { - "type": "extensionHost", - "request": "launch", - "name": "Launch Client", - "runtimeExecutable": "${execPath}", - "args": ["--extensionDevelopmentPath=${workspaceRoot}"], - "outFiles": ["${workspaceRoot}/client/out/**/*.js"], - "preLaunchTask": { - "type": "npm", - "script": "watch" - } - }, - { - "type": "node", - "request": "attach", - "name": "Attach to Server", - "port": 6009, - "restart": true, - "outFiles": ["${workspaceRoot}/server/out/**/*.js"] - }, - { - "name": "Language Server E2E Test", - "type": "extensionHost", - "request": "launch", - "runtimeExecutable": "${execPath}", - "args": [ - "--extensionDevelopmentPath=${workspaceRoot}", - "--extensionTestsPath=${workspaceRoot}/client/out/test/index", - "${workspaceRoot}/client/testFixture" - ], - "outFiles": ["${workspaceRoot}/client/out/test/**/*.js"] - } - ], - "compounds": [ - { - "name": "Client + Server", - "configurations": ["Launch Client", "Attach to Server"] - } - ] -} + "configurations": [ + { + "name": "Extension", + "type": "extensionHost", + "request": "launch", + "runtimeExecutable": "${execPath}", + "args": [ + "--extensionDevelopmentPath=${workspaceFolder}" + ], + "sourceMaps": true, + "outFiles": [ + "${workspaceFolder}/out/src/**/*.js" + ], + "preLaunchTask": "npm: watch", + "stopOnEntry": false + }, + { + "type": "node", + "request": "attach", + "name": "Attach to Server", + "port": 6009, + "restart": true, + "outFiles": [ + "${workspaceRoot}/out/src/**/*.js" + ] + } + ] +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 4d7c850..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "editor.insertSpaces": false, - "tslint.enable": true, - "typescript.tsc.autoDetect": "off", - "typescript.preferences.quoteStyle": "single", - "editor.codeActionsOnSave": { - "source.fixAll.eslint": true - } -} \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 5efd804..8417837 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -1,33 +1,18 @@ { - "version": "2.0.0", - "tasks": [ - { - "type": "npm", - "script": "compile", - "group": "build", - "presentation": { - "panel": "dedicated", - "reveal": "never" - }, - "problemMatcher": [ - "$tsc" - ] - }, - { - "type": "npm", - "script": "watch", - "isBackground": true, - "group": { - "kind": "build", - "isDefault": true - }, - "presentation": { - "panel": "dedicated", - "reveal": "never" - }, - "problemMatcher": [ - "$tsc-watch" - ] - } - ] + "version": "2.0.0", + "tasks": [ + { + "type": "npm", + "script": "watch", + "problemMatcher": "$tsc-watch", + "isBackground": true, + "presentation": { + "reveal": "never" + }, + "group": { + "kind": "build", + "isDefault": true + } + } + ] } \ No newline at end of file diff --git a/.vscodeignore b/.vscodeignore index 2ca7fc3..f369b5e 100644 --- a/.vscodeignore +++ b/.vscodeignore @@ -1,14 +1,4 @@ .vscode/** -**/*.ts -**/*.map +.vscode-test/** .gitignore -**/tsconfig.json -**/tsconfig.base.json -contributing.md -.travis.yml -client/node_modules/** -!client/node_modules/vscode-jsonrpc/** -!client/node_modules/vscode-languageclient/** -!client/node_modules/vscode-languageserver-protocol/** -!client/node_modules/vscode-languageserver-types/** -!client/node_modules/semver/** +vsc-extension-quickstart.md diff --git a/vscode-cashscript/CHANGELOG.md b/CHANGELOG.md similarity index 100% rename from vscode-cashscript/CHANGELOG.md rename to CHANGELOG.md diff --git a/README.md b/README.md index 15fdb25..22d268e 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,73 @@ -# vscode-cashscript - -## TODO -- [ x ] Snippets -- [ x ] Code Completion -- [ ] Error/type checking -- [ x ] Compile Contract -- [ ] Hover Provider \ No newline at end of file +# vscode-cashscript + +Vscode-cashscript provides tools that make it easier for developers to write smart contracts with [cashscript](cashscript.org). + + + +## Features + +- Syntax Highlighting +- Auto-Completion +- Snippets +- Linting +- Contract Compilation + +Describe specific features of your extension including screenshots of your extension in action. Image paths are relative to this README file. + +For example if there is an image subfolder under your extension project workspace: + +\!\[feature X\]\(images/feature-x.png\) + +> Tip: Many popular extensions utilize animations. This is an excellent way to show off your extension! We recommend short, focused animations that are easy to follow. + +## Requirements + +If you have any requirements or dependencies, add a section describing those and how to install and configure them. + +## Extension Settings + +Include if your extension adds any VS Code settings through the `contributes.configuration` extension point. + +For example: + +This extension contributes the following settings: + +* `myExtension.enable`: enable/disable this extension +* `myExtension.thing`: set to `blah` to do something + +## Known Issues + +Calling out known issues can help limit users opening duplicate issues against your extension. + +## Release Notes + +Users appreciate release notes as you update your extension. + +### 1.0.0 + +Initial release of ... + +### 1.0.1 + +Fixed issue #. + +### 1.1.0 + +Added features X, Y, and Z. + +----------------------------------------------------------------------------------------------------------- + +## Working with Markdown + +**Note:** You can author your README using Visual Studio Code. Here are some useful editor keyboard shortcuts: + +* Split the editor (`Cmd+\` on macOS or `Ctrl+\` on Windows and Linux) +* Toggle preview (`Shift+CMD+V` on macOS or `Shift+Ctrl+V` on Windows and Linux) +* Press `Ctrl+Space` (Windows, Linux) or `Cmd+Space` (macOS) to see a list of Markdown snippets + +### For more information + +* [Visual Studio Code's Markdown Support](http://code.visualstudio.com/docs/languages/markdown) +* [Markdown Syntax Reference](https://help.github.com/articles/markdown-basics/) + +**Enjoy!** diff --git a/client/package-lock.json b/client/package-lock.json deleted file mode 100644 index 1a5c3fb..0000000 --- a/client/package-lock.json +++ /dev/null @@ -1,276 +0,0 @@ -{ - "name": "vscode-cashscript-client", - "version": "0.0.1", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@bitauth/libauth": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/@bitauth/libauth/-/libauth-1.18.1.tgz", - "integrity": "sha512-s7evdGbdGAnGkv7xt6mCbcWTTNvburc1Z9EX/8JKwcRLqofjDs7VAEz+RP3a8OGEo4MWFV6Ydqu/BeJjIA7Kdg==" - }, - "@cashscript/utils": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@cashscript/utils/-/utils-0.6.0.tgz", - "integrity": "sha512-Lk74JFk5jFwJbZhUZ7isP9pRP9qarxvPpvVFPuw1wxRuRqskz0ZZ5bYg8tep6WJbTApsompJYzvxOHWg7JWG4g==", - "requires": { - "@bitauth/libauth": "^1.18.1", - "hash.js": "^1.1.7" - } - }, - "@types/vscode": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.52.0.tgz", - "integrity": "sha512-Kt3bvWzAvvF/WH9YEcrCICDp0Z7aHhJGhLJ1BxeyNP6yRjonWqWnAIh35/pXAjswAnWOABrYlF7SwXR9+1nnLA==", - "dev": true - }, - "agent-base": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", - "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", - "dev": true, - "requires": { - "es6-promisify": "^5.0.0" - } - }, - "antlr4ts": { - "version": "0.5.0-alpha.4", - "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", - "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==" - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "cashc": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cashc/-/cashc-0.6.0.tgz", - "integrity": "sha512-C5B4kBQ21g34RQj4kvZwvZY1qHHNprQ3ik+P2Hesq+ZJncqylorJSw3C5/hGD5C573xGGICv9Ta/cgWJvl/tCA==", - "requires": { - "@bitauth/libauth": "^1.18.1", - "@cashscript/utils": "^0.6.0", - "antlr4ts": "^0.5.0-alpha.4", - "commander": "^7.1.0", - "semver": "^7.3.4" - } - }, - "commander": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.1.0.tgz", - "integrity": "sha512-pRxBna3MJe6HKnBGsDyMv8ETbptw3axEdYHoqNh7gu5oDcew8fs0xnivZGm06Ogk8zGAJ9VX+OPEr2GXEQK4dg==" - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", - "dev": true - }, - "es6-promisify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", - "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", - "dev": true, - "requires": { - "es6-promise": "^4.0.3" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "http-proxy-agent": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", - "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", - "dev": true, - "requires": { - "agent-base": "4", - "debug": "3.1.0" - } - }, - "https-proxy-agent": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", - "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", - "dev": true, - "requires": { - "agent-base": "^4.3.0", - "debug": "^3.1.0" - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "vscode-jsonrpc": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", - "integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==" - }, - "vscode-languageclient": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-7.0.0.tgz", - "integrity": "sha512-P9AXdAPlsCgslpP9pRxYPqkNYV7Xq8300/aZDpO35j1fJm/ncize8iGswzYlcvFw5DQUx4eVk+KvfXdL0rehNg==", - "requires": { - "minimatch": "^3.0.4", - "semver": "^7.3.4", - "vscode-languageserver-protocol": "3.16.0" - } - }, - "vscode-languageserver-protocol": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz", - "integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==", - "requires": { - "vscode-jsonrpc": "6.0.0", - "vscode-languageserver-types": "3.16.0" - } - }, - "vscode-languageserver-types": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", - "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==" - }, - "vscode-test": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-1.3.0.tgz", - "integrity": "sha512-LddukcBiSU2FVTDr3c1D8lwkiOvwlJdDL2hqVbn6gIz+rpTqUCkMZSKYm94Y1v0WXlHSDQBsXyY+tchWQgGVsw==", - "dev": true, - "requires": { - "http-proxy-agent": "^2.1.0", - "https-proxy-agent": "^2.2.4", - "rimraf": "^2.6.3" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - } -} diff --git a/client/package.json b/client/package.json deleted file mode 100644 index 2871f6c..0000000 --- a/client/package.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "vscode-cashscript-client", - "description": "Cashscript extension client.", - "author": "Nathaniel Cherian", - "license": "MIT", - "version": "0.0.1", - "publisher": "vscode", - "repository": { - "type": "git", - "url": "https://github.com/nathanielCherian/vscode-cashscript" - }, - "engines": { - "vscode": "^1.52.0" - }, - "dependencies": { - "cashc": "^0.6.0", - "vscode-languageclient": "^7.0.0" - }, - "devDependencies": { - "@types/vscode": "^1.52.0", - "vscode-test": "^1.3.0" - } -} diff --git a/client/src/CashscriptHoverProvider.ts b/client/src/CashscriptHoverProvider.ts deleted file mode 100644 index 33fed0c..0000000 --- a/client/src/CashscriptHoverProvider.ts +++ /dev/null @@ -1,127 +0,0 @@ -import * as vscode from 'vscode'; -import { MarkedString } from 'vscode-languageclient'; -import { LANGUAGE } from './LanguageDesc'; - -class CashscriptHoverProvider implements vscode.HoverProvider{ - - re = /[a-zA-Z0-9]+/g; // regex to get selected word - constructor(private channel: vscode.OutputChannel = null){} - - provideHover(document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken): vscode.ProviderResult { - - - let range = document.getWordRangeAtPosition(position, this.re); - let word = document.getText(range); - - this.channel.appendLine("hoverword: "+word) - const annotation = this.getHoverAnnotation(word); - if(annotation) return new vscode.Hover(annotation, range); - - const miscel = this.getMiscellaneousHovers(document, position); - if(miscel) return new vscode.Hover(miscel, range) - - // check special words - - const dotHovers = this.getTxDotHovers(document, position); - if(dotHovers) return new vscode.Hover(dotHovers, range) - - const varTypes = this.getVariableTypes(document, word); // fix this - if(varTypes) return new vscode.Hover(varTypes, range); - - return null; - } - - - getHoverAnnotation(word:string):vscode.MarkdownString[]{ - - const data = LANGUAGE[word] || null; - if(!data) return null; - - return [ - new vscode.MarkdownString().appendCodeblock(data.code), - new vscode.MarkdownString(data.codeDesc) - ] - } - - - getMiscellaneousHovers(document:vscode.TextDocument, position:vscode.Position):vscode.MarkdownString[]{ - - const reg = /(contract|function)\s+(\w+)\s*\(.*\)/; - let range = document.getWordRangeAtPosition(position, reg); - let word = document.getText(range); - if(word.includes("\n")) return null; - - return [ - new vscode.MarkdownString().appendCodeblock(word) - ]; - } - - /* - * Very bad way to get type annotations, better option: custom linter - */ - getVariableTypes(document:vscode.TextDocument, targetWord:string):vscode.MarkdownString[]{ - const reg = /([a-zA-Z0-9]+)\s+(pk)[^a-zA-Z0-9]/; - const text = document.getText(); - const matches = text.match(new RegExp(`([a-zA-Z0-9]+)\\s+(${targetWord})[^a-zA-Z0-9]`)); //regex still incomplete - if(!matches) return null; - - return [ - new vscode.MarkdownString().appendCodeblock(`${matches[1]} ${matches[2]}`), - ] - } - - getTxDotHovers(document:vscode.TextDocument, position:vscode.Position):vscode.MarkdownString[]{ - const reg = /tx.[a-zA-Z0-9]+/; - let range = document.getWordRangeAtPosition(position, reg); - let word = document.getText(range).substring(3); - - // /### tx.(\w+)\n+```solidity\n(.+)\n```/ - const TX_HOVERS = { - time:{ - code:'require(tx.time >= );' - }, - age:{ - code:'require(tx.age >= );' - }, - version:{ - code:'bytes4 tx.version' - }, - hashPrevouts:{ - code:'bytes32 tx.hashPrevouts' - }, - hashSequence:{ - code:'bytes32 tx.hashSequence' - }, - outpoint:{ - code:'bytes36 tx.outpoint' - }, - bytecode:{ - code:'bytes tx.bytecode' - }, - value:{ - code:'bytes8 value' - }, - sequence:{ - code:'bytes4 tx.sequence' - }, - hashOutputs:{ - code:'bytes32 tx.hashOutputs' - }, - locktime:{ - code:'bytes4 tx.locktime' - }, - hashtype:{ - code:'bytes4 tx.hashtype' - }, - } - - - this.channel.appendLine("dot: "+word); - return [ - new vscode.MarkdownString().appendCodeblock(TX_HOVERS[word].code) - ]; - } - -} - -export default CashscriptHoverProvider; \ No newline at end of file diff --git a/client/src/CashscriptSignatureCompleter.ts b/client/src/CashscriptSignatureCompleter.ts deleted file mode 100644 index 0b35fec..0000000 --- a/client/src/CashscriptSignatureCompleter.ts +++ /dev/null @@ -1,23 +0,0 @@ -import * as vscode from 'vscode'; -import { LANGUAGE, TYPECASTS } from './LanguageDesc'; - -class CashscriptSignatureCompleter implements vscode.SignatureHelpProvider{ - - re = /([a-zA-Z0-9]+)\(/g; // regex to get selected word - constructor(private channel:vscode.OutputChannel=null){} - - provideSignatureHelp(document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken, context: vscode.SignatureHelpContext): vscode.ProviderResult { - - let range = document.getWordRangeAtPosition(position, this.re); - let word = document.getText(range).slice(0, -1); // removes the '(' - - this.channel.appendLine("signature " + word); - const sh = new vscode.SignatureHelp(); - const data = LANGUAGE[word] || TYPECASTS[word]; - sh.signatures = [new vscode.SignatureInformation(data.codeDesc, new vscode.MarkdownString().appendCodeblock(data.code))]; - return sh; - } - -} - -export default CashscriptSignatureCompleter; \ No newline at end of file diff --git a/client/src/extension.ts b/client/src/extension.ts deleted file mode 100644 index 25beeb9..0000000 --- a/client/src/extension.ts +++ /dev/null @@ -1,135 +0,0 @@ -/* -------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - * ------------------------------------------------------------------------------------------ */ - -import * as path from 'path'; -import * as vscode from 'vscode'; -import { workspace, ExtensionContext, HoverProvider } from 'vscode'; -import {compileFile} from 'cashc'; -import { - asmToScript, - calculateBytesize, - countOpcodes, - exportArtifact, - scriptToAsm, - scriptToBytecode, - } from '@cashscript/utils'; - -import { - LanguageClient, - LanguageClientOptions, - MarkedString, - ServerOptions, - TransportKind -} from 'vscode-languageclient/node'; - -import CashscriptSignatureCompleter from './CashscriptSignatureCompleter'; -import CashscriptHoverProvider from './CashscriptHoverProvider'; - -const fs = require('fs'); - -let client: LanguageClient; - -//Debug channel -const outputChannel = vscode.window.createOutputChannel('VSCODE-CASHSCRIPT DEBUG') -outputChannel.appendLine("This is a test"); -outputChannel.show(); - -export function activate(context: ExtensionContext) { - // The server is implemented in node - let serverModule = context.asAbsolutePath( - path.join('server', 'out', 'server.js') - ); - // The debug options for the server - // --inspect=6009: runs the server in Node's Inspector mode so VS Code can attach to the server for debugging - let debugOptions = { execArgv: ['--nolazy', '--inspect=6009'] }; - - // If the extension is launched in debug mode then the debug server options are used - // Otherwise the run options are used - let serverOptions: ServerOptions = { - run: { module: serverModule, transport: TransportKind.ipc }, - debug: { - module: serverModule, - transport: TransportKind.ipc, - options: debugOptions - } - }; - - // Options to control the language client - let clientOptions: LanguageClientOptions = { - // Register the server for plain text documents - documentSelector: [{ scheme: 'file', language: 'cashscript' }], - synchronize: { - // Notify the server about file changes to '.clientrc files contained in the workspace - fileEvents: workspace.createFileSystemWatcher('**/.clientrc') - } - }; - - // Create the language client and start the client. - client = new LanguageClient( - 'languageServerExample', - 'Language Server Example', - serverOptions, - clientOptions - ); - - - //Register command - - const registerCompileCommand = () => { - const command = 'cashscript.compileContract'; - const commandHandler = () => { - var filename = vscode.window.activeTextEditor.document.fileName; - try{ - const artifact = compileFile(filename); - const artifactJSON = JSON.stringify(artifact, null, 2); - filename = filename.split('.').slice(0, -1).join('.') + ".json" - - fs.writeFile(filename, artifactJSON, (err) => { - if(err){ - throw err - } - }); - - const script = asmToScript(artifact.bytecode); - const opcount = countOpcodes(script); - const bytesize = calculateBytesize(script); - - if(opcount > 201){ - vscode.window.showWarningMessage('Warning: Your contract\'s opcount is over the limit of 201 and will not be accepted by the BCH network'); - } - - if(bytesize > 520){ - vscode.window.showWarningMessage('Warning: Your contract\'s bytesize is over the limit of 520 and will not be accepted by the BCH network'); - } - - vscode.window.showInformationMessage(`Compiled contract to artifact '${path.basename(filename)}'`); // '${bytesize}' bytes`); - console.log(`Compiled contact to ${filename}`); - }catch(e){ - //vscode.window.showErrorMessage(""+e); - vscode.window.showErrorMessage(`Unable to compile '${path.basename(filename)}', ` + e); - } - - } - - context.subscriptions.push(vscode.commands.registerCommand(command, commandHandler)); - } - - registerCompileCommand(); - - - vscode.languages.registerHoverProvider('cashscript', new CashscriptHoverProvider(outputChannel)); - vscode.languages.registerSignatureHelpProvider('cashscript', new CashscriptSignatureCompleter(outputChannel), '('); - - - // Start the client. This will also launch the server - client.start(); -} - -export function deactivate(): Thenable | undefined { - if (!client) { - return undefined; - } - return client.stop(); -} diff --git a/client/src/test/completion.test.ts b/client/src/test/completion.test.ts deleted file mode 100644 index f355078..0000000 --- a/client/src/test/completion.test.ts +++ /dev/null @@ -1,43 +0,0 @@ -/* -------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - * ------------------------------------------------------------------------------------------ */ - -import * as vscode from 'vscode'; -import * as assert from 'assert'; -import { getDocUri, activate } from './helper'; - -suite('Should do completion', () => { - const docUri = getDocUri('completion.txt'); - - test('Completes JS/TS in txt file', async () => { - await testCompletion(docUri, new vscode.Position(0, 0), { - items: [ - { label: 'JavaScript', kind: vscode.CompletionItemKind.Text }, - { label: 'TypeScript', kind: vscode.CompletionItemKind.Text } - ] - }); - }); -}); - -async function testCompletion( - docUri: vscode.Uri, - position: vscode.Position, - expectedCompletionList: vscode.CompletionList -) { - await activate(docUri); - - // Executing the command `vscode.executeCompletionItemProvider` to simulate triggering completion - const actualCompletionList = (await vscode.commands.executeCommand( - 'vscode.executeCompletionItemProvider', - docUri, - position - )) as vscode.CompletionList; - - assert.ok(actualCompletionList.items.length >= 2); - expectedCompletionList.items.forEach((expectedItem, i) => { - const actualItem = actualCompletionList.items[i]; - assert.equal(actualItem.label, expectedItem.label); - assert.equal(actualItem.kind, expectedItem.kind); - }); -} diff --git a/client/src/test/diagnostics.test.ts b/client/src/test/diagnostics.test.ts deleted file mode 100644 index 1aa8a36..0000000 --- a/client/src/test/diagnostics.test.ts +++ /dev/null @@ -1,41 +0,0 @@ -/* -------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - * ------------------------------------------------------------------------------------------ */ - -import * as vscode from 'vscode'; -import * as assert from 'assert'; -import { getDocUri, activate } from './helper'; - -suite('Should get diagnostics', () => { - const docUri = getDocUri('diagnostics.txt'); - - test('Diagnoses uppercase texts', async () => { - await testDiagnostics(docUri, [ - { message: 'ANY is all uppercase.', range: toRange(0, 0, 0, 3), severity: vscode.DiagnosticSeverity.Warning, source: 'ex' }, - { message: 'ANY is all uppercase.', range: toRange(0, 14, 0, 17), severity: vscode.DiagnosticSeverity.Warning, source: 'ex' }, - { message: 'OS is all uppercase.', range: toRange(0, 18, 0, 20), severity: vscode.DiagnosticSeverity.Warning, source: 'ex' } - ]); - }); -}); - -function toRange(sLine: number, sChar: number, eLine: number, eChar: number) { - const start = new vscode.Position(sLine, sChar); - const end = new vscode.Position(eLine, eChar); - return new vscode.Range(start, end); -} - -async function testDiagnostics(docUri: vscode.Uri, expectedDiagnostics: vscode.Diagnostic[]) { - await activate(docUri); - - const actualDiagnostics = vscode.languages.getDiagnostics(docUri); - - assert.equal(actualDiagnostics.length, expectedDiagnostics.length); - - expectedDiagnostics.forEach((expectedDiagnostic, i) => { - const actualDiagnostic = actualDiagnostics[i]; - assert.equal(actualDiagnostic.message, expectedDiagnostic.message); - assert.deepEqual(actualDiagnostic.range, expectedDiagnostic.range); - assert.equal(actualDiagnostic.severity, expectedDiagnostic.severity); - }); -} \ No newline at end of file diff --git a/client/src/test/helper.ts b/client/src/test/helper.ts deleted file mode 100644 index 6e6724d..0000000 --- a/client/src/test/helper.ts +++ /dev/null @@ -1,47 +0,0 @@ -/* -------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - * ------------------------------------------------------------------------------------------ */ - -import * as vscode from 'vscode'; -import * as path from 'path'; - -export let doc: vscode.TextDocument; -export let editor: vscode.TextEditor; -export let documentEol: string; -export let platformEol: string; - -/** - * Activates the vscode.lsp-sample extension - */ -export async function activate(docUri: vscode.Uri) { - // The extensionId is `publisher.name` from package.json - const ext = vscode.extensions.getExtension('vscode-samples.lsp-sample')!; - await ext.activate(); - try { - doc = await vscode.workspace.openTextDocument(docUri); - editor = await vscode.window.showTextDocument(doc); - await sleep(2000); // Wait for server activation - } catch (e) { - console.error(e); - } -} - -async function sleep(ms: number) { - return new Promise(resolve => setTimeout(resolve, ms)); -} - -export const getDocPath = (p: string) => { - return path.resolve(__dirname, '../../testFixture', p); -}; -export const getDocUri = (p: string) => { - return vscode.Uri.file(getDocPath(p)); -}; - -export async function setTestContent(content: string): Promise { - const all = new vscode.Range( - doc.positionAt(0), - doc.positionAt(doc.getText().length) - ); - return editor.edit(eb => eb.replace(all, content)); -} diff --git a/client/src/test/index.ts b/client/src/test/index.ts deleted file mode 100644 index b9de4dc..0000000 --- a/client/src/test/index.ts +++ /dev/null @@ -1,43 +0,0 @@ -/* -------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - * ------------------------------------------------------------------------------------------ */ -import * as path from 'path'; -import * as Mocha from 'mocha'; -import * as glob from 'glob'; - -export function run(): Promise { - // Create the mocha test - const mocha = new Mocha({ - ui: 'tdd', - color: true - }); - mocha.timeout(100000); - - const testsRoot = __dirname; - - return new Promise((resolve, reject) => { - glob('**.test.js', { cwd: testsRoot }, (err, files) => { - if (err) { - return reject(err); - } - - // Add files to the test suite - files.forEach(f => mocha.addFile(path.resolve(testsRoot, f))); - - try { - // Run the mocha test - mocha.run(failures => { - if (failures > 0) { - reject(new Error(`${failures} tests failed.`)); - } else { - resolve(); - } - }); - } catch (err) { - console.error(err); - reject(err); - } - }); - }); -} \ No newline at end of file diff --git a/client/src/test/runTest.ts b/client/src/test/runTest.ts deleted file mode 100644 index 3361768..0000000 --- a/client/src/test/runTest.ts +++ /dev/null @@ -1,27 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ -import * as path from 'path'; - -import { runTests } from 'vscode-test'; - -async function main() { - try { - // The folder containing the Extension Manifest package.json - // Passed to `--extensionDevelopmentPath` - const extensionDevelopmentPath = path.resolve(__dirname, '../../../'); - - // The path to test runner - // Passed to --extensionTestsPath - const extensionTestsPath = path.resolve(__dirname, './index'); - - // Download VS Code, unzip it and run the integration test - await runTests({ extensionDevelopmentPath, extensionTestsPath }); - } catch (err) { - console.error('Failed to run tests'); - process.exit(1); - } -} - -main(); \ No newline at end of file diff --git a/client/testFixture/P2PKH.cash b/client/testFixture/P2PKH.cash deleted file mode 100644 index 74bfd3a..0000000 --- a/client/testFixture/P2PKH.cash +++ /dev/null @@ -1,3 +0,0 @@ -contract P2PKH() { - -} \ No newline at end of file diff --git a/client/testFixture/P2PKH.json b/client/testFixture/P2PKH.json deleted file mode 100644 index 6017b77..0000000 --- a/client/testFixture/P2PKH.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "contractName": "P2PKH", - "constructorInputs": [ - { - "name": "pkh", - "type": "bytes20" - } - ], - "abi": [ - { - "name": "spend", - "covenant": false, - "inputs": [ - { - "name": "pk", - "type": "pubkey" - }, - { - "name": "s", - "type": "sig" - } - ] - }, - { - "name": "name", - "covenant": false, - "inputs": [ - { - "name": "m", - "type": "int" - } - ] - } - ], - "bytecode": "OP_OVER OP_0 OP_NUMEQUAL OP_IF OP_2 OP_PICK OP_HASH160 OP_EQUALVERIFY OP_2 OP_PICK OP_2 OP_PICK OP_CHECKSIGVERIFY OP_ROT OP_ROT OP_CHECKSIG OP_NIP OP_ELSE OP_SWAP OP_1 OP_NUMEQUALVERIFY OP_OVER OP_1 OP_NUMEQUAL OP_IF OP_OVER OP_1 OP_NUMEQUALVERIFY OP_ELSE OP_OVER OP_10 OP_LESSTHAN OP_VERIFY OP_ENDIF OP_2DROP OP_1 OP_ENDIF", - "source": "pragma cashscript ^0.6.0;\r\n\r\ncontract P2PKH(bytes20 pkh) {\r\n function spend( pubkey pk , sig s) {\r\n require(hash160(pk) == pkh);\r\n require(checkSig(s, pk));\r\n require(checkSig(s, pk));\r\n\r\n }\r\n\r\n function name(int m) {\r\n if(m == 1){\r\n require(m == 1);\r\n }else {\r\n require(m < 10);\r\n }\r\n }\r\n\r\n}\r\n\r\n", - "compiler": { - "name": "cashc", - "version": "0.6.3" - }, - "updatedAt": "2021-06-09T15:45:29.447Z" -} \ No newline at end of file diff --git a/client/testFixture/m.cash b/client/testFixture/m.cash deleted file mode 100644 index e69de29..0000000 diff --git a/client/testFixture/p.cash b/client/testFixture/p.cash deleted file mode 100644 index e4062d3..0000000 --- a/client/testFixture/p.cash +++ /dev/null @@ -1,13 +0,0 @@ -pragma cashscript ^0.6.0; - -contract MyContract() { - - function myFunction(int num) { - require(num == 1); - } - - function spend(bool b) { - require(b == true); - } - -} \ No newline at end of file diff --git a/client/testFixture/p.json b/client/testFixture/p.json deleted file mode 100644 index 0e52c40..0000000 --- a/client/testFixture/p.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "contractName": "MyContract", - "constructorInputs": [], - "abi": [ - { - "name": "myFunction", - "covenant": false, - "inputs": [ - { - "name": "num", - "type": "int" - } - ] - }, - { - "name": "spend", - "covenant": false, - "inputs": [ - { - "name": "b", - "type": "bool" - } - ] - } - ], - "bytecode": "OP_DUP OP_0 OP_NUMEQUAL OP_IF OP_SWAP OP_1 OP_NUMEQUAL OP_NIP OP_ELSE OP_1 OP_NUMEQUALVERIFY OP_1 OP_EQUAL OP_ENDIF", - "source": "pragma cashscript ^0.6.0;\r\n\r\ncontract MyContract() {\r\n \r\n function myFunction(int num) {\r\n require(num == 1);\r\n }\r\n\r\n function spend(bool b) {\r\n require(b == true);\r\n }\r\n\r\n}", - "compiler": { - "name": "cashc", - "version": "0.6.3" - }, - "updatedAt": "2021-06-08T21:07:20.075Z" -} \ No newline at end of file diff --git a/client/testFixture/t.cash b/client/testFixture/t.cash deleted file mode 100644 index e1f2bb1..0000000 --- a/client/testFixture/t.cash +++ /dev/null @@ -1,8 +0,0 @@ - -contract ContractName() { - function test(pubkey pk) { - - require(hash160(pk) = true); - string x = "asdasd"; - } -} \ No newline at end of file diff --git a/client/testFixture/t.json b/client/testFixture/t.json deleted file mode 100644 index db01c03..0000000 --- a/client/testFixture/t.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "contractName": "ContractName", - "constructorInputs": [], - "abi": [ - { - "name": "n", - "covenant": false, - "inputs": [] - } - ], - "bytecode": "OP_1", - "source": "\r\ncontract ContractName() {\r\n function n() {\r\n require(true);\r\n }\r\n}", - "compiler": { - "name": "cashc", - "version": "0.6.0" - }, - "updatedAt": "2021-05-01T22:11:55.032Z" -} \ No newline at end of file diff --git a/client/testFixture/t.sol b/client/testFixture/t.sol deleted file mode 100644 index 493cc31..0000000 --- a/client/testFixture/t.sol +++ /dev/null @@ -1,5 +0,0 @@ -pragma solidity version; -/// @title A title that should describe the contract/interface -/// @author The name of the author -/// @notice Explain to an end user what this does -/// @dev Explain to a developer any extra details diff --git a/client/testFixture/t.ts b/client/testFixture/t.ts deleted file mode 100644 index efc1cb7..0000000 --- a/client/testFixture/t.ts +++ /dev/null @@ -1 +0,0 @@ -let for = "sdf"; \ No newline at end of file diff --git a/client/testFixture/test.cash b/client/testFixture/test.cash deleted file mode 100644 index 6857ad3..0000000 --- a/client/testFixture/test.cash +++ /dev/null @@ -1,26 +0,0 @@ -pragma cashscript ^0.6.0; - -contract TransferWithTimeout(pubkey sender, pubkey recipient, int timeout) { - // Require recipient's signature to match - function transfer(sig recipientSig) { - - if (1 == 1){ - require(true); - }else{ - require(false); - } - - bytes34 out1 = new OutputP2PKH(bytes8(10000), pkh); - bytes32 out2 = new OutputP2SH(bytes8(10000), hash160(tx.bytecode)); - require(hash256(out1 + out2) == tx.hashOutputs); - require(tx.time >= 1000000); - require(checkSig(recipientSig, recipient)); - } - - - // Require timeout time to be reached and sender's signature to match - function timeout(sig senderSig) { - require(checkSig(senderSig, sender)); - require(tx.time >= timeout); - } -} \ No newline at end of file diff --git a/client/testFixture/textfile.txt b/client/testFixture/textfile.txt deleted file mode 100644 index e69de29..0000000 diff --git a/client/testFixture/time.cash b/client/testFixture/time.cash deleted file mode 100644 index 2be043c..0000000 --- a/client/testFixture/time.cash +++ /dev/null @@ -1,45 +0,0 @@ -pragma cashscript ^0.6.0; - -// This is an experimental contract for a more "streaming" Mecenas experience -// Completely untested, just a concept -contract Mecenas(bytes4 initialBlock, int pledgePerBlock, bytes20 recipient, bytes20 funder) { - function receive(pubkey pk, sig s, int pledge) { - require(checkSig(s, pk)); - - //int m = date(""); - int initial = int(initialBlock); - require(tx.time >= initial); - - - // Pledge amount calculation is done in client, verified in contract - // When OP_MUL is enabled this can be done in contract - // Double require to account for integer division - int passedBlocks = int(tx.locktime) - initial; - require(pledge / passedBlocks == pledgePerBlock); - require((pledge - 1) / passedBlocks != pledgePerBlock); - - // Cut out old initialBlock (PUSH1 0x04 ) - // Insert new initialBlock (PUSH1 0x04 ) - bytes newContract = 0x4c04 + tx.locktime + tx.bytecode.split(6)[1]; - - int minerFee = 1000; // hardcoded fee - int intValue = int(bytes(tx.value)); - - if (intValue <= pledge + minerFee) { - bytes8 amount1 = bytes8(intValue - minerFee); - bytes34 out1 = new OutputP2PKH(amount1, recipient); - require(hash256(out1) == tx.hashOutputs); - } else { - bytes8 amount1 = bytes8(pledge); - bytes8 amount2 = bytes8(intValue - pledge - minerFee); - bytes34 out1 = new OutputP2PKH(amount1, recipient); - bytes32 out2 = new OutputP2SH(amount2, hash160(newContract)); - require(hash256(out1 + out2) == tx.hashOutputs); - } - } - - function reclaim(pubkey pk, sig s) { - require(hash160(pk) == funder); - require(checkSig(s, pk)); - } -} \ No newline at end of file diff --git a/client/tsconfig.json b/client/tsconfig.json deleted file mode 100644 index f772a58..0000000 --- a/client/tsconfig.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "compilerOptions": { - "module": "commonjs", - "target": "es2019", - "lib": ["dom"], - "outDir": "out", - "rootDir": "src", - "sourceMap": true - }, - "include": ["src"], - "exclude": ["node_modules", ".vscode-test"] -} diff --git a/comp/AST.ts b/comp/AST.ts deleted file mode 100644 index aa32886..0000000 --- a/comp/AST.ts +++ /dev/null @@ -1,3 +0,0 @@ -// export abstract class Node { -// abstract accept(visitor: AstVisitor): T; -// } \ No newline at end of file diff --git a/comp/AstVisitor.ts b/comp/AstVisitor.ts deleted file mode 100644 index e69de29..0000000 diff --git a/comp/compile.ts b/comp/compile.ts deleted file mode 100644 index b45cc92..0000000 --- a/comp/compile.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { ANTLRInputStream, CommonTokenStream } from 'antlr4ts'; -import { CashScriptLexer } from './grammar/CashScriptLexer'; -import { CashScriptParser } from './grammar/CashScriptParser'; -import { CountFunctionsVisitor } from './visitor'; - -let code = ` -pragma cashscript ^0.6.0; -contract P2PKH(bytes20 pkh) { - function spend( pubkey pk , sig s) { - require(hash160(pk) == pkh); - require(checkSig(s, pk)); - require(checkSig(s, pk)); - } - -} -` - -let inputStream = new ANTLRInputStream(code); -let lexer = new CashScriptLexer(inputStream); -let tokenStream = new CommonTokenStream(lexer); -let parser = new CashScriptParser(tokenStream); - -let tree = parser.sourceFile(); - -console.log(tree) - -const cf = new CountFunctionsVisitor(); -cf.visit(tree); \ No newline at end of file diff --git a/comp/package.json b/comp/package.json deleted file mode 100644 index fcfc80f..0000000 --- a/comp/package.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "comp", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1", - "antlr4ts": "antlr4ts -visitor grammar/CashScript.g4" - }, - "keywords": [], - "author": "", - "license": "ISC", - "dependencies": { - "antlr4ts": "^0.5.0-alpha.4" - }, - "devDependencies": { - "antlr4ts-cli": "^0.5.0-alpha.4" - } -} diff --git a/comp/visitor.ts b/comp/visitor.ts deleted file mode 100644 index a39272d..0000000 --- a/comp/visitor.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { CashScriptVisitor } from './grammar/CashScriptVisitor' -import { - PragmaDirectiveContext -} from './grammar/CashScriptParser' -import { AbstractParseTreeVisitor } from 'antlr4ts/tree/AbstractParseTreeVisitor' -import { CashScriptParser } from './grammar/CashScriptParser'; -import { RuleNode } from 'antlr4ts/tree/RuleNode'; - -export class CountFunctionsVisitor extends AbstractParseTreeVisitor implements CashScriptVisitor { - protected defaultResult(): Node { - throw new Error('Method not implemented.'); - } - - processPragma(ctx: PragmaDirectiveContext): void { - console.log("REACHED") - // const pragmaName = getPragmaName(ctx.pragmaName().text); - // if (pragmaName !== PragmaName.CASHSCRIPT) throw new Error(); // Shouldn't happen - - // // Strip any -beta tags - // const actualVersion = version.replace(/-.*/g, ''); - - // ctx.pragmaValue().versionConstraint().forEach((constraint) => { - // const op = getVersionOpFromCtx(constraint.versionOperator()); - // const versionConstraint = `${op}${constraint.VersionLiteral().text}`; - // if (!semver.satisfies(actualVersion, versionConstraint)) { - // throw new VersionError(actualVersion, versionConstraint); - // } - // }); - } -} \ No newline at end of file diff --git a/comp/yarn.lock b/comp/yarn.lock deleted file mode 100644 index 61590f2..0000000 --- a/comp/yarn.lock +++ /dev/null @@ -1,13 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -antlr4ts-cli@^0.5.0-alpha.4: - version "0.5.0-alpha.4" - resolved "https://registry.yarnpkg.com/antlr4ts-cli/-/antlr4ts-cli-0.5.0-alpha.4.tgz#f3bfc37f10131e78d7b981c397a2aaa0450b67f6" - integrity sha512-lVPVBTA2CVHRYILSKilL6Jd4hAumhSZZWA7UbQNQrmaSSj7dPmmYaN4bOmZG79cOy0lS00i4LY68JZZjZMWVrw== - -antlr4ts@^0.5.0-alpha.4: - version "0.5.0-alpha.4" - resolved "https://registry.yarnpkg.com/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz#71702865a87478ed0b40c0709f422cf14d51652a" - integrity sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ== diff --git a/examples/test.cash b/examples/test.cash new file mode 100644 index 0000000..e293401 --- /dev/null +++ b/examples/test.cash @@ -0,0 +1,9 @@ +pragma cashscript ^0.6.0; + +contract myContract() { + function test(sig s) { + require(checkDataSig(s, msg, pk)); + require(tx.time >= 0); + require(checkSig()); + } +} \ No newline at end of file diff --git a/fileicons/cashscript-icon-theme.json b/fileicons/cashscript-icon-theme.json deleted file mode 100644 index 88188b9..0000000 --- a/fileicons/cashscript-icon-theme.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "iconDefinitions": { - "_cashscript": { - "iconPath": "../images/cashscript.svg" - } - }, - "fileExtensions": { - "cash":"_cashscript" - }, - "languageIds": { - "cashscript":"_cashscript" - } -} \ No newline at end of file diff --git a/fileicons/save.txt b/fileicons/save.txt deleted file mode 100644 index 0416395..0000000 --- a/fileicons/save.txt +++ /dev/null @@ -1,8 +0,0 @@ - , - "iconThemes": [ - { - "id": "cashscript", - "label": "%CashscriptTheme%", - "path":"./fileicons/cashscript-icon-theme.json" - } - ] \ No newline at end of file diff --git a/images/cashscript.svg b/images/cashscript.svg deleted file mode 100644 index 15aa9b1..0000000 --- a/images/cashscript.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/package-lock.json b/package-lock.json index 889f399..c09f9c8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,2091 +1,800 @@ { - "name": "vscode-cashscript", - "version": "1.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", - "dev": true - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@types/color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", - "dev": true - }, - "@types/eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==", - "dev": true - }, - "@types/json-schema": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.5.tgz", - "integrity": "sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ==", - "dev": true - }, - "@types/mocha": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.0.3.tgz", - "integrity": "sha512-vyxR57nv8NfcU0GZu8EUXZLTbCMupIUwy95LJ6lllN+JRPG25CwMHoB1q5xKh8YKhQnHYRAn4yW2yuHbf/5xgg==", - "dev": true - }, - "@types/node": { - "version": "12.12.48", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.48.tgz", - "integrity": "sha512-m3Nmo/YaDUfYzdCQlxjF5pIy7TNyDTAJhIa//xtHcF0dlgYIBKULKnmloCPtByDxtZXrWV8Pge1AKT6/lRvVWg==", - "dev": true - }, - "@typescript-eslint/experimental-utils": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz", - "integrity": "sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/typescript-estree": "2.34.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" - } - }, - "@typescript-eslint/parser": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.34.0.tgz", - "integrity": "sha512-03ilO0ucSD0EPTw2X4PntSIRFtDPWjrVq7C3/Z3VQHRC7+13YB55rcJI3Jt+YgeHbjUdJPcPa7b23rXCBokuyA==", - "dev": true, - "requires": { - "@types/eslint-visitor-keys": "^1.0.0", - "@typescript-eslint/experimental-utils": "2.34.0", - "@typescript-eslint/typescript-estree": "2.34.0", - "eslint-visitor-keys": "^1.1.0" - } - }, - "@typescript-eslint/typescript-estree": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz", - "integrity": "sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "eslint-visitor-keys": "^1.1.0", - "glob": "^7.1.6", - "is-glob": "^4.0.1", - "lodash": "^4.17.15", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - } - }, - "acorn": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.3.1.tgz", - "integrity": "sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA==", - "dev": true - }, - "acorn-jsx": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz", - "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==", - "dev": true - }, - "ajv": { - "version": "6.12.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz", - "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, - "ansi-escapes": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", - "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", - "dev": true, - "requires": { - "type-fest": "^0.11.0" - }, - "dependencies": { - "type-fest": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", - "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", - "dev": true - } - } - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "array.prototype.map": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array.prototype.map/-/array.prototype.map-1.0.2.tgz", - "integrity": "sha512-Az3OYxgsa1g7xDYp86l0nnN4bcmuEITGe1rbdEBVkrqkzMgDcbdQ2R7r41pNzti+4NMces3H8gMmuioZUilLgw==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.4" - } - }, - "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "binary-extensions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", - "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "chokidar": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.1.tgz", - "integrity": "sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg==", - "dev": true, - "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.1.2", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.3.0" - } - }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - }, - "dependencies": { - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - } - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "es-abstract": { - "version": "1.17.6", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", - "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.0", - "is-regex": "^1.1.0", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - }, - "es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", - "dev": true - }, - "es-get-iterator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.0.tgz", - "integrity": "sha512-UfrmHuWQlNMTs35e1ypnvikg6jCz3SK8v8ImvmDsh36fCVUR1MqoFDiyn0/k52C8NqO3YsO8Oe0azeesNuqSsQ==", - "dev": true, - "requires": { - "es-abstract": "^1.17.4", - "has-symbols": "^1.0.1", - "is-arguments": "^1.0.4", - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-string": "^1.0.5", - "isarray": "^2.0.5" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "eslint": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", - "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "ajv": "^6.10.0", - "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^1.4.3", - "eslint-visitor-keys": "^1.1.0", - "espree": "^6.1.2", - "esquery": "^1.0.1", - "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "inquirer": "^7.0.0", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.14", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "optionator": "^0.8.3", - "progress": "^2.0.0", - "regexpp": "^2.0.1", - "semver": "^6.1.2", - "strip-ansi": "^5.2.0", - "strip-json-comments": "^3.0.1", - "table": "^5.2.3", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "eslint-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", - "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "eslint-scope": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.0.tgz", - "integrity": "sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - } - }, - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - }, - "espree": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", - "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", - "dev": true, - "requires": { - "acorn": "^7.1.1", - "acorn-jsx": "^5.2.0", - "eslint-visitor-keys": "^1.1.0" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esquery": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", - "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.1.0.tgz", - "integrity": "sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw==", - "dev": true - } - } - }, - "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", - "dev": true, - "requires": { - "estraverse": "^4.1.0" - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", - "dev": true, - "requires": { - "flat-cache": "^2.0.1" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "flat": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz", - "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==", - "dev": true, - "requires": { - "is-buffer": "~2.0.3" - } - }, - "flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", - "dev": true, - "requires": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" - } - }, - "flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", - "dev": true, - "requires": { - "type-fest": "^0.8.1" - } - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "import-fresh": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", - "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "inquirer": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.0.tgz", - "integrity": "sha512-K+LZp6L/6eE5swqIcVXrxl21aGDU4S50gKH0/d96OMQnSBCyGyZl/oZhbkVmdp5sBoINHd4xZvFSARh2dk6DWA==", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.15", - "mute-stream": "0.0.8", - "run-async": "^2.4.0", - "rxjs": "^6.6.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" - }, - "dependencies": { - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "is-arguments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", - "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", - "dev": true - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-buffer": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", - "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", - "dev": true - }, - "is-callable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", - "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==", - "dev": true - }, - "is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.1.tgz", - "integrity": "sha512-T/S49scO8plUiAOA2DBTBG3JHpn1yiw0kRp6dgiZ0v2/6twi5eiB0rHtHFH9ZIrvlWc6+4O+m4zg5+Z833aXgw==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "dev": true - }, - "is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - }, - "is-set": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.1.tgz", - "integrity": "sha512-eJEzOtVyenDs1TMzSQ3kU3K+E0GUS9sno+F0OBT97xsgcJsF9nXMBtkT9/kut5JEpM7oL7X/0qxR17K3mcwIAA==", - "dev": true - }, - "is-string": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", - "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", - "dev": true - }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - }, - "isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "iterate-iterator": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/iterate-iterator/-/iterate-iterator-1.0.1.tgz", - "integrity": "sha512-3Q6tudGN05kbkDQDI4CqjaBf4qf85w6W6GnuZDtUVYwKgtC1q8yxYX7CZed7N+tLzQqS6roujWvszf13T+n9aw==", - "dev": true - }, - "iterate-value": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/iterate-value/-/iterate-value-1.0.2.tgz", - "integrity": "sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ==", - "dev": true, - "requires": { - "es-get-iterator": "^1.0.2", - "iterate-iterator": "^1.0.1" - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", - "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash": { - "version": "4.17.19", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", - "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", - "dev": true - }, - "log-symbols": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", - "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", - "dev": true, - "requires": { - "chalk": "^2.4.2" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "mocha": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.1.1.tgz", - "integrity": "sha512-p7FuGlYH8t7gaiodlFreseLxEmxTgvyG9RgPHODFPySNhwUehu8NIb0vdSt3WFckSneswZ0Un5typYcWElk7HQ==", - "dev": true, - "requires": { - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.3.1", - "debug": "3.2.6", - "diff": "4.0.2", - "escape-string-regexp": "1.0.5", - "find-up": "4.1.0", - "glob": "7.1.6", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "3.13.1", - "log-symbols": "3.0.0", - "minimatch": "3.0.4", - "ms": "2.1.2", - "object.assign": "4.1.0", - "promise.allsettled": "1.0.2", - "serialize-javascript": "4.0.0", - "strip-json-comments": "3.0.1", - "supports-color": "7.1.0", - "which": "2.0.2", - "wide-align": "1.1.3", - "workerpool": "6.0.0", - "yargs": "13.3.2", - "yargs-parser": "13.1.2", - "yargs-unparser": "1.6.1" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "strip-json-comments": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", - "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", - "dev": true - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "object-inspect": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", - "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", - "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", - "dev": true - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true - }, - "promise.allsettled": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/promise.allsettled/-/promise.allsettled-1.0.2.tgz", - "integrity": "sha512-UpcYW5S1RaNKT6pd+s9jp9K9rlQge1UXKskec0j6Mmuq7UJCvlS2J2/s/yuPN8ehftf9HXMxWlKiPbGGUzpoRg==", - "dev": true, - "requires": { - "array.prototype.map": "^1.0.1", - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", - "function-bind": "^1.1.1", - "iterate-value": "^1.0.0" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "readdirp": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.3.0.tgz", - "integrity": "sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ==", - "dev": true, - "requires": { - "picomatch": "^2.0.7" - } - }, - "regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", - "dev": true - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true - }, - "rxjs": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.0.tgz", - "integrity": "sha512-3HMA8z/Oz61DUHe+SdOiQyzIf4tOx5oQHmMir7IZEu6TMqCLHT4LRcmNaUS0NwOz8VLvmmBduMsoaUvMaIiqzg==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "dev": true - }, - "serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "dev": true - }, - "slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - } - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, - "string.prototype.trimend": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", - "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "string.prototype.trimstart": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", - "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - } - } - }, - "strip-json-comments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.0.tgz", - "integrity": "sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "table": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", - "dev": true, - "requires": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" - }, - "dependencies": { - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - } - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "tslib": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==", - "dev": true - }, - "tsutils": { - "version": "3.17.1", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", - "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - }, - "typescript": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.2.tgz", - "integrity": "sha512-e4ERvRV2wb+rRZ/IQeb3jm2VxBsirQLpQhdxplZ2MEzGvDkkMmPglecnNDfSUBivMjP93vRbngYYDQqQ/78bcQ==", - "dev": true - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "v8-compile-cache": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", - "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", - "dev": true - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "workerpool": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.0.0.tgz", - "integrity": "sha512-fU2OcNA/GVAJLLyKUoHkAgIhKb0JoCpSjLC/G2vYKxUjVmQwGbRVeoPJ1a8U4pnVofz4AQV5Y/NEw8oKqxEBtA==", - "dev": true - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "dependencies": { - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "dev": true, - "requires": { - "mkdirp": "^0.5.1" - } - }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true - }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - }, - "dependencies": { - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - } - } - }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "yargs-unparser": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.1.tgz", - "integrity": "sha512-qZV14lK9MWsGCmcr7u5oXGH0dbGqZAIxTDrWXZDo5zUr6b6iUmelNKO6x6R1dQT24AH3LgRxJpr8meWy2unolA==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "decamelize": "^1.2.0", - "flat": "^4.1.0", - "is-plain-obj": "^1.1.0", - "yargs": "^14.2.3" - }, - "dependencies": { - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "yargs": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-14.2.3.tgz", - "integrity": "sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "decamelize": "^1.2.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^15.0.1" - } - }, - "yargs-parser": { - "version": "15.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.1.tgz", - "integrity": "sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - } - } + "name": "vscode-cashscript", + "version": "0.0.1", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@bitauth/libauth": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/@bitauth/libauth/-/libauth-1.18.1.tgz", + "integrity": "sha512-s7evdGbdGAnGkv7xt6mCbcWTTNvburc1Z9EX/8JKwcRLqofjDs7VAEz+RP3a8OGEo4MWFV6Ydqu/BeJjIA7Kdg==" + }, + "@cashscript/utils": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@cashscript/utils/-/utils-0.6.3.tgz", + "integrity": "sha512-DwWxgAM/XRmpGaeiQ0qZUQKw0C+eDNnjvkwo6hWux1JCY5Sv/HyysEIF1wk+mpAmV4nzpnfuAsU6muu/aF7B0w==", + "requires": { + "@bitauth/libauth": "^1.18.1", + "hash.js": "^1.1.7" + } + }, + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true + }, + "@types/node": { + "version": "15.12.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.12.2.tgz", + "integrity": "sha512-zjQ69G564OCIWIOHSXyQEEDpdpGl+G348RAKY0XXy9Z5kU9Vzv1GMNnkar/ZJ8dzXB3COzD9Mo9NtRZ4xfgUww==" + }, + "@types/vscode": { + "version": "1.56.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.56.0.tgz", + "integrity": "sha512-Q5VmQxOx+L1Y6lIJiGcJzwcyV3pQo/eiW8P+7sNLhFI16tJCwtua2DLjHRcpjbCLNVYpQM73kzfFo1Z0HyP9eQ==", + "dev": true + }, + "@types/ws": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.4.tgz", + "integrity": "sha512-d/7W23JAXPodQNbOZNXvl2K+bqAQrCMwlh/nuQsPSQk6Fq0opHoPrUw43aHsvSbIiQPr8Of2hkFbnz1XBFVyZQ==", + "requires": { + "@types/node": "*" + } + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "requires": { + "debug": "4" + } + }, + "antlr4ts": { + "version": "0.5.0-alpha.4", + "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", + "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==" + }, + "async-mutex": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.2.6.tgz", + "integrity": "sha512-Hs4R+4SPgamu6rSGW8C7cV9gaWUKEHykfzCCvIRuaVv636Ju10ZdeUbvb4TBEW0INuq2DHZqXbK4Nd3yG4RaRw==", + "requires": { + "tslib": "^2.0.0" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "big-integer": { + "version": "1.6.48", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz", + "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==", + "dev": true + }, + "binary": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", + "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=", + "dev": true, + "requires": { + "buffers": "~0.1.1", + "chainsaw": "~0.1.0" + } + }, + "bip68": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/bip68/-/bip68-1.0.4.tgz", + "integrity": "sha512-O1htyufFTYy3EO0JkHg2CLykdXEtV2ssqw47Gq9A0WByp662xpJnMEB9m43LZjsSDjIAOozWRExlFQk2hlV1XQ==" + }, + "bitcoin-rpc-promise-retry": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/bitcoin-rpc-promise-retry/-/bitcoin-rpc-promise-retry-1.3.0.tgz", + "integrity": "sha512-xhldBhYwiUNY4spzkXXcU9LEq+nbSKJ5tvYWEUe/XTCe1VYoe8tEb5jJq4MBA2d+5egiUOA+P1QTTYm1FqPtOg==", + "requires": { + "bitcoind-rpc": "^0.8.0" + } + }, + "bitcoind-rpc": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/bitcoind-rpc/-/bitcoind-rpc-0.8.1.tgz", + "integrity": "sha512-NfhykAT/x/P1SOiog8UzltvTiv6A6d2X5VWJ3UjGeAqFLXv+IYHy+E4fFCBmgQRyIb1EIcyIZK1SVpSOGRHsaw==" + }, + "bluebird": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", + "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "buffer-indexof-polyfill": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", + "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==", + "dev": true + }, + "buffers": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", + "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=", + "dev": true + }, + "cashc": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/cashc/-/cashc-0.6.3.tgz", + "integrity": "sha512-Jd19Em2y3fMK4Xtr9citQqVRlSUMjZG+PVPRSGM5BVcJaYuLOLzHL1iAXAz+RIvkMvaFMaownpOP4yFyMJRWIA==", + "requires": { + "@bitauth/libauth": "^1.18.1", + "@cashscript/utils": "^0.6.3", + "antlr4ts": "^0.5.0-alpha.4", + "commander": "^7.1.0", + "semver": "^7.3.4" + }, + "dependencies": { + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "cashscript": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/cashscript/-/cashscript-0.6.3.tgz", + "integrity": "sha512-ISWioARsX/TnUJrcU6w0WsBW5HCY5GKxM2F065AovGf9z7XhmK+UeQnch+mKVUzV96BzPw0HUuTAQpDvFqbMeg==", + "requires": { + "@bitauth/libauth": "^1.18.1", + "@cashscript/utils": "^0.6.3", + "bip68": "^1.0.4", + "bitcoin-rpc-promise-retry": "^1.3.0", + "delay": "^5.0.0", + "electrum-cash": "^2.0.6" + } + }, + "chainsaw": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", + "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=", + "dev": true, + "requires": { + "traverse": ">=0.3.0 <0.4" + } + }, + "commander": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "delay": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/delay/-/delay-5.0.0.tgz", + "integrity": "sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==" + }, + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true + }, + "duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "dev": true, + "requires": { + "readable-stream": "^2.0.2" + } + }, + "electrum-cash": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/electrum-cash/-/electrum-cash-2.0.7.tgz", + "integrity": "sha512-AHgrJR7WVdo8mWH3E1Us1VygOUvLuJVFJnItMbj/thsApqecqxZznzhlqMjc+mHhole6S1xq/nOkmRo5OAtRow==", + "requires": { + "@types/ws": "^7.2.6", + "async-mutex": "^0.2.4", + "debug": "^4.1.1", + "isomorphic-ws": "^4.0.1", + "ws": "^7.3.1" + } + }, + "es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", + "dev": true + }, + "es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "dev": true, + "requires": { + "es6-promise": "^4.0.3" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "dev": true + }, + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true + }, + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + } + }, + "https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isomorphic-ws": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz", + "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==" + }, + "listenercount": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", + "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=", + "dev": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "mocha": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", + "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", + "dev": true, + "requires": { + "browser-stdout": "1.3.1", + "commander": "2.15.1", + "debug": "3.1.0", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "glob": "7.1.2", + "growl": "1.10.5", + "he": "1.1.1", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "supports-color": "5.4.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "traverse": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=", + "dev": true + }, + "tslib": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", + "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" + }, + "typescript": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.2.tgz", + "integrity": "sha512-zZ4hShnmnoVnAHpVHWpTcxdv7dWP60S2FsydQLV8V5PbS3FifjWFFRiHSWpDJahly88PRyV5teTSLoq4eG7mKw==", + "dev": true + }, + "unzipper": { + "version": "0.10.11", + "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz", + "integrity": "sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==", + "dev": true, + "requires": { + "big-integer": "^1.6.17", + "binary": "~0.3.0", + "bluebird": "~3.4.1", + "buffer-indexof-polyfill": "~1.0.0", + "duplexer2": "~0.1.4", + "fstream": "^1.0.12", + "graceful-fs": "^4.2.2", + "listenercount": "~1.0.1", + "readable-stream": "~2.3.6", + "setimmediate": "~1.0.4" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "vscode": { + "version": "1.1.37", + "resolved": "https://registry.npmjs.org/vscode/-/vscode-1.1.37.tgz", + "integrity": "sha512-vJNj6IlN7IJPdMavlQa1KoFB3Ihn06q1AiN3ZFI/HfzPNzbKZWPPuiU+XkpNOfGU5k15m4r80nxNPlM7wcc0wg==", + "dev": true, + "requires": { + "glob": "^7.1.2", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "mocha": "^5.2.0", + "semver": "^5.4.1", + "source-map-support": "^0.5.0", + "vscode-test": "^0.4.1" + }, + "dependencies": { + "agent-base": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", + "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", + "dev": true, + "requires": { + "es6-promisify": "^5.0.0" + } + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "vscode-test": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-0.4.3.tgz", + "integrity": "sha512-EkMGqBSefZH2MgW65nY05rdRSko15uvzq4VAPM5jVmwYuFQKE7eikKXNJDRxL+OITXHB6pI+a3XqqD32Y3KC5w==", + "dev": true, + "requires": { + "http-proxy-agent": "^2.1.0", + "https-proxy-agent": "^2.2.1" + }, + "dependencies": { + "http-proxy-agent": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", + "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", + "dev": true, + "requires": { + "agent-base": "4", + "debug": "3.1.0" + } + }, + "https-proxy-agent": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", + "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", + "dev": true, + "requires": { + "agent-base": "^4.3.0", + "debug": "^3.1.0" + } + } + } + } + } + }, + "vscode-jsonrpc": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", + "integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==" + }, + "vscode-languageclient": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-7.0.0.tgz", + "integrity": "sha512-P9AXdAPlsCgslpP9pRxYPqkNYV7Xq8300/aZDpO35j1fJm/ncize8iGswzYlcvFw5DQUx4eVk+KvfXdL0rehNg==", + "requires": { + "minimatch": "^3.0.4", + "semver": "^7.3.4", + "vscode-languageserver-protocol": "3.16.0" + }, + "dependencies": { + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "vscode-languageserver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz", + "integrity": "sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw==", + "requires": { + "vscode-languageserver-protocol": "3.16.0" + } + }, + "vscode-languageserver-protocol": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz", + "integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==", + "requires": { + "vscode-jsonrpc": "6.0.0", + "vscode-languageserver-types": "3.16.0" + } + }, + "vscode-languageserver-textdocument": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.1.tgz", + "integrity": "sha512-UIcJDjX7IFkck7cSkNNyzIz5FyvpQfY7sdzVy+wkKN/BLaD4DQ0ppXQrKePomCxTS7RrolK1I0pey0bG9eh8dA==" + }, + "vscode-languageserver-types": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", + "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==" + }, + "vscode-test": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-1.5.2.tgz", + "integrity": "sha512-x9PVfKxF6EInH9iSFGQi0V8H5zIW1fC7RAer6yNQR6sy3WyOwlWkuT3I+wf75xW/cO53hxMi1aj/EvqQfDFOAg==", + "dev": true, + "requires": { + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "rimraf": "^3.0.2", + "unzipper": "^0.10.11" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "ws": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==" + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } } diff --git a/package.json b/package.json index 8d8158b..1cf8bed 100644 --- a/package.json +++ b/package.json @@ -1,116 +1,86 @@ { - "name": "vscode-cashscript", - "description": "A language extension for cashscript.", - "author": "Nathaniel Cherian", - "license": "MIT", - "version": "1.0.0", - "repository": { - "type": "git", - "url": "https://github.com/nathanielCherian/vscode-cashscript" - }, - "categories": [ - "Snippets" - ], - "keywords": [ - "multi-root ready" - ], - "engines": { - "vscode": "^1.43.0" - }, - "activationEvents": [ - "onLanguage:cashscript", - "onCommand:cashscript.sayHello" - ], - "main": "./client/out/extension", - "contributes": { - "configuration": { - "type": "object", - "title": "Example configuration", - "properties": { - "languageServerExample.maxNumberOfProblems": { - "scope": "resource", - "type": "number", - "default": 100, - "description": "Controls the maximum number of problems produced by the server." - }, - "languageServerExample.trace.server": { - "scope": "window", - "type": "string", - "enum": [ - "off", - "messages", - "verbose" - ], - "default": "off", - "description": "Traces the communication between VS Code and the language server." - } - } - }, - "menus": { - "editor/title": [ - { - "when": "resourceLangId == cashscript", - "command": "cashscript.compileContract", - "group": "navigation" - } - ] - }, - "languages": [ - { - "id": "cashscript", - "aliases": [ - "Cashscript", - "cashscript" - ], - "extensions": [ - ".cash" - ], - "configuration": "./cashscript.configuration.json" - } - ], - "commands": [ - { - "command": "cashscript.compileContract", - "title": "Compile Contract" - }, - { - "command": "cashscript.sayHello", - "title": "Say Hello" - } - ], - "snippets": [ - { - "language": "cashscript", - "path": "./snippets/cashscript.snippets.json" - } - ], - "grammars": [ - { - "language": "cashscript", - "scopeName": "source.cash", - "path": "./syntaxes/cash.tmGrammar.json" - } - ], - "keybindings":[ - { - "command": "cashscript.compileContract", - "key": "ctrl+f5" - } - ] - }, - "scripts": { - "vscode:prepublish": "npm run compile", - "compile": "tsc -b", - "watch": "tsc -b -w", - "postinstall": "cd client && npm install && cd ../server && npm install && cd ..", - "test": "sh ./scripts/e2e.sh" - }, - "devDependencies": { - "@types/mocha": "^8.0.3", - "mocha": "^8.1.1", - "@types/node": "^12.12.0", - "eslint": "^6.4.0", - "@typescript-eslint/parser": "^2.3.0", - "typescript": "^4.0.2" - } + "name": "vscode-cashscript", + "displayName": "vscode-cashscript", + "description": "Language extension for cashscript", + "version": "0.0.1", + "engines": { + "vscode": "^1.50.1" + }, + "categories": [ + "Programming Languages" + ], + "activationEvents": [ + "onLanguage:cashscript", + "onCommand:cashscript.compile" + ], + "main": "./out/src/extension", + "scripts": { + "vscode:prepublish": "npm run compile", + "compile": "tsc -p ./", + "watch": "tsc -watch -p ./", + "prepare": "node ./node_modules/vscode/bin/install" + }, + "contributes": { + "languages": [ + { + "id": "cashscript", + "aliases": [ + "cashscript", + "Cashscript" + ], + "extensions": [ + ".cash" + ], + "configuration": "./cashscript.configuration.json" + } + ], + "grammars": [ + { + "language": "cashscript", + "scopeName": "source.cash", + "path": "./syntaxes/cashscript.tmLanguage.json" + } + ], + "snippets": [ + { + "language": "cashscript", + "path": "./snippets/cashscript.snippets.json" + } + ], + "commands": [ + { + "command": "cashscript.compile", + "title": "Compile Contract" + } + ], + "keybindings": [ + { + "command": "cashscript.compile", + "key": "ctrl+f5" + } + ], + "menus": { + "editor/title": [ + { + "when": "resourceLangId == cashscript", + "command": "cashscript.compile", + "group": "navigation" + } + ] + } + }, + "dependencies": { + "antlr4ts": "^0.5.0-alpha.4", + "cashc": "^0.6.3", + "cashscript": "^0.6.3", + "vscode-languageclient": "^7.0.0", + "vscode-languageserver": "^7.0.0", + "vscode-languageserver-textdocument": "^1.0.1" + }, + "devDependencies": { + "@types/vscode": "^1.56.0", + "typescript": "^4.3.2", + "vscode": "^1.1.37", + "vscode-test": "^1.5.2" + } } diff --git a/scripts/e2e.sh b/scripts/e2e.sh deleted file mode 100644 index 860c62e..0000000 --- a/scripts/e2e.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env bash - -export CODE_TESTS_PATH="$(pwd)/client/out/test" -export CODE_TESTS_WORKSPACE="$(pwd)/client/testFixture" - -node "$(pwd)/client/out/test/runTest" \ No newline at end of file diff --git a/server/package-lock.json b/server/package-lock.json deleted file mode 100644 index e672255..0000000 --- a/server/package-lock.json +++ /dev/null @@ -1,185 +0,0 @@ -{ - "name": "vscode-cashscript-server", - "version": "1.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@bitauth/libauth": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/@bitauth/libauth/-/libauth-1.18.1.tgz", - "integrity": "sha512-s7evdGbdGAnGkv7xt6mCbcWTTNvburc1Z9EX/8JKwcRLqofjDs7VAEz+RP3a8OGEo4MWFV6Ydqu/BeJjIA7Kdg==" - }, - "@types/node": { - "version": "14.14.31", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.31.tgz", - "integrity": "sha512-vFHy/ezP5qI0rFgJ7aQnjDXwAMrG0KqqIH7tQG5PPv3BWBayOPIQNBjVc/P6hhdZfMx51REc6tfDNXHUio893g==" - }, - "@types/semver": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-6.2.2.tgz", - "integrity": "sha512-RxAwYt4rGwK5GyoRwuP0jT6ZHAVTdz2EqgsHmX0PYNjGsko+OeT4WFXXTs/lM3teJUJodM+SNtAL5/pXIJ61IQ==" - }, - "@types/ws": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.0.tgz", - "integrity": "sha512-Y29uQ3Uy+58bZrFLhX36hcI3Np37nqWE7ky5tjiDoy1GDZnIwVxS0CgF+s+1bXMzjKBFy+fqaRfb708iNzdinw==", - "requires": { - "@types/node": "*" - } - }, - "antlr4ts": { - "version": "0.5.0-alpha.4", - "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", - "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==" - }, - "async-mutex": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.2.6.tgz", - "integrity": "sha512-Hs4R+4SPgamu6rSGW8C7cV9gaWUKEHykfzCCvIRuaVv636Ju10ZdeUbvb4TBEW0INuq2DHZqXbK4Nd3yG4RaRw==", - "requires": { - "tslib": "^2.0.0" - } - }, - "bip68": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/bip68/-/bip68-1.0.4.tgz", - "integrity": "sha512-O1htyufFTYy3EO0JkHg2CLykdXEtV2ssqw47Gq9A0WByp662xpJnMEB9m43LZjsSDjIAOozWRExlFQk2hlV1XQ==" - }, - "cashc": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/cashc/-/cashc-0.5.7.tgz", - "integrity": "sha512-FmD7Yvi01vU4gOVnug78GSEzMgzbhMwQtbudi9zFwCucQvfiHx7hCqBmxKEo7z5kvJzPAeSLLzAdHrmlNthy8A==", - "requires": { - "@bitauth/libauth": "^1.17.2", - "@types/semver": "^6.0.2", - "antlr4ts": "^0.5.0-alpha.3", - "commander": "^6.0.0", - "semver": "^6.3.0" - } - }, - "cashscript": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/cashscript/-/cashscript-0.5.7.tgz", - "integrity": "sha512-fEULeedpkyNgurTbFVBBooEZ2t5Zw0WN6evJYSvuY2QeVYm5ftuTL0rp8T0nT7ep3OHoeIWZLuJemWZnOExOAA==", - "requires": { - "@bitauth/libauth": "^1.17.2", - "bip68": "^1.0.4", - "cashc": "^0.5.7", - "delay": "^4.3.0", - "electrum-cash": "^2.0.4", - "hash.js": "^1.1.7" - } - }, - "commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==" - }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "requires": { - "ms": "2.1.2" - } - }, - "delay": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/delay/-/delay-4.4.1.tgz", - "integrity": "sha512-aL3AhqtfhOlT/3ai6sWXeqwnw63ATNpnUiN4HL7x9q+My5QtHlO3OIkasmug9LKzpheLdmUKGRKnYXYAS7FQkQ==" - }, - "electrum-cash": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/electrum-cash/-/electrum-cash-2.0.6.tgz", - "integrity": "sha512-+o0Hqcl0eCwd9fvCJpWn4yV3gYX874uCGpwpwNbZuEU9ipY5ft9iU0IfuFghUN6/AuCcsE6f8JkVOjuTjmfF5Q==", - "requires": { - "@types/ws": "^7.2.6", - "async-mutex": "^0.2.4", - "debug": "^4.1.1", - "isomorphic-ws": "^4.0.1", - "ws": "^7.3.1" - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "isomorphic-ws": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz", - "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==" - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "net": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/net/-/net-1.0.2.tgz", - "integrity": "sha1-0XV+yaf7I3HYPPR1XOPifhCCk4g=" - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - }, - "tslib": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", - "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==" - }, - "vscode-jsonrpc": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", - "integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==" - }, - "vscode-languageserver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz", - "integrity": "sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw==", - "requires": { - "vscode-languageserver-protocol": "3.16.0" - } - }, - "vscode-languageserver-protocol": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz", - "integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==", - "requires": { - "vscode-jsonrpc": "6.0.0", - "vscode-languageserver-types": "3.16.0" - } - }, - "vscode-languageserver-textdocument": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.1.tgz", - "integrity": "sha512-UIcJDjX7IFkck7cSkNNyzIz5FyvpQfY7sdzVy+wkKN/BLaD4DQ0ppXQrKePomCxTS7RrolK1I0pey0bG9eh8dA==" - }, - "vscode-languageserver-types": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", - "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==" - }, - "ws": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.3.tgz", - "integrity": "sha512-hr6vCR76GsossIRsr8OLR9acVVm1jyfEWvhbNjtgPOrfvAlKzvyeg/P6r8RuDjRyrcQoPQT7K0DGEPc7Ae6jzA==" - } - } -} diff --git a/server/package.json b/server/package.json deleted file mode 100644 index 5a3eb02..0000000 --- a/server/package.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "vscode-cashscript-server", - "description": "Server for cashscript extension", - "version": "1.0.0", - "author": "Nathaniel Cherian", - "license": "MIT", - "engines": { - "node": "*" - }, - "repository": { - "type": "git", - "url": "https://github.com/nathanielCherian/vscode-cashscript" - }, - "dependencies": { - "antlr4ts": "^0.5.0-alpha.4", - "cashscript": "^0.5.7", - "net": "^1.0.2", - "vscode-languageserver": "^7.0.0", - "vscode-languageserver-textdocument": "^1.0.1" - }, - "scripts": {} -} diff --git a/server/src/CashLinter/CashLinter.ts b/server/src/CashLinter/CashLinter.ts deleted file mode 100644 index c012c1b..0000000 --- a/server/src/CashLinter/CashLinter.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { ANTLRInputStream, CommonTokenStream } from 'antlr4ts'; -import { Diagnostic } from 'vscode-languageserver'; -import { SafeErrorListener, SafeErrorStrategy } from './ErrorListeners'; -import { CashScriptLexer } from './grammar/CashScriptLexer'; -import { CashScriptParser } from './grammar/CashScriptParser'; - -export default class CashLinter { - - static getDiagnostics(code:string):Diagnostic[]{ - - - const errListener = new SafeErrorListener(); - - const inputStream = new ANTLRInputStream(code); - const lexer = new CashScriptLexer(inputStream); - lexer.removeErrorListeners(); - lexer.addErrorListener(errListener); - - const tokenStream = new CommonTokenStream(lexer); - const parser = new CashScriptParser(tokenStream); - parser.errorHandler = new SafeErrorStrategy(); - parser.removeErrorListeners(); - parser.addErrorListener(errListener); - const parseTree = parser.sourceFile(); - - return errListener.getErrs() - } - -} - - diff --git a/server/src/CashLinter/grammar/CashScript.g4 b/server/src/CashLinter/grammar/CashScript.g4 deleted file mode 100644 index 7802cbf..0000000 --- a/server/src/CashLinter/grammar/CashScript.g4 +++ /dev/null @@ -1,198 +0,0 @@ -grammar CashScript; - -sourceFile - : pragmaDirective* contractDefinition EOF - ; - -pragmaDirective - : 'pragma' pragmaName pragmaValue ';' - ; - -pragmaName - : 'cashscript' - ; - -pragmaValue - : versionConstraint versionConstraint? - ; - -versionConstraint - : versionOperator? VersionLiteral - ; - -versionOperator - : '^' | '~' | '>=' | '>' | '<' | '<=' | '=' - ; - -contractDefinition - : 'contract' Identifier parameterList '{' functionDefinition* '}' - ; - -functionDefinition - : 'function' Identifier parameterList '{' statement* '}' - ; - -parameterList - : '(' (parameter (',' parameter)* ','?)? ')' - ; - -parameter - : typeName Identifier - ; - -block - : '{' statement* '}' - | statement - ; - -statement - : variableDefinition - | assignStatement - | timeOpStatement - | requireStatement - | ifStatement - ; - -variableDefinition - : typeName Identifier '=' expression ';' - ; - -assignStatement - : Identifier '=' expression ';' - ; - -timeOpStatement - : 'require' '(' TxVar '>=' expression ')' ';' - ; - -requireStatement - : 'require' '(' expression ')' ';' - ; - -ifStatement - : 'if' '(' expression ')' ifBlock=block ('else' elseBlock=block)? - ; - -functionCall - : Identifier expressionList // Only built-in functions are accepted - ; - -expressionList - : '(' (expression (',' expression)* ','?)? ')' - ; - -expression - : '(' expression ')' # Parenthesised - | typeName '(' castable=expression (',' size=expression)? ','? ')' # Cast - | functionCall # FunctionCallExpression - | 'new' Identifier expressionList #Instantiation - | expression '[' index=NumberLiteral ']' # TupleIndexOp - | expression op=('.reverse()' | '.length') # UnaryOp - | op=('!' | '-') expression # UnaryOp - // | expression '**' expression --- OP_POW does not exist in BCH Script - // | expression ('*' | '/' | '%') expression --- OP_MUL is disabled in BCH Script - | left=expression op='.split' '(' right=expression ')' # BinaryOp - | left=expression op=('/' | '%') right=expression # BinaryOp - | left=expression op=('+' | '-') right=expression # BinaryOp - // | expression ('>>' | '<<') expression --- OP_LSHIFT & RSHIFT are disabled in BCH Script - | left=expression op=('<' | '<=' | '>' | '>=') right=expression # BinaryOp - | left=expression op=('==' | '!=') right=expression # BinaryOp - | left=expression op='&' right=expression # BinaryOp - | left=expression op='^' right=expression # BinaryOp - | left=expression op='|' right=expression # BinaryOp - | left=expression op='&&' right=expression # BinaryOp - | left=expression op='||' right=expression # BinaryOp - | '[' (expression (',' expression)* ','?)? ']' # Array - | PreimageField # PreimageField - | Identifier # Identifier - | literal # LiteralExpression - ; - -literal - : BooleanLiteral - | numberLiteral - | StringLiteral - | DateLiteral - | HexLiteral - ; - -numberLiteral - : NumberLiteral NumberUnit? - ; - -typeName - : 'int' | 'bool' | 'string' | 'pubkey' | 'sig' | 'datasig' | Bytes - ; - -VersionLiteral - : [0-9]+ '.' [0-9]+ '.' [0-9]+ - ; - -BooleanLiteral - : 'true' | 'false' - ; - -NumberUnit - : 'satoshis' | 'sats' | 'finney' | 'bits' | 'bitcoin' - | 'seconds' | 'minutes' | 'hours' | 'days' | 'weeks' - ; - -NumberLiteral - : [-]?[0-9]+ ([eE] [0-9]+)? - ; - -Bytes - : 'bytes' Bound? - ; - -Bound - : [1-9] [0-9]* - ; - -StringLiteral - : '"' ('\\"' | ~["\r\n])*? '"' - | '\'' ('\\\'' | ~['\r\n])*? '\'' - ; - -DateLiteral - : 'date(' StringLiteral ')' - ; - -HexLiteral - : '0' [xX] [0-9A-Fa-f]* - ; - -TxVar - : 'tx.age' - | 'tx.time' - ; - -PreimageField - : 'tx.version' - | 'tx.hashPrevouts' - | 'tx.hashSequence' - | 'tx.outpoint' - | 'tx.bytecode' - | 'tx.value' - | 'tx.sequence' - | 'tx.hashOutputs' - | 'tx.locktime' - | 'tx.hashtype' - | 'tx.preimage' - ; - -Identifier - : [a-zA-Z] [a-zA-Z0-9_]* - ; - -WHITESPACE - : [ \t\r\n\u000C]+ -> skip - ; - -COMMENT - : '/*' .*? '*/' -> channel(HIDDEN) - ; - -LINE_COMMENT - : '//' ~[\r\n]* -> channel(HIDDEN) - ; diff --git a/server/src/CashLinter/grammar/CashScript.interp b/server/src/CashLinter/grammar/CashScript.interp deleted file mode 100644 index e1a1717..0000000 --- a/server/src/CashLinter/grammar/CashScript.interp +++ /dev/null @@ -1,150 +0,0 @@ -token literal names: -null -'pragma' -';' -'cashscript' -'^' -'~' -'>=' -'>' -'<' -'<=' -'=' -'contract' -'{' -'}' -'function' -'(' -',' -')' -'require' -'if' -'else' -'new' -'[' -']' -'.reverse()' -'.length' -'!' -'-' -'.split' -'/' -'%' -'+' -'==' -'!=' -'&' -'|' -'&&' -'||' -'int' -'bool' -'string' -'pubkey' -'sig' -'datasig' -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null - -token symbolic names: -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -VersionLiteral -BooleanLiteral -NumberUnit -NumberLiteral -Bytes -Bound -StringLiteral -DateLiteral -HexLiteral -TxVar -PreimageField -Identifier -WHITESPACE -COMMENT -LINE_COMMENT - -rule names: -sourceFile -pragmaDirective -pragmaName -pragmaValue -versionConstraint -versionOperator -contractDefinition -functionDefinition -parameterList -parameter -block -statement -variableDefinition -assignStatement -timeOpStatement -requireStatement -ifStatement -functionCall -expressionList -expression -literal -numberLiteral -typeName - - -atn: -[3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 3, 60, 290, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 3, 2, 7, 2, 50, 10, 2, 12, 2, 14, 2, 53, 11, 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 5, 3, 5, 5, 5, 67, 10, 5, 3, 6, 5, 6, 70, 10, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 7, 8, 81, 10, 8, 12, 8, 14, 8, 84, 11, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 93, 10, 9, 12, 9, 14, 9, 96, 11, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 7, 10, 104, 10, 10, 12, 10, 14, 10, 107, 11, 10, 3, 10, 5, 10, 110, 10, 10, 5, 10, 112, 10, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 7, 12, 121, 10, 12, 12, 12, 14, 12, 124, 11, 12, 3, 12, 3, 12, 5, 12, 128, 10, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 5, 13, 135, 10, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 5, 18, 169, 10, 18, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 7, 20, 178, 10, 20, 12, 20, 14, 20, 181, 11, 20, 3, 20, 5, 20, 184, 10, 20, 5, 20, 186, 10, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 5, 21, 200, 10, 21, 3, 21, 5, 21, 203, 10, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 7, 21, 217, 10, 21, 12, 21, 14, 21, 220, 11, 21, 3, 21, 5, 21, 223, 10, 21, 5, 21, 225, 10, 21, 3, 21, 3, 21, 3, 21, 3, 21, 5, 21, 231, 10, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 7, 21, 272, 10, 21, 12, 21, 14, 21, 275, 11, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 5, 22, 282, 10, 22, 3, 23, 3, 23, 5, 23, 286, 10, 23, 3, 24, 3, 24, 3, 24, 2, 2, 3, 40, 25, 2, 2, 4, 2, 6, 2, 8, 2, 10, 2, 12, 2, 14, 2, 16, 2, 18, 2, 20, 2, 22, 2, 24, 2, 26, 2, 28, 2, 30, 2, 32, 2, 34, 2, 36, 2, 38, 2, 40, 2, 42, 2, 44, 2, 46, 2, 2, 10, 3, 2, 6, 12, 3, 2, 28, 29, 3, 2, 31, 32, 4, 2, 29, 29, 33, 33, 3, 2, 8, 11, 3, 2, 34, 35, 3, 2, 26, 27, 4, 2, 40, 45, 50, 50, 2, 314, 2, 51, 3, 2, 2, 2, 4, 57, 3, 2, 2, 2, 6, 62, 3, 2, 2, 2, 8, 64, 3, 2, 2, 2, 10, 69, 3, 2, 2, 2, 12, 73, 3, 2, 2, 2, 14, 75, 3, 2, 2, 2, 16, 87, 3, 2, 2, 2, 18, 99, 3, 2, 2, 2, 20, 115, 3, 2, 2, 2, 22, 127, 3, 2, 2, 2, 24, 134, 3, 2, 2, 2, 26, 136, 3, 2, 2, 2, 28, 142, 3, 2, 2, 2, 30, 147, 3, 2, 2, 2, 32, 155, 3, 2, 2, 2, 34, 161, 3, 2, 2, 2, 36, 170, 3, 2, 2, 2, 38, 173, 3, 2, 2, 2, 40, 230, 3, 2, 2, 2, 42, 281, 3, 2, 2, 2, 44, 283, 3, 2, 2, 2, 46, 287, 3, 2, 2, 2, 48, 50, 5, 4, 3, 2, 49, 48, 3, 2, 2, 2, 50, 53, 3, 2, 2, 2, 51, 49, 3, 2, 2, 2, 51, 52, 3, 2, 2, 2, 52, 54, 3, 2, 2, 2, 53, 51, 3, 2, 2, 2, 54, 55, 5, 14, 8, 2, 55, 56, 7, 2, 2, 3, 56, 3, 3, 2, 2, 2, 57, 58, 7, 3, 2, 2, 58, 59, 5, 6, 4, 2, 59, 60, 5, 8, 5, 2, 60, 61, 7, 4, 2, 2, 61, 5, 3, 2, 2, 2, 62, 63, 7, 5, 2, 2, 63, 7, 3, 2, 2, 2, 64, 66, 5, 10, 6, 2, 65, 67, 5, 10, 6, 2, 66, 65, 3, 2, 2, 2, 66, 67, 3, 2, 2, 2, 67, 9, 3, 2, 2, 2, 68, 70, 5, 12, 7, 2, 69, 68, 3, 2, 2, 2, 69, 70, 3, 2, 2, 2, 70, 71, 3, 2, 2, 2, 71, 72, 7, 46, 2, 2, 72, 11, 3, 2, 2, 2, 73, 74, 9, 2, 2, 2, 74, 13, 3, 2, 2, 2, 75, 76, 7, 13, 2, 2, 76, 77, 7, 57, 2, 2, 77, 78, 5, 18, 10, 2, 78, 82, 7, 14, 2, 2, 79, 81, 5, 16, 9, 2, 80, 79, 3, 2, 2, 2, 81, 84, 3, 2, 2, 2, 82, 80, 3, 2, 2, 2, 82, 83, 3, 2, 2, 2, 83, 85, 3, 2, 2, 2, 84, 82, 3, 2, 2, 2, 85, 86, 7, 15, 2, 2, 86, 15, 3, 2, 2, 2, 87, 88, 7, 16, 2, 2, 88, 89, 7, 57, 2, 2, 89, 90, 5, 18, 10, 2, 90, 94, 7, 14, 2, 2, 91, 93, 5, 24, 13, 2, 92, 91, 3, 2, 2, 2, 93, 96, 3, 2, 2, 2, 94, 92, 3, 2, 2, 2, 94, 95, 3, 2, 2, 2, 95, 97, 3, 2, 2, 2, 96, 94, 3, 2, 2, 2, 97, 98, 7, 15, 2, 2, 98, 17, 3, 2, 2, 2, 99, 111, 7, 17, 2, 2, 100, 105, 5, 20, 11, 2, 101, 102, 7, 18, 2, 2, 102, 104, 5, 20, 11, 2, 103, 101, 3, 2, 2, 2, 104, 107, 3, 2, 2, 2, 105, 103, 3, 2, 2, 2, 105, 106, 3, 2, 2, 2, 106, 109, 3, 2, 2, 2, 107, 105, 3, 2, 2, 2, 108, 110, 7, 18, 2, 2, 109, 108, 3, 2, 2, 2, 109, 110, 3, 2, 2, 2, 110, 112, 3, 2, 2, 2, 111, 100, 3, 2, 2, 2, 111, 112, 3, 2, 2, 2, 112, 113, 3, 2, 2, 2, 113, 114, 7, 19, 2, 2, 114, 19, 3, 2, 2, 2, 115, 116, 5, 46, 24, 2, 116, 117, 7, 57, 2, 2, 117, 21, 3, 2, 2, 2, 118, 122, 7, 14, 2, 2, 119, 121, 5, 24, 13, 2, 120, 119, 3, 2, 2, 2, 121, 124, 3, 2, 2, 2, 122, 120, 3, 2, 2, 2, 122, 123, 3, 2, 2, 2, 123, 125, 3, 2, 2, 2, 124, 122, 3, 2, 2, 2, 125, 128, 7, 15, 2, 2, 126, 128, 5, 24, 13, 2, 127, 118, 3, 2, 2, 2, 127, 126, 3, 2, 2, 2, 128, 23, 3, 2, 2, 2, 129, 135, 5, 26, 14, 2, 130, 135, 5, 28, 15, 2, 131, 135, 5, 30, 16, 2, 132, 135, 5, 32, 17, 2, 133, 135, 5, 34, 18, 2, 134, 129, 3, 2, 2, 2, 134, 130, 3, 2, 2, 2, 134, 131, 3, 2, 2, 2, 134, 132, 3, 2, 2, 2, 134, 133, 3, 2, 2, 2, 135, 25, 3, 2, 2, 2, 136, 137, 5, 46, 24, 2, 137, 138, 7, 57, 2, 2, 138, 139, 7, 12, 2, 2, 139, 140, 5, 40, 21, 2, 140, 141, 7, 4, 2, 2, 141, 27, 3, 2, 2, 2, 142, 143, 7, 57, 2, 2, 143, 144, 7, 12, 2, 2, 144, 145, 5, 40, 21, 2, 145, 146, 7, 4, 2, 2, 146, 29, 3, 2, 2, 2, 147, 148, 7, 20, 2, 2, 148, 149, 7, 17, 2, 2, 149, 150, 7, 55, 2, 2, 150, 151, 7, 8, 2, 2, 151, 152, 5, 40, 21, 2, 152, 153, 7, 19, 2, 2, 153, 154, 7, 4, 2, 2, 154, 31, 3, 2, 2, 2, 155, 156, 7, 20, 2, 2, 156, 157, 7, 17, 2, 2, 157, 158, 5, 40, 21, 2, 158, 159, 7, 19, 2, 2, 159, 160, 7, 4, 2, 2, 160, 33, 3, 2, 2, 2, 161, 162, 7, 21, 2, 2, 162, 163, 7, 17, 2, 2, 163, 164, 5, 40, 21, 2, 164, 165, 7, 19, 2, 2, 165, 168, 5, 22, 12, 2, 166, 167, 7, 22, 2, 2, 167, 169, 5, 22, 12, 2, 168, 166, 3, 2, 2, 2, 168, 169, 3, 2, 2, 2, 169, 35, 3, 2, 2, 2, 170, 171, 7, 57, 2, 2, 171, 172, 5, 38, 20, 2, 172, 37, 3, 2, 2, 2, 173, 185, 7, 17, 2, 2, 174, 179, 5, 40, 21, 2, 175, 176, 7, 18, 2, 2, 176, 178, 5, 40, 21, 2, 177, 175, 3, 2, 2, 2, 178, 181, 3, 2, 2, 2, 179, 177, 3, 2, 2, 2, 179, 180, 3, 2, 2, 2, 180, 183, 3, 2, 2, 2, 181, 179, 3, 2, 2, 2, 182, 184, 7, 18, 2, 2, 183, 182, 3, 2, 2, 2, 183, 184, 3, 2, 2, 2, 184, 186, 3, 2, 2, 2, 185, 174, 3, 2, 2, 2, 185, 186, 3, 2, 2, 2, 186, 187, 3, 2, 2, 2, 187, 188, 7, 19, 2, 2, 188, 39, 3, 2, 2, 2, 189, 190, 8, 21, 1, 2, 190, 191, 7, 17, 2, 2, 191, 192, 5, 40, 21, 2, 192, 193, 7, 19, 2, 2, 193, 231, 3, 2, 2, 2, 194, 195, 5, 46, 24, 2, 195, 196, 7, 17, 2, 2, 196, 199, 5, 40, 21, 2, 197, 198, 7, 18, 2, 2, 198, 200, 5, 40, 21, 2, 199, 197, 3, 2, 2, 2, 199, 200, 3, 2, 2, 2, 200, 202, 3, 2, 2, 2, 201, 203, 7, 18, 2, 2, 202, 201, 3, 2, 2, 2, 202, 203, 3, 2, 2, 2, 203, 204, 3, 2, 2, 2, 204, 205, 7, 19, 2, 2, 205, 231, 3, 2, 2, 2, 206, 231, 5, 36, 19, 2, 207, 208, 7, 23, 2, 2, 208, 209, 7, 57, 2, 2, 209, 231, 5, 38, 20, 2, 210, 211, 9, 3, 2, 2, 211, 231, 5, 40, 21, 17, 212, 224, 7, 24, 2, 2, 213, 218, 5, 40, 21, 2, 214, 215, 7, 18, 2, 2, 215, 217, 5, 40, 21, 2, 216, 214, 3, 2, 2, 2, 217, 220, 3, 2, 2, 2, 218, 216, 3, 2, 2, 2, 218, 219, 3, 2, 2, 2, 219, 222, 3, 2, 2, 2, 220, 218, 3, 2, 2, 2, 221, 223, 7, 18, 2, 2, 222, 221, 3, 2, 2, 2, 222, 223, 3, 2, 2, 2, 223, 225, 3, 2, 2, 2, 224, 213, 3, 2, 2, 2, 224, 225, 3, 2, 2, 2, 225, 226, 3, 2, 2, 2, 226, 231, 7, 25, 2, 2, 227, 231, 7, 56, 2, 2, 228, 231, 7, 57, 2, 2, 229, 231, 5, 42, 22, 2, 230, 189, 3, 2, 2, 2, 230, 194, 3, 2, 2, 2, 230, 206, 3, 2, 2, 2, 230, 207, 3, 2, 2, 2, 230, 210, 3, 2, 2, 2, 230, 212, 3, 2, 2, 2, 230, 227, 3, 2, 2, 2, 230, 228, 3, 2, 2, 2, 230, 229, 3, 2, 2, 2, 231, 273, 3, 2, 2, 2, 232, 233, 12, 15, 2, 2, 233, 234, 9, 4, 2, 2, 234, 272, 5, 40, 21, 16, 235, 236, 12, 14, 2, 2, 236, 237, 9, 5, 2, 2, 237, 272, 5, 40, 21, 15, 238, 239, 12, 13, 2, 2, 239, 240, 9, 6, 2, 2, 240, 272, 5, 40, 21, 14, 241, 242, 12, 12, 2, 2, 242, 243, 9, 7, 2, 2, 243, 272, 5, 40, 21, 13, 244, 245, 12, 11, 2, 2, 245, 246, 7, 36, 2, 2, 246, 272, 5, 40, 21, 12, 247, 248, 12, 10, 2, 2, 248, 249, 7, 6, 2, 2, 249, 272, 5, 40, 21, 11, 250, 251, 12, 9, 2, 2, 251, 252, 7, 37, 2, 2, 252, 272, 5, 40, 21, 10, 253, 254, 12, 8, 2, 2, 254, 255, 7, 38, 2, 2, 255, 272, 5, 40, 21, 9, 256, 257, 12, 7, 2, 2, 257, 258, 7, 39, 2, 2, 258, 272, 5, 40, 21, 8, 259, 260, 12, 19, 2, 2, 260, 261, 7, 24, 2, 2, 261, 262, 7, 49, 2, 2, 262, 272, 7, 25, 2, 2, 263, 264, 12, 18, 2, 2, 264, 272, 9, 8, 2, 2, 265, 266, 12, 16, 2, 2, 266, 267, 7, 30, 2, 2, 267, 268, 7, 17, 2, 2, 268, 269, 5, 40, 21, 2, 269, 270, 7, 19, 2, 2, 270, 272, 3, 2, 2, 2, 271, 232, 3, 2, 2, 2, 271, 235, 3, 2, 2, 2, 271, 238, 3, 2, 2, 2, 271, 241, 3, 2, 2, 2, 271, 244, 3, 2, 2, 2, 271, 247, 3, 2, 2, 2, 271, 250, 3, 2, 2, 2, 271, 253, 3, 2, 2, 2, 271, 256, 3, 2, 2, 2, 271, 259, 3, 2, 2, 2, 271, 263, 3, 2, 2, 2, 271, 265, 3, 2, 2, 2, 272, 275, 3, 2, 2, 2, 273, 271, 3, 2, 2, 2, 273, 274, 3, 2, 2, 2, 274, 41, 3, 2, 2, 2, 275, 273, 3, 2, 2, 2, 276, 282, 7, 47, 2, 2, 277, 282, 5, 44, 23, 2, 278, 282, 7, 52, 2, 2, 279, 282, 7, 53, 2, 2, 280, 282, 7, 54, 2, 2, 281, 276, 3, 2, 2, 2, 281, 277, 3, 2, 2, 2, 281, 278, 3, 2, 2, 2, 281, 279, 3, 2, 2, 2, 281, 280, 3, 2, 2, 2, 282, 43, 3, 2, 2, 2, 283, 285, 7, 49, 2, 2, 284, 286, 7, 48, 2, 2, 285, 284, 3, 2, 2, 2, 285, 286, 3, 2, 2, 2, 286, 45, 3, 2, 2, 2, 287, 288, 9, 9, 2, 2, 288, 47, 3, 2, 2, 2, 27, 51, 66, 69, 82, 94, 105, 109, 111, 122, 127, 134, 168, 179, 183, 185, 199, 202, 218, 222, 224, 230, 271, 273, 281, 285] \ No newline at end of file diff --git a/server/src/CashLinter/grammar/CashScript.tokens b/server/src/CashLinter/grammar/CashScript.tokens deleted file mode 100644 index 4e7b5bb..0000000 --- a/server/src/CashLinter/grammar/CashScript.tokens +++ /dev/null @@ -1,101 +0,0 @@ -T__0=1 -T__1=2 -T__2=3 -T__3=4 -T__4=5 -T__5=6 -T__6=7 -T__7=8 -T__8=9 -T__9=10 -T__10=11 -T__11=12 -T__12=13 -T__13=14 -T__14=15 -T__15=16 -T__16=17 -T__17=18 -T__18=19 -T__19=20 -T__20=21 -T__21=22 -T__22=23 -T__23=24 -T__24=25 -T__25=26 -T__26=27 -T__27=28 -T__28=29 -T__29=30 -T__30=31 -T__31=32 -T__32=33 -T__33=34 -T__34=35 -T__35=36 -T__36=37 -T__37=38 -T__38=39 -T__39=40 -T__40=41 -T__41=42 -T__42=43 -VersionLiteral=44 -BooleanLiteral=45 -NumberUnit=46 -NumberLiteral=47 -Bytes=48 -Bound=49 -StringLiteral=50 -DateLiteral=51 -HexLiteral=52 -TxVar=53 -PreimageField=54 -Identifier=55 -WHITESPACE=56 -COMMENT=57 -LINE_COMMENT=58 -'pragma'=1 -';'=2 -'cashscript'=3 -'^'=4 -'~'=5 -'>='=6 -'>'=7 -'<'=8 -'<='=9 -'='=10 -'contract'=11 -'{'=12 -'}'=13 -'function'=14 -'('=15 -','=16 -')'=17 -'require'=18 -'if'=19 -'else'=20 -'new'=21 -'['=22 -']'=23 -'.reverse()'=24 -'.length'=25 -'!'=26 -'-'=27 -'.split'=28 -'/'=29 -'%'=30 -'+'=31 -'=='=32 -'!='=33 -'&'=34 -'|'=35 -'&&'=36 -'||'=37 -'int'=38 -'bool'=39 -'string'=40 -'pubkey'=41 -'sig'=42 -'datasig'=43 diff --git a/server/src/CashLinter/grammar/CashScriptLexer.interp b/server/src/CashLinter/grammar/CashScriptLexer.interp deleted file mode 100644 index 038e75c..0000000 --- a/server/src/CashLinter/grammar/CashScriptLexer.interp +++ /dev/null @@ -1,191 +0,0 @@ -token literal names: -null -'pragma' -';' -'cashscript' -'^' -'~' -'>=' -'>' -'<' -'<=' -'=' -'contract' -'{' -'}' -'function' -'(' -',' -')' -'require' -'if' -'else' -'new' -'[' -']' -'.reverse()' -'.length' -'!' -'-' -'.split' -'/' -'%' -'+' -'==' -'!=' -'&' -'|' -'&&' -'||' -'int' -'bool' -'string' -'pubkey' -'sig' -'datasig' -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null - -token symbolic names: -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -VersionLiteral -BooleanLiteral -NumberUnit -NumberLiteral -Bytes -Bound -StringLiteral -DateLiteral -HexLiteral -TxVar -PreimageField -Identifier -WHITESPACE -COMMENT -LINE_COMMENT - -rule names: -T__0 -T__1 -T__2 -T__3 -T__4 -T__5 -T__6 -T__7 -T__8 -T__9 -T__10 -T__11 -T__12 -T__13 -T__14 -T__15 -T__16 -T__17 -T__18 -T__19 -T__20 -T__21 -T__22 -T__23 -T__24 -T__25 -T__26 -T__27 -T__28 -T__29 -T__30 -T__31 -T__32 -T__33 -T__34 -T__35 -T__36 -T__37 -T__38 -T__39 -T__40 -T__41 -T__42 -VersionLiteral -BooleanLiteral -NumberUnit -NumberLiteral -Bytes -Bound -StringLiteral -DateLiteral -HexLiteral -TxVar -PreimageField -Identifier -WHITESPACE -COMMENT -LINE_COMMENT - -channel names: -DEFAULT_TOKEN_CHANNEL -HIDDEN - -mode names: -DEFAULT_MODE - -atn: -[3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 2, 60, 636, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 31, 3, 31, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 45, 6, 45, 296, 10, 45, 13, 45, 14, 45, 297, 3, 45, 3, 45, 6, 45, 302, 10, 45, 13, 45, 14, 45, 303, 3, 45, 3, 45, 6, 45, 308, 10, 45, 13, 45, 14, 45, 309, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 5, 46, 321, 10, 46, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 5, 47, 380, 10, 47, 3, 48, 5, 48, 383, 10, 48, 3, 48, 6, 48, 386, 10, 48, 13, 48, 14, 48, 387, 3, 48, 3, 48, 6, 48, 392, 10, 48, 13, 48, 14, 48, 393, 5, 48, 396, 10, 48, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 5, 49, 405, 10, 49, 3, 50, 3, 50, 7, 50, 409, 10, 50, 12, 50, 14, 50, 412, 11, 50, 3, 51, 3, 51, 3, 51, 3, 51, 7, 51, 418, 10, 51, 12, 51, 14, 51, 421, 11, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 7, 51, 428, 10, 51, 12, 51, 14, 51, 431, 11, 51, 3, 51, 5, 51, 434, 10, 51, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 7, 53, 448, 10, 53, 12, 53, 14, 53, 451, 11, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 5, 54, 466, 10, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 5, 55, 596, 10, 55, 3, 56, 3, 56, 7, 56, 600, 10, 56, 12, 56, 14, 56, 603, 11, 56, 3, 57, 6, 57, 606, 10, 57, 13, 57, 14, 57, 607, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 58, 7, 58, 616, 10, 58, 12, 58, 14, 58, 619, 11, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 7, 59, 630, 10, 59, 12, 59, 14, 59, 633, 11, 59, 3, 59, 3, 59, 5, 419, 429, 617, 2, 2, 60, 3, 2, 3, 5, 2, 4, 7, 2, 5, 9, 2, 6, 11, 2, 7, 13, 2, 8, 15, 2, 9, 17, 2, 10, 19, 2, 11, 21, 2, 12, 23, 2, 13, 25, 2, 14, 27, 2, 15, 29, 2, 16, 31, 2, 17, 33, 2, 18, 35, 2, 19, 37, 2, 20, 39, 2, 21, 41, 2, 22, 43, 2, 23, 45, 2, 24, 47, 2, 25, 49, 2, 26, 51, 2, 27, 53, 2, 28, 55, 2, 29, 57, 2, 30, 59, 2, 31, 61, 2, 32, 63, 2, 33, 65, 2, 34, 67, 2, 35, 69, 2, 36, 71, 2, 37, 73, 2, 38, 75, 2, 39, 77, 2, 40, 79, 2, 41, 81, 2, 42, 83, 2, 43, 85, 2, 44, 87, 2, 45, 89, 2, 46, 91, 2, 47, 93, 2, 48, 95, 2, 49, 97, 2, 50, 99, 2, 51, 101, 2, 52, 103, 2, 53, 105, 2, 54, 107, 2, 55, 109, 2, 56, 111, 2, 57, 113, 2, 58, 115, 2, 59, 117, 2, 60, 3, 2, 14, 3, 2, 50, 59, 3, 2, 47, 47, 4, 2, 71, 71, 103, 103, 3, 2, 51, 59, 5, 2, 12, 12, 15, 15, 36, 36, 5, 2, 12, 12, 15, 15, 41, 41, 4, 2, 90, 90, 122, 122, 5, 2, 50, 59, 67, 72, 99, 104, 4, 2, 67, 92, 99, 124, 6, 2, 50, 59, 67, 92, 97, 97, 99, 124, 5, 2, 11, 12, 14, 15, 34, 34, 4, 2, 12, 12, 15, 15, 2, 675, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 3, 119, 3, 2, 2, 2, 5, 126, 3, 2, 2, 2, 7, 128, 3, 2, 2, 2, 9, 139, 3, 2, 2, 2, 11, 141, 3, 2, 2, 2, 13, 143, 3, 2, 2, 2, 15, 146, 3, 2, 2, 2, 17, 148, 3, 2, 2, 2, 19, 150, 3, 2, 2, 2, 21, 153, 3, 2, 2, 2, 23, 155, 3, 2, 2, 2, 25, 164, 3, 2, 2, 2, 27, 166, 3, 2, 2, 2, 29, 168, 3, 2, 2, 2, 31, 177, 3, 2, 2, 2, 33, 179, 3, 2, 2, 2, 35, 181, 3, 2, 2, 2, 37, 183, 3, 2, 2, 2, 39, 191, 3, 2, 2, 2, 41, 194, 3, 2, 2, 2, 43, 199, 3, 2, 2, 2, 45, 203, 3, 2, 2, 2, 47, 205, 3, 2, 2, 2, 49, 207, 3, 2, 2, 2, 51, 218, 3, 2, 2, 2, 53, 226, 3, 2, 2, 2, 55, 228, 3, 2, 2, 2, 57, 230, 3, 2, 2, 2, 59, 237, 3, 2, 2, 2, 61, 239, 3, 2, 2, 2, 63, 241, 3, 2, 2, 2, 65, 243, 3, 2, 2, 2, 67, 246, 3, 2, 2, 2, 69, 249, 3, 2, 2, 2, 71, 251, 3, 2, 2, 2, 73, 253, 3, 2, 2, 2, 75, 256, 3, 2, 2, 2, 77, 259, 3, 2, 2, 2, 79, 263, 3, 2, 2, 2, 81, 268, 3, 2, 2, 2, 83, 275, 3, 2, 2, 2, 85, 282, 3, 2, 2, 2, 87, 286, 3, 2, 2, 2, 89, 295, 3, 2, 2, 2, 91, 320, 3, 2, 2, 2, 93, 379, 3, 2, 2, 2, 95, 382, 3, 2, 2, 2, 97, 397, 3, 2, 2, 2, 99, 406, 3, 2, 2, 2, 101, 433, 3, 2, 2, 2, 103, 435, 3, 2, 2, 2, 105, 444, 3, 2, 2, 2, 107, 465, 3, 2, 2, 2, 109, 595, 3, 2, 2, 2, 111, 597, 3, 2, 2, 2, 113, 605, 3, 2, 2, 2, 115, 611, 3, 2, 2, 2, 117, 625, 3, 2, 2, 2, 119, 120, 7, 114, 2, 2, 120, 121, 7, 116, 2, 2, 121, 122, 7, 99, 2, 2, 122, 123, 7, 105, 2, 2, 123, 124, 7, 111, 2, 2, 124, 125, 7, 99, 2, 2, 125, 4, 3, 2, 2, 2, 126, 127, 7, 61, 2, 2, 127, 6, 3, 2, 2, 2, 128, 129, 7, 101, 2, 2, 129, 130, 7, 99, 2, 2, 130, 131, 7, 117, 2, 2, 131, 132, 7, 106, 2, 2, 132, 133, 7, 117, 2, 2, 133, 134, 7, 101, 2, 2, 134, 135, 7, 116, 2, 2, 135, 136, 7, 107, 2, 2, 136, 137, 7, 114, 2, 2, 137, 138, 7, 118, 2, 2, 138, 8, 3, 2, 2, 2, 139, 140, 7, 96, 2, 2, 140, 10, 3, 2, 2, 2, 141, 142, 7, 128, 2, 2, 142, 12, 3, 2, 2, 2, 143, 144, 7, 64, 2, 2, 144, 145, 7, 63, 2, 2, 145, 14, 3, 2, 2, 2, 146, 147, 7, 64, 2, 2, 147, 16, 3, 2, 2, 2, 148, 149, 7, 62, 2, 2, 149, 18, 3, 2, 2, 2, 150, 151, 7, 62, 2, 2, 151, 152, 7, 63, 2, 2, 152, 20, 3, 2, 2, 2, 153, 154, 7, 63, 2, 2, 154, 22, 3, 2, 2, 2, 155, 156, 7, 101, 2, 2, 156, 157, 7, 113, 2, 2, 157, 158, 7, 112, 2, 2, 158, 159, 7, 118, 2, 2, 159, 160, 7, 116, 2, 2, 160, 161, 7, 99, 2, 2, 161, 162, 7, 101, 2, 2, 162, 163, 7, 118, 2, 2, 163, 24, 3, 2, 2, 2, 164, 165, 7, 125, 2, 2, 165, 26, 3, 2, 2, 2, 166, 167, 7, 127, 2, 2, 167, 28, 3, 2, 2, 2, 168, 169, 7, 104, 2, 2, 169, 170, 7, 119, 2, 2, 170, 171, 7, 112, 2, 2, 171, 172, 7, 101, 2, 2, 172, 173, 7, 118, 2, 2, 173, 174, 7, 107, 2, 2, 174, 175, 7, 113, 2, 2, 175, 176, 7, 112, 2, 2, 176, 30, 3, 2, 2, 2, 177, 178, 7, 42, 2, 2, 178, 32, 3, 2, 2, 2, 179, 180, 7, 46, 2, 2, 180, 34, 3, 2, 2, 2, 181, 182, 7, 43, 2, 2, 182, 36, 3, 2, 2, 2, 183, 184, 7, 116, 2, 2, 184, 185, 7, 103, 2, 2, 185, 186, 7, 115, 2, 2, 186, 187, 7, 119, 2, 2, 187, 188, 7, 107, 2, 2, 188, 189, 7, 116, 2, 2, 189, 190, 7, 103, 2, 2, 190, 38, 3, 2, 2, 2, 191, 192, 7, 107, 2, 2, 192, 193, 7, 104, 2, 2, 193, 40, 3, 2, 2, 2, 194, 195, 7, 103, 2, 2, 195, 196, 7, 110, 2, 2, 196, 197, 7, 117, 2, 2, 197, 198, 7, 103, 2, 2, 198, 42, 3, 2, 2, 2, 199, 200, 7, 112, 2, 2, 200, 201, 7, 103, 2, 2, 201, 202, 7, 121, 2, 2, 202, 44, 3, 2, 2, 2, 203, 204, 7, 93, 2, 2, 204, 46, 3, 2, 2, 2, 205, 206, 7, 95, 2, 2, 206, 48, 3, 2, 2, 2, 207, 208, 7, 48, 2, 2, 208, 209, 7, 116, 2, 2, 209, 210, 7, 103, 2, 2, 210, 211, 7, 120, 2, 2, 211, 212, 7, 103, 2, 2, 212, 213, 7, 116, 2, 2, 213, 214, 7, 117, 2, 2, 214, 215, 7, 103, 2, 2, 215, 216, 7, 42, 2, 2, 216, 217, 7, 43, 2, 2, 217, 50, 3, 2, 2, 2, 218, 219, 7, 48, 2, 2, 219, 220, 7, 110, 2, 2, 220, 221, 7, 103, 2, 2, 221, 222, 7, 112, 2, 2, 222, 223, 7, 105, 2, 2, 223, 224, 7, 118, 2, 2, 224, 225, 7, 106, 2, 2, 225, 52, 3, 2, 2, 2, 226, 227, 7, 35, 2, 2, 227, 54, 3, 2, 2, 2, 228, 229, 7, 47, 2, 2, 229, 56, 3, 2, 2, 2, 230, 231, 7, 48, 2, 2, 231, 232, 7, 117, 2, 2, 232, 233, 7, 114, 2, 2, 233, 234, 7, 110, 2, 2, 234, 235, 7, 107, 2, 2, 235, 236, 7, 118, 2, 2, 236, 58, 3, 2, 2, 2, 237, 238, 7, 49, 2, 2, 238, 60, 3, 2, 2, 2, 239, 240, 7, 39, 2, 2, 240, 62, 3, 2, 2, 2, 241, 242, 7, 45, 2, 2, 242, 64, 3, 2, 2, 2, 243, 244, 7, 63, 2, 2, 244, 245, 7, 63, 2, 2, 245, 66, 3, 2, 2, 2, 246, 247, 7, 35, 2, 2, 247, 248, 7, 63, 2, 2, 248, 68, 3, 2, 2, 2, 249, 250, 7, 40, 2, 2, 250, 70, 3, 2, 2, 2, 251, 252, 7, 126, 2, 2, 252, 72, 3, 2, 2, 2, 253, 254, 7, 40, 2, 2, 254, 255, 7, 40, 2, 2, 255, 74, 3, 2, 2, 2, 256, 257, 7, 126, 2, 2, 257, 258, 7, 126, 2, 2, 258, 76, 3, 2, 2, 2, 259, 260, 7, 107, 2, 2, 260, 261, 7, 112, 2, 2, 261, 262, 7, 118, 2, 2, 262, 78, 3, 2, 2, 2, 263, 264, 7, 100, 2, 2, 264, 265, 7, 113, 2, 2, 265, 266, 7, 113, 2, 2, 266, 267, 7, 110, 2, 2, 267, 80, 3, 2, 2, 2, 268, 269, 7, 117, 2, 2, 269, 270, 7, 118, 2, 2, 270, 271, 7, 116, 2, 2, 271, 272, 7, 107, 2, 2, 272, 273, 7, 112, 2, 2, 273, 274, 7, 105, 2, 2, 274, 82, 3, 2, 2, 2, 275, 276, 7, 114, 2, 2, 276, 277, 7, 119, 2, 2, 277, 278, 7, 100, 2, 2, 278, 279, 7, 109, 2, 2, 279, 280, 7, 103, 2, 2, 280, 281, 7, 123, 2, 2, 281, 84, 3, 2, 2, 2, 282, 283, 7, 117, 2, 2, 283, 284, 7, 107, 2, 2, 284, 285, 7, 105, 2, 2, 285, 86, 3, 2, 2, 2, 286, 287, 7, 102, 2, 2, 287, 288, 7, 99, 2, 2, 288, 289, 7, 118, 2, 2, 289, 290, 7, 99, 2, 2, 290, 291, 7, 117, 2, 2, 291, 292, 7, 107, 2, 2, 292, 293, 7, 105, 2, 2, 293, 88, 3, 2, 2, 2, 294, 296, 9, 2, 2, 2, 295, 294, 3, 2, 2, 2, 296, 297, 3, 2, 2, 2, 297, 295, 3, 2, 2, 2, 297, 298, 3, 2, 2, 2, 298, 299, 3, 2, 2, 2, 299, 301, 7, 48, 2, 2, 300, 302, 9, 2, 2, 2, 301, 300, 3, 2, 2, 2, 302, 303, 3, 2, 2, 2, 303, 301, 3, 2, 2, 2, 303, 304, 3, 2, 2, 2, 304, 305, 3, 2, 2, 2, 305, 307, 7, 48, 2, 2, 306, 308, 9, 2, 2, 2, 307, 306, 3, 2, 2, 2, 308, 309, 3, 2, 2, 2, 309, 307, 3, 2, 2, 2, 309, 310, 3, 2, 2, 2, 310, 90, 3, 2, 2, 2, 311, 312, 7, 118, 2, 2, 312, 313, 7, 116, 2, 2, 313, 314, 7, 119, 2, 2, 314, 321, 7, 103, 2, 2, 315, 316, 7, 104, 2, 2, 316, 317, 7, 99, 2, 2, 317, 318, 7, 110, 2, 2, 318, 319, 7, 117, 2, 2, 319, 321, 7, 103, 2, 2, 320, 311, 3, 2, 2, 2, 320, 315, 3, 2, 2, 2, 321, 92, 3, 2, 2, 2, 322, 323, 7, 117, 2, 2, 323, 324, 7, 99, 2, 2, 324, 325, 7, 118, 2, 2, 325, 326, 7, 113, 2, 2, 326, 327, 7, 117, 2, 2, 327, 328, 7, 106, 2, 2, 328, 329, 7, 107, 2, 2, 329, 380, 7, 117, 2, 2, 330, 331, 7, 117, 2, 2, 331, 332, 7, 99, 2, 2, 332, 333, 7, 118, 2, 2, 333, 380, 7, 117, 2, 2, 334, 335, 7, 104, 2, 2, 335, 336, 7, 107, 2, 2, 336, 337, 7, 112, 2, 2, 337, 338, 7, 112, 2, 2, 338, 339, 7, 103, 2, 2, 339, 380, 7, 123, 2, 2, 340, 341, 7, 100, 2, 2, 341, 342, 7, 107, 2, 2, 342, 343, 7, 118, 2, 2, 343, 380, 7, 117, 2, 2, 344, 345, 7, 100, 2, 2, 345, 346, 7, 107, 2, 2, 346, 347, 7, 118, 2, 2, 347, 348, 7, 101, 2, 2, 348, 349, 7, 113, 2, 2, 349, 350, 7, 107, 2, 2, 350, 380, 7, 112, 2, 2, 351, 352, 7, 117, 2, 2, 352, 353, 7, 103, 2, 2, 353, 354, 7, 101, 2, 2, 354, 355, 7, 113, 2, 2, 355, 356, 7, 112, 2, 2, 356, 357, 7, 102, 2, 2, 357, 380, 7, 117, 2, 2, 358, 359, 7, 111, 2, 2, 359, 360, 7, 107, 2, 2, 360, 361, 7, 112, 2, 2, 361, 362, 7, 119, 2, 2, 362, 363, 7, 118, 2, 2, 363, 364, 7, 103, 2, 2, 364, 380, 7, 117, 2, 2, 365, 366, 7, 106, 2, 2, 366, 367, 7, 113, 2, 2, 367, 368, 7, 119, 2, 2, 368, 369, 7, 116, 2, 2, 369, 380, 7, 117, 2, 2, 370, 371, 7, 102, 2, 2, 371, 372, 7, 99, 2, 2, 372, 373, 7, 123, 2, 2, 373, 380, 7, 117, 2, 2, 374, 375, 7, 121, 2, 2, 375, 376, 7, 103, 2, 2, 376, 377, 7, 103, 2, 2, 377, 378, 7, 109, 2, 2, 378, 380, 7, 117, 2, 2, 379, 322, 3, 2, 2, 2, 379, 330, 3, 2, 2, 2, 379, 334, 3, 2, 2, 2, 379, 340, 3, 2, 2, 2, 379, 344, 3, 2, 2, 2, 379, 351, 3, 2, 2, 2, 379, 358, 3, 2, 2, 2, 379, 365, 3, 2, 2, 2, 379, 370, 3, 2, 2, 2, 379, 374, 3, 2, 2, 2, 380, 94, 3, 2, 2, 2, 381, 383, 9, 3, 2, 2, 382, 381, 3, 2, 2, 2, 382, 383, 3, 2, 2, 2, 383, 385, 3, 2, 2, 2, 384, 386, 9, 2, 2, 2, 385, 384, 3, 2, 2, 2, 386, 387, 3, 2, 2, 2, 387, 385, 3, 2, 2, 2, 387, 388, 3, 2, 2, 2, 388, 395, 3, 2, 2, 2, 389, 391, 9, 4, 2, 2, 390, 392, 9, 2, 2, 2, 391, 390, 3, 2, 2, 2, 392, 393, 3, 2, 2, 2, 393, 391, 3, 2, 2, 2, 393, 394, 3, 2, 2, 2, 394, 396, 3, 2, 2, 2, 395, 389, 3, 2, 2, 2, 395, 396, 3, 2, 2, 2, 396, 96, 3, 2, 2, 2, 397, 398, 7, 100, 2, 2, 398, 399, 7, 123, 2, 2, 399, 400, 7, 118, 2, 2, 400, 401, 7, 103, 2, 2, 401, 402, 7, 117, 2, 2, 402, 404, 3, 2, 2, 2, 403, 405, 5, 99, 50, 2, 404, 403, 3, 2, 2, 2, 404, 405, 3, 2, 2, 2, 405, 98, 3, 2, 2, 2, 406, 410, 9, 5, 2, 2, 407, 409, 9, 2, 2, 2, 408, 407, 3, 2, 2, 2, 409, 412, 3, 2, 2, 2, 410, 408, 3, 2, 2, 2, 410, 411, 3, 2, 2, 2, 411, 100, 3, 2, 2, 2, 412, 410, 3, 2, 2, 2, 413, 419, 7, 36, 2, 2, 414, 415, 7, 94, 2, 2, 415, 418, 7, 36, 2, 2, 416, 418, 10, 6, 2, 2, 417, 414, 3, 2, 2, 2, 417, 416, 3, 2, 2, 2, 418, 421, 3, 2, 2, 2, 419, 420, 3, 2, 2, 2, 419, 417, 3, 2, 2, 2, 420, 422, 3, 2, 2, 2, 421, 419, 3, 2, 2, 2, 422, 434, 7, 36, 2, 2, 423, 429, 7, 41, 2, 2, 424, 425, 7, 94, 2, 2, 425, 428, 7, 41, 2, 2, 426, 428, 10, 7, 2, 2, 427, 424, 3, 2, 2, 2, 427, 426, 3, 2, 2, 2, 428, 431, 3, 2, 2, 2, 429, 430, 3, 2, 2, 2, 429, 427, 3, 2, 2, 2, 430, 432, 3, 2, 2, 2, 431, 429, 3, 2, 2, 2, 432, 434, 7, 41, 2, 2, 433, 413, 3, 2, 2, 2, 433, 423, 3, 2, 2, 2, 434, 102, 3, 2, 2, 2, 435, 436, 7, 102, 2, 2, 436, 437, 7, 99, 2, 2, 437, 438, 7, 118, 2, 2, 438, 439, 7, 103, 2, 2, 439, 440, 7, 42, 2, 2, 440, 441, 3, 2, 2, 2, 441, 442, 5, 101, 51, 2, 442, 443, 7, 43, 2, 2, 443, 104, 3, 2, 2, 2, 444, 445, 7, 50, 2, 2, 445, 449, 9, 8, 2, 2, 446, 448, 9, 9, 2, 2, 447, 446, 3, 2, 2, 2, 448, 451, 3, 2, 2, 2, 449, 447, 3, 2, 2, 2, 449, 450, 3, 2, 2, 2, 450, 106, 3, 2, 2, 2, 451, 449, 3, 2, 2, 2, 452, 453, 7, 118, 2, 2, 453, 454, 7, 122, 2, 2, 454, 455, 7, 48, 2, 2, 455, 456, 7, 99, 2, 2, 456, 457, 7, 105, 2, 2, 457, 466, 7, 103, 2, 2, 458, 459, 7, 118, 2, 2, 459, 460, 7, 122, 2, 2, 460, 461, 7, 48, 2, 2, 461, 462, 7, 118, 2, 2, 462, 463, 7, 107, 2, 2, 463, 464, 7, 111, 2, 2, 464, 466, 7, 103, 2, 2, 465, 452, 3, 2, 2, 2, 465, 458, 3, 2, 2, 2, 466, 108, 3, 2, 2, 2, 467, 468, 7, 118, 2, 2, 468, 469, 7, 122, 2, 2, 469, 470, 7, 48, 2, 2, 470, 471, 7, 120, 2, 2, 471, 472, 7, 103, 2, 2, 472, 473, 7, 116, 2, 2, 473, 474, 7, 117, 2, 2, 474, 475, 7, 107, 2, 2, 475, 476, 7, 113, 2, 2, 476, 596, 7, 112, 2, 2, 477, 478, 7, 118, 2, 2, 478, 479, 7, 122, 2, 2, 479, 480, 7, 48, 2, 2, 480, 481, 7, 106, 2, 2, 481, 482, 7, 99, 2, 2, 482, 483, 7, 117, 2, 2, 483, 484, 7, 106, 2, 2, 484, 485, 7, 82, 2, 2, 485, 486, 7, 116, 2, 2, 486, 487, 7, 103, 2, 2, 487, 488, 7, 120, 2, 2, 488, 489, 7, 113, 2, 2, 489, 490, 7, 119, 2, 2, 490, 491, 7, 118, 2, 2, 491, 596, 7, 117, 2, 2, 492, 493, 7, 118, 2, 2, 493, 494, 7, 122, 2, 2, 494, 495, 7, 48, 2, 2, 495, 496, 7, 106, 2, 2, 496, 497, 7, 99, 2, 2, 497, 498, 7, 117, 2, 2, 498, 499, 7, 106, 2, 2, 499, 500, 7, 85, 2, 2, 500, 501, 7, 103, 2, 2, 501, 502, 7, 115, 2, 2, 502, 503, 7, 119, 2, 2, 503, 504, 7, 103, 2, 2, 504, 505, 7, 112, 2, 2, 505, 506, 7, 101, 2, 2, 506, 596, 7, 103, 2, 2, 507, 508, 7, 118, 2, 2, 508, 509, 7, 122, 2, 2, 509, 510, 7, 48, 2, 2, 510, 511, 7, 113, 2, 2, 511, 512, 7, 119, 2, 2, 512, 513, 7, 118, 2, 2, 513, 514, 7, 114, 2, 2, 514, 515, 7, 113, 2, 2, 515, 516, 7, 107, 2, 2, 516, 517, 7, 112, 2, 2, 517, 596, 7, 118, 2, 2, 518, 519, 7, 118, 2, 2, 519, 520, 7, 122, 2, 2, 520, 521, 7, 48, 2, 2, 521, 522, 7, 100, 2, 2, 522, 523, 7, 123, 2, 2, 523, 524, 7, 118, 2, 2, 524, 525, 7, 103, 2, 2, 525, 526, 7, 101, 2, 2, 526, 527, 7, 113, 2, 2, 527, 528, 7, 102, 2, 2, 528, 596, 7, 103, 2, 2, 529, 530, 7, 118, 2, 2, 530, 531, 7, 122, 2, 2, 531, 532, 7, 48, 2, 2, 532, 533, 7, 120, 2, 2, 533, 534, 7, 99, 2, 2, 534, 535, 7, 110, 2, 2, 535, 536, 7, 119, 2, 2, 536, 596, 7, 103, 2, 2, 537, 538, 7, 118, 2, 2, 538, 539, 7, 122, 2, 2, 539, 540, 7, 48, 2, 2, 540, 541, 7, 117, 2, 2, 541, 542, 7, 103, 2, 2, 542, 543, 7, 115, 2, 2, 543, 544, 7, 119, 2, 2, 544, 545, 7, 103, 2, 2, 545, 546, 7, 112, 2, 2, 546, 547, 7, 101, 2, 2, 547, 596, 7, 103, 2, 2, 548, 549, 7, 118, 2, 2, 549, 550, 7, 122, 2, 2, 550, 551, 7, 48, 2, 2, 551, 552, 7, 106, 2, 2, 552, 553, 7, 99, 2, 2, 553, 554, 7, 117, 2, 2, 554, 555, 7, 106, 2, 2, 555, 556, 7, 81, 2, 2, 556, 557, 7, 119, 2, 2, 557, 558, 7, 118, 2, 2, 558, 559, 7, 114, 2, 2, 559, 560, 7, 119, 2, 2, 560, 561, 7, 118, 2, 2, 561, 596, 7, 117, 2, 2, 562, 563, 7, 118, 2, 2, 563, 564, 7, 122, 2, 2, 564, 565, 7, 48, 2, 2, 565, 566, 7, 110, 2, 2, 566, 567, 7, 113, 2, 2, 567, 568, 7, 101, 2, 2, 568, 569, 7, 109, 2, 2, 569, 570, 7, 118, 2, 2, 570, 571, 7, 107, 2, 2, 571, 572, 7, 111, 2, 2, 572, 596, 7, 103, 2, 2, 573, 574, 7, 118, 2, 2, 574, 575, 7, 122, 2, 2, 575, 576, 7, 48, 2, 2, 576, 577, 7, 106, 2, 2, 577, 578, 7, 99, 2, 2, 578, 579, 7, 117, 2, 2, 579, 580, 7, 106, 2, 2, 580, 581, 7, 118, 2, 2, 581, 582, 7, 123, 2, 2, 582, 583, 7, 114, 2, 2, 583, 596, 7, 103, 2, 2, 584, 585, 7, 118, 2, 2, 585, 586, 7, 122, 2, 2, 586, 587, 7, 48, 2, 2, 587, 588, 7, 114, 2, 2, 588, 589, 7, 116, 2, 2, 589, 590, 7, 103, 2, 2, 590, 591, 7, 107, 2, 2, 591, 592, 7, 111, 2, 2, 592, 593, 7, 99, 2, 2, 593, 594, 7, 105, 2, 2, 594, 596, 7, 103, 2, 2, 595, 467, 3, 2, 2, 2, 595, 477, 3, 2, 2, 2, 595, 492, 3, 2, 2, 2, 595, 507, 3, 2, 2, 2, 595, 518, 3, 2, 2, 2, 595, 529, 3, 2, 2, 2, 595, 537, 3, 2, 2, 2, 595, 548, 3, 2, 2, 2, 595, 562, 3, 2, 2, 2, 595, 573, 3, 2, 2, 2, 595, 584, 3, 2, 2, 2, 596, 110, 3, 2, 2, 2, 597, 601, 9, 10, 2, 2, 598, 600, 9, 11, 2, 2, 599, 598, 3, 2, 2, 2, 600, 603, 3, 2, 2, 2, 601, 599, 3, 2, 2, 2, 601, 602, 3, 2, 2, 2, 602, 112, 3, 2, 2, 2, 603, 601, 3, 2, 2, 2, 604, 606, 9, 12, 2, 2, 605, 604, 3, 2, 2, 2, 606, 607, 3, 2, 2, 2, 607, 605, 3, 2, 2, 2, 607, 608, 3, 2, 2, 2, 608, 609, 3, 2, 2, 2, 609, 610, 8, 57, 2, 2, 610, 114, 3, 2, 2, 2, 611, 612, 7, 49, 2, 2, 612, 613, 7, 44, 2, 2, 613, 617, 3, 2, 2, 2, 614, 616, 11, 2, 2, 2, 615, 614, 3, 2, 2, 2, 616, 619, 3, 2, 2, 2, 617, 618, 3, 2, 2, 2, 617, 615, 3, 2, 2, 2, 618, 620, 3, 2, 2, 2, 619, 617, 3, 2, 2, 2, 620, 621, 7, 44, 2, 2, 621, 622, 7, 49, 2, 2, 622, 623, 3, 2, 2, 2, 623, 624, 8, 58, 3, 2, 624, 116, 3, 2, 2, 2, 625, 626, 7, 49, 2, 2, 626, 627, 7, 49, 2, 2, 627, 631, 3, 2, 2, 2, 628, 630, 10, 13, 2, 2, 629, 628, 3, 2, 2, 2, 630, 633, 3, 2, 2, 2, 631, 629, 3, 2, 2, 2, 631, 632, 3, 2, 2, 2, 632, 634, 3, 2, 2, 2, 633, 631, 3, 2, 2, 2, 634, 635, 8, 59, 3, 2, 635, 118, 3, 2, 2, 2, 26, 2, 297, 303, 309, 320, 379, 382, 387, 393, 395, 404, 410, 417, 419, 427, 429, 433, 449, 465, 595, 601, 607, 617, 631, 4, 8, 2, 2, 2, 3, 2] \ No newline at end of file diff --git a/server/src/CashLinter/grammar/CashScriptLexer.tokens b/server/src/CashLinter/grammar/CashScriptLexer.tokens deleted file mode 100644 index 4e7b5bb..0000000 --- a/server/src/CashLinter/grammar/CashScriptLexer.tokens +++ /dev/null @@ -1,101 +0,0 @@ -T__0=1 -T__1=2 -T__2=3 -T__3=4 -T__4=5 -T__5=6 -T__6=7 -T__7=8 -T__8=9 -T__9=10 -T__10=11 -T__11=12 -T__12=13 -T__13=14 -T__14=15 -T__15=16 -T__16=17 -T__17=18 -T__18=19 -T__19=20 -T__20=21 -T__21=22 -T__22=23 -T__23=24 -T__24=25 -T__25=26 -T__26=27 -T__27=28 -T__28=29 -T__29=30 -T__30=31 -T__31=32 -T__32=33 -T__33=34 -T__34=35 -T__35=36 -T__36=37 -T__37=38 -T__38=39 -T__39=40 -T__40=41 -T__41=42 -T__42=43 -VersionLiteral=44 -BooleanLiteral=45 -NumberUnit=46 -NumberLiteral=47 -Bytes=48 -Bound=49 -StringLiteral=50 -DateLiteral=51 -HexLiteral=52 -TxVar=53 -PreimageField=54 -Identifier=55 -WHITESPACE=56 -COMMENT=57 -LINE_COMMENT=58 -'pragma'=1 -';'=2 -'cashscript'=3 -'^'=4 -'~'=5 -'>='=6 -'>'=7 -'<'=8 -'<='=9 -'='=10 -'contract'=11 -'{'=12 -'}'=13 -'function'=14 -'('=15 -','=16 -')'=17 -'require'=18 -'if'=19 -'else'=20 -'new'=21 -'['=22 -']'=23 -'.reverse()'=24 -'.length'=25 -'!'=26 -'-'=27 -'.split'=28 -'/'=29 -'%'=30 -'+'=31 -'=='=32 -'!='=33 -'&'=34 -'|'=35 -'&&'=36 -'||'=37 -'int'=38 -'bool'=39 -'string'=40 -'pubkey'=41 -'sig'=42 -'datasig'=43 diff --git a/server/src/CashLinter/grammar/CashScriptLexer.ts b/server/src/CashLinter/grammar/CashScriptLexer.ts deleted file mode 100644 index d1ee595..0000000 --- a/server/src/CashLinter/grammar/CashScriptLexer.ts +++ /dev/null @@ -1,463 +0,0 @@ -// Generated from grammar/CashScript.g4 by ANTLR 4.9.0-SNAPSHOT - - -import { ATN } from "antlr4ts/atn/ATN"; -import { ATNDeserializer } from "antlr4ts/atn/ATNDeserializer"; -import { CharStream } from "antlr4ts/CharStream"; -import { Lexer } from "antlr4ts/Lexer"; -import { LexerATNSimulator } from "antlr4ts/atn/LexerATNSimulator"; -import { NotNull } from "antlr4ts/Decorators"; -import { Override } from "antlr4ts/Decorators"; -import { RuleContext } from "antlr4ts/RuleContext"; -import { Vocabulary } from "antlr4ts/Vocabulary"; -import { VocabularyImpl } from "antlr4ts/VocabularyImpl"; - -import * as Utils from "antlr4ts/misc/Utils"; - - -export class CashScriptLexer extends Lexer { - public static readonly T__0 = 1; - public static readonly T__1 = 2; - public static readonly T__2 = 3; - public static readonly T__3 = 4; - public static readonly T__4 = 5; - public static readonly T__5 = 6; - public static readonly T__6 = 7; - public static readonly T__7 = 8; - public static readonly T__8 = 9; - public static readonly T__9 = 10; - public static readonly T__10 = 11; - public static readonly T__11 = 12; - public static readonly T__12 = 13; - public static readonly T__13 = 14; - public static readonly T__14 = 15; - public static readonly T__15 = 16; - public static readonly T__16 = 17; - public static readonly T__17 = 18; - public static readonly T__18 = 19; - public static readonly T__19 = 20; - public static readonly T__20 = 21; - public static readonly T__21 = 22; - public static readonly T__22 = 23; - public static readonly T__23 = 24; - public static readonly T__24 = 25; - public static readonly T__25 = 26; - public static readonly T__26 = 27; - public static readonly T__27 = 28; - public static readonly T__28 = 29; - public static readonly T__29 = 30; - public static readonly T__30 = 31; - public static readonly T__31 = 32; - public static readonly T__32 = 33; - public static readonly T__33 = 34; - public static readonly T__34 = 35; - public static readonly T__35 = 36; - public static readonly T__36 = 37; - public static readonly T__37 = 38; - public static readonly T__38 = 39; - public static readonly T__39 = 40; - public static readonly T__40 = 41; - public static readonly T__41 = 42; - public static readonly T__42 = 43; - public static readonly VersionLiteral = 44; - public static readonly BooleanLiteral = 45; - public static readonly NumberUnit = 46; - public static readonly NumberLiteral = 47; - public static readonly Bytes = 48; - public static readonly Bound = 49; - public static readonly StringLiteral = 50; - public static readonly DateLiteral = 51; - public static readonly HexLiteral = 52; - public static readonly TxVar = 53; - public static readonly PreimageField = 54; - public static readonly Identifier = 55; - public static readonly WHITESPACE = 56; - public static readonly COMMENT = 57; - public static readonly LINE_COMMENT = 58; - - // tslint:disable:no-trailing-whitespace - public static readonly channelNames: string[] = [ - "DEFAULT_TOKEN_CHANNEL", "HIDDEN", - ]; - - // tslint:disable:no-trailing-whitespace - public static readonly modeNames: string[] = [ - "DEFAULT_MODE", - ]; - - public static readonly ruleNames: string[] = [ - "T__0", "T__1", "T__2", "T__3", "T__4", "T__5", "T__6", "T__7", "T__8", - "T__9", "T__10", "T__11", "T__12", "T__13", "T__14", "T__15", "T__16", - "T__17", "T__18", "T__19", "T__20", "T__21", "T__22", "T__23", "T__24", - "T__25", "T__26", "T__27", "T__28", "T__29", "T__30", "T__31", "T__32", - "T__33", "T__34", "T__35", "T__36", "T__37", "T__38", "T__39", "T__40", - "T__41", "T__42", "VersionLiteral", "BooleanLiteral", "NumberUnit", "NumberLiteral", - "Bytes", "Bound", "StringLiteral", "DateLiteral", "HexLiteral", "TxVar", - "PreimageField", "Identifier", "WHITESPACE", "COMMENT", "LINE_COMMENT", - ]; - - private static readonly _LITERAL_NAMES: Array = [ - undefined, "'pragma'", "';'", "'cashscript'", "'^'", "'~'", "'>='", "'>'", - "'<'", "'<='", "'='", "'contract'", "'{'", "'}'", "'function'", "'('", - "','", "')'", "'require'", "'if'", "'else'", "'new'", "'['", "']'", "'.reverse()'", - "'.length'", "'!'", "'-'", "'.split'", "'/'", "'%'", "'+'", "'=='", "'!='", - "'&'", "'|'", "'&&'", "'||'", "'int'", "'bool'", "'string'", "'pubkey'", - "'sig'", "'datasig'", - ]; - private static readonly _SYMBOLIC_NAMES: Array = [ - undefined, undefined, undefined, undefined, undefined, undefined, undefined, - undefined, undefined, undefined, undefined, undefined, undefined, undefined, - undefined, undefined, undefined, undefined, undefined, undefined, undefined, - undefined, undefined, undefined, undefined, undefined, undefined, undefined, - undefined, undefined, undefined, undefined, undefined, undefined, undefined, - undefined, undefined, undefined, undefined, undefined, undefined, undefined, - undefined, undefined, "VersionLiteral", "BooleanLiteral", "NumberUnit", - "NumberLiteral", "Bytes", "Bound", "StringLiteral", "DateLiteral", "HexLiteral", - "TxVar", "PreimageField", "Identifier", "WHITESPACE", "COMMENT", "LINE_COMMENT", - ]; - public static readonly VOCABULARY: Vocabulary = new VocabularyImpl(CashScriptLexer._LITERAL_NAMES, CashScriptLexer._SYMBOLIC_NAMES, []); - - // @Override - // @NotNull - public get vocabulary(): Vocabulary { - return CashScriptLexer.VOCABULARY; - } - // tslint:enable:no-trailing-whitespace - - - constructor(input: CharStream) { - super(input); - this._interp = new LexerATNSimulator(CashScriptLexer._ATN, this); - } - - // @Override - public get grammarFileName(): string { return "CashScript.g4"; } - - // @Override - public get ruleNames(): string[] { return CashScriptLexer.ruleNames; } - - // @Override - public get serializedATN(): string { return CashScriptLexer._serializedATN; } - - // @Override - public get channelNames(): string[] { return CashScriptLexer.channelNames; } - - // @Override - public get modeNames(): string[] { return CashScriptLexer.modeNames; } - - private static readonly _serializedATNSegments: number = 2; - private static readonly _serializedATNSegment0: string = - "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x02<\u027C\b\x01" + - "\x04\x02\t\x02\x04\x03\t\x03\x04\x04\t\x04\x04\x05\t\x05\x04\x06\t\x06" + - "\x04\x07\t\x07\x04\b\t\b\x04\t\t\t\x04\n\t\n\x04\v\t\v\x04\f\t\f\x04\r" + - "\t\r\x04\x0E\t\x0E\x04\x0F\t\x0F\x04\x10\t\x10\x04\x11\t\x11\x04\x12\t" + - "\x12\x04\x13\t\x13\x04\x14\t\x14\x04\x15\t\x15\x04\x16\t\x16\x04\x17\t" + - "\x17\x04\x18\t\x18\x04\x19\t\x19\x04\x1A\t\x1A\x04\x1B\t\x1B\x04\x1C\t" + - "\x1C\x04\x1D\t\x1D\x04\x1E\t\x1E\x04\x1F\t\x1F\x04 \t \x04!\t!\x04\"\t" + - "\"\x04#\t#\x04$\t$\x04%\t%\x04&\t&\x04\'\t\'\x04(\t(\x04)\t)\x04*\t*\x04" + - "+\t+\x04,\t,\x04-\t-\x04.\t.\x04/\t/\x040\t0\x041\t1\x042\t2\x043\t3\x04" + - "4\t4\x045\t5\x046\t6\x047\t7\x048\t8\x049\t9\x04:\t:\x04;\t;\x03\x02\x03" + - "\x02\x03\x02\x03\x02\x03\x02\x03\x02\x03\x02\x03\x03\x03\x03\x03\x04\x03" + - "\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03" + - "\x04\x03\x05\x03\x05\x03\x06\x03\x06\x03\x07\x03\x07\x03\x07\x03\b\x03" + - "\b\x03\t\x03\t\x03\n\x03\n\x03\n\x03\v\x03\v\x03\f\x03\f\x03\f\x03\f\x03" + - "\f\x03\f\x03\f\x03\f\x03\f\x03\r\x03\r\x03\x0E\x03\x0E\x03\x0F\x03\x0F" + - "\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x10\x03\x10" + - "\x03\x11\x03\x11\x03\x12\x03\x12\x03\x13\x03\x13\x03\x13\x03\x13\x03\x13" + - "\x03\x13\x03\x13\x03\x13\x03\x14\x03\x14\x03\x14\x03\x15\x03\x15\x03\x15" + - "\x03\x15\x03\x15\x03\x16\x03\x16\x03\x16\x03\x16\x03\x17\x03\x17\x03\x18" + - "\x03\x18\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19" + - "\x03\x19\x03\x19\x03\x19\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A" + - "\x03\x1A\x03\x1A\x03\x1B\x03\x1B\x03\x1C\x03\x1C\x03\x1D\x03\x1D\x03\x1D" + - "\x03\x1D\x03\x1D\x03\x1D\x03\x1D\x03\x1E\x03\x1E\x03\x1F\x03\x1F\x03 " + - "\x03 \x03!\x03!\x03!\x03\"\x03\"\x03\"\x03#\x03#\x03$\x03$\x03%\x03%\x03" + - "%\x03&\x03&\x03&\x03\'\x03\'\x03\'\x03\'\x03(\x03(\x03(\x03(\x03(\x03" + - ")\x03)\x03)\x03)\x03)\x03)\x03)\x03*\x03*\x03*\x03*\x03*\x03*\x03*\x03" + - "+\x03+\x03+\x03+\x03,\x03,\x03,\x03,\x03,\x03,\x03,\x03,\x03-\x06-\u0128" + - "\n-\r-\x0E-\u0129\x03-\x03-\x06-\u012E\n-\r-\x0E-\u012F\x03-\x03-\x06" + - "-\u0134\n-\r-\x0E-\u0135\x03.\x03.\x03.\x03.\x03.\x03.\x03.\x03.\x03." + - "\x05.\u0141\n.\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/" + - "\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03" + - "/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03" + - "/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03" + - "/\x03/\x03/\x03/\x03/\x05/\u017C\n/\x030\x050\u017F\n0\x030\x060\u0182" + - "\n0\r0\x0E0\u0183\x030\x030\x060\u0188\n0\r0\x0E0\u0189\x050\u018C\n0" + - "\x031\x031\x031\x031\x031\x031\x031\x051\u0195\n1\x032\x032\x072\u0199" + - "\n2\f2\x0E2\u019C\v2\x033\x033\x033\x033\x073\u01A2\n3\f3\x0E3\u01A5\v" + - "3\x033\x033\x033\x033\x033\x073\u01AC\n3\f3\x0E3\u01AF\v3\x033\x053\u01B2" + - "\n3\x034\x034\x034\x034\x034\x034\x034\x034\x034\x035\x035\x035\x075\u01C0" + - "\n5\f5\x0E5\u01C3\v5\x036\x036\x036\x036\x036\x036\x036\x036\x036\x03" + - "6\x036\x036\x036\x056\u01D2\n6\x037\x037\x037\x037\x037\x037\x037\x03" + - "7\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x03" + - "7\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x03" + - "7\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x03" + - "7\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x03" + - "7\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x03" + - "7\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x03" + - "7\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x03" + - "7\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x03" + - "7\x037\x037\x037\x037\x037\x037\x037\x037\x057\u0254\n7\x038\x038\x07" + - "8\u0258\n8\f8\x0E8\u025B\v8\x039\x069\u025E\n9\r9\x0E9\u025F\x039\x03" + - "9\x03:\x03:\x03:\x03:\x07:\u0268\n:\f:\x0E:\u026B\v:\x03:\x03:\x03:\x03" + - ":\x03:\x03;\x03;\x03;\x03;\x07;\u0276\n;\f;\x0E;\u0279\v;\x03;\x03;\x05" + - "\u01A3\u01AD\u0269\x02\x02<\x03\x02\x03\x05\x02\x04\x07\x02\x05\t\x02" + - "\x06\v\x02\x07\r\x02\b\x0F\x02\t\x11\x02\n\x13\x02\v\x15\x02\f\x17\x02" + - "\r\x19\x02\x0E\x1B\x02\x0F\x1D\x02\x10\x1F\x02\x11!\x02\x12#\x02\x13%" + - "\x02\x14\'\x02\x15)\x02\x16+\x02\x17-\x02\x18/\x02\x191\x02\x1A3\x02\x1B" + - "5\x02\x1C7\x02\x1D9\x02\x1E;\x02\x1F=\x02 ?\x02!A\x02\"C\x02#E\x02$G\x02" + - "%I\x02&K\x02\'M\x02(O\x02)Q\x02*S\x02+U\x02,W\x02-Y\x02.[\x02/]\x020_" + - "\x021a\x022c\x023e\x024g\x025i\x026k\x027m\x028o\x029q\x02:s\x02;u\x02" + - "<\x03\x02\x0E\x03\x022;\x03\x02//\x04\x02GGgg\x03\x023;\x05\x02\f\f\x0F" + - "\x0F$$\x05\x02\f\f\x0F\x0F))\x04\x02ZZzz\x05\x022;CHch\x04\x02C\\c|\x06" + - "\x022;C\\aac|\x05\x02\v\f\x0E\x0F\"\"\x04\x02\f\f\x0F\x0F\x02\u02A3\x02" + - "\x03\x03\x02\x02\x02\x02\x05\x03\x02\x02\x02\x02\x07\x03\x02\x02\x02\x02" + - "\t\x03\x02\x02\x02\x02\v\x03\x02\x02\x02\x02\r\x03\x02\x02\x02\x02\x0F" + - "\x03\x02\x02\x02\x02\x11\x03\x02\x02\x02\x02\x13\x03\x02\x02\x02\x02\x15" + - "\x03\x02\x02\x02\x02\x17\x03\x02\x02\x02\x02\x19\x03\x02\x02\x02\x02\x1B" + - "\x03\x02\x02\x02\x02\x1D\x03\x02\x02\x02\x02\x1F\x03\x02\x02\x02\x02!" + - "\x03\x02\x02\x02\x02#\x03\x02\x02\x02\x02%\x03\x02\x02\x02\x02\'\x03\x02" + - "\x02\x02\x02)\x03\x02\x02\x02\x02+\x03\x02\x02\x02\x02-\x03\x02\x02\x02" + - "\x02/\x03\x02\x02\x02\x021\x03\x02\x02\x02\x023\x03\x02\x02\x02\x025\x03" + - "\x02\x02\x02\x027\x03\x02\x02\x02\x029\x03\x02\x02\x02\x02;\x03\x02\x02" + - "\x02\x02=\x03\x02\x02\x02\x02?\x03\x02\x02\x02\x02A\x03\x02\x02\x02\x02" + - "C\x03\x02\x02\x02\x02E\x03\x02\x02\x02\x02G\x03\x02\x02\x02\x02I\x03\x02" + - "\x02\x02\x02K\x03\x02\x02\x02\x02M\x03\x02\x02\x02\x02O\x03\x02\x02\x02" + - "\x02Q\x03\x02\x02\x02\x02S\x03\x02\x02\x02\x02U\x03\x02\x02\x02\x02W\x03" + - "\x02\x02\x02\x02Y\x03\x02\x02\x02\x02[\x03\x02\x02\x02\x02]\x03\x02\x02" + - "\x02\x02_\x03\x02\x02\x02\x02a\x03\x02\x02\x02\x02c\x03\x02\x02\x02\x02" + - "e\x03\x02\x02\x02\x02g\x03\x02\x02\x02\x02i\x03\x02\x02\x02\x02k\x03\x02" + - "\x02\x02\x02m\x03\x02\x02\x02\x02o\x03\x02\x02\x02\x02q\x03\x02\x02\x02" + - "\x02s\x03\x02\x02\x02\x02u\x03\x02\x02\x02\x03w\x03\x02\x02\x02\x05~\x03" + - "\x02\x02\x02\x07\x80\x03\x02\x02\x02\t\x8B\x03\x02\x02\x02\v\x8D\x03\x02" + - "\x02\x02\r\x8F\x03\x02\x02\x02\x0F\x92\x03\x02\x02\x02\x11\x94\x03\x02" + - "\x02\x02\x13\x96\x03\x02\x02\x02\x15\x99\x03\x02\x02\x02\x17\x9B\x03\x02" + - "\x02\x02\x19\xA4\x03\x02\x02\x02\x1B\xA6\x03\x02\x02\x02\x1D\xA8\x03\x02" + - "\x02\x02\x1F\xB1\x03\x02\x02\x02!\xB3\x03\x02\x02\x02#\xB5\x03\x02\x02" + - "\x02%\xB7\x03\x02\x02\x02\'\xBF\x03\x02\x02\x02)\xC2\x03\x02\x02\x02+" + - "\xC7\x03\x02\x02\x02-\xCB\x03\x02\x02\x02/\xCD\x03\x02\x02\x021\xCF\x03" + - "\x02\x02\x023\xDA\x03\x02\x02\x025\xE2\x03\x02\x02\x027\xE4\x03\x02\x02" + - "\x029\xE6\x03\x02\x02\x02;\xED\x03\x02\x02\x02=\xEF\x03\x02\x02\x02?\xF1" + - "\x03\x02\x02\x02A\xF3\x03\x02\x02\x02C\xF6\x03\x02\x02\x02E\xF9\x03\x02" + - "\x02\x02G\xFB\x03\x02\x02\x02I\xFD\x03\x02\x02\x02K\u0100\x03\x02\x02" + - "\x02M\u0103\x03\x02\x02\x02O\u0107\x03\x02\x02\x02Q\u010C\x03\x02\x02" + - "\x02S\u0113\x03\x02\x02\x02U\u011A\x03\x02\x02\x02W\u011E\x03\x02\x02" + - "\x02Y\u0127\x03\x02\x02\x02[\u0140\x03\x02\x02\x02]\u017B\x03\x02\x02" + - "\x02_\u017E\x03\x02\x02\x02a\u018D\x03\x02\x02\x02c\u0196\x03\x02\x02" + - "\x02e\u01B1\x03\x02\x02\x02g\u01B3\x03\x02\x02\x02i\u01BC\x03\x02\x02" + - "\x02k\u01D1\x03\x02\x02\x02m\u0253\x03\x02\x02\x02o\u0255\x03\x02\x02" + - "\x02q\u025D\x03\x02\x02\x02s\u0263\x03\x02\x02\x02u\u0271\x03\x02\x02" + - "\x02wx\x07r\x02\x02xy\x07t\x02\x02yz\x07c\x02\x02z{\x07i\x02\x02{|\x07" + - "o\x02\x02|}\x07c\x02\x02}\x04\x03\x02\x02\x02~\x7F\x07=\x02\x02\x7F\x06" + - "\x03\x02\x02\x02\x80\x81\x07e\x02\x02\x81\x82\x07c\x02\x02\x82\x83\x07" + - "u\x02\x02\x83\x84\x07j\x02\x02\x84\x85\x07u\x02\x02\x85\x86\x07e\x02\x02" + - "\x86\x87\x07t\x02\x02\x87\x88\x07k\x02\x02\x88\x89\x07r\x02\x02\x89\x8A" + - "\x07v\x02\x02\x8A\b\x03\x02\x02\x02\x8B\x8C\x07`\x02\x02\x8C\n\x03\x02" + - "\x02\x02\x8D\x8E\x07\x80\x02\x02\x8E\f\x03\x02\x02\x02\x8F\x90\x07@\x02" + - "\x02\x90\x91\x07?\x02\x02\x91\x0E\x03\x02\x02\x02\x92\x93\x07@\x02\x02" + - "\x93\x10\x03\x02\x02\x02\x94\x95\x07>\x02\x02\x95\x12\x03\x02\x02\x02" + - "\x96\x97\x07>\x02\x02\x97\x98\x07?\x02\x02\x98\x14\x03\x02\x02\x02\x99" + - "\x9A\x07?\x02\x02\x9A\x16\x03\x02\x02\x02\x9B\x9C\x07e\x02\x02\x9C\x9D" + - "\x07q\x02\x02\x9D\x9E\x07p\x02\x02\x9E\x9F\x07v\x02\x02\x9F\xA0\x07t\x02" + - "\x02\xA0\xA1\x07c\x02\x02\xA1\xA2\x07e\x02\x02\xA2\xA3\x07v\x02\x02\xA3" + - "\x18\x03\x02\x02\x02\xA4\xA5\x07}\x02\x02\xA5\x1A\x03\x02\x02\x02\xA6" + - "\xA7\x07\x7F\x02\x02\xA7\x1C\x03\x02\x02\x02\xA8\xA9\x07h\x02\x02\xA9" + - "\xAA\x07w\x02\x02\xAA\xAB\x07p\x02\x02\xAB\xAC\x07e\x02\x02\xAC\xAD\x07" + - "v\x02\x02\xAD\xAE\x07k\x02\x02\xAE\xAF\x07q\x02\x02\xAF\xB0\x07p\x02\x02" + - "\xB0\x1E\x03\x02\x02\x02\xB1\xB2\x07*\x02\x02\xB2 \x03\x02\x02\x02\xB3" + - "\xB4\x07.\x02\x02\xB4\"\x03\x02\x02\x02\xB5\xB6\x07+\x02\x02\xB6$\x03" + - "\x02\x02\x02\xB7\xB8\x07t\x02\x02\xB8\xB9\x07g\x02\x02\xB9\xBA\x07s\x02" + - "\x02\xBA\xBB\x07w\x02\x02\xBB\xBC\x07k\x02\x02\xBC\xBD\x07t\x02\x02\xBD" + - "\xBE\x07g\x02\x02\xBE&\x03\x02\x02\x02\xBF\xC0\x07k\x02\x02\xC0\xC1\x07" + - "h\x02\x02\xC1(\x03\x02\x02\x02\xC2\xC3\x07g\x02\x02\xC3\xC4\x07n\x02\x02" + - "\xC4\xC5\x07u\x02\x02\xC5\xC6\x07g\x02\x02\xC6*\x03\x02\x02\x02\xC7\xC8" + - "\x07p\x02\x02\xC8\xC9\x07g\x02\x02\xC9\xCA\x07y\x02\x02\xCA,\x03\x02\x02" + - "\x02\xCB\xCC\x07]\x02\x02\xCC.\x03\x02\x02\x02\xCD\xCE\x07_\x02\x02\xCE" + - "0\x03\x02\x02\x02\xCF\xD0\x070\x02\x02\xD0\xD1\x07t\x02\x02\xD1\xD2\x07" + - "g\x02\x02\xD2\xD3\x07x\x02\x02\xD3\xD4\x07g\x02\x02\xD4\xD5\x07t\x02\x02" + - "\xD5\xD6\x07u\x02\x02\xD6\xD7\x07g\x02\x02\xD7\xD8\x07*\x02\x02\xD8\xD9" + - "\x07+\x02\x02\xD92\x03\x02\x02\x02\xDA\xDB\x070\x02\x02\xDB\xDC\x07n\x02" + - "\x02\xDC\xDD\x07g\x02\x02\xDD\xDE\x07p\x02\x02\xDE\xDF\x07i\x02\x02\xDF" + - "\xE0\x07v\x02\x02\xE0\xE1\x07j\x02\x02\xE14\x03\x02\x02\x02\xE2\xE3\x07" + - "#\x02\x02\xE36\x03\x02\x02\x02\xE4\xE5\x07/\x02\x02\xE58\x03\x02\x02\x02" + - "\xE6\xE7\x070\x02\x02\xE7\xE8\x07u\x02\x02\xE8\xE9\x07r\x02\x02\xE9\xEA" + - "\x07n\x02\x02\xEA\xEB\x07k\x02\x02\xEB\xEC\x07v\x02\x02\xEC:\x03\x02\x02" + - "\x02\xED\xEE\x071\x02\x02\xEE<\x03\x02\x02\x02\xEF\xF0\x07\'\x02\x02\xF0" + - ">\x03\x02\x02\x02\xF1\xF2\x07-\x02\x02\xF2@\x03\x02\x02\x02\xF3\xF4\x07" + - "?\x02\x02\xF4\xF5\x07?\x02\x02\xF5B\x03\x02\x02\x02\xF6\xF7\x07#\x02\x02" + - "\xF7\xF8\x07?\x02\x02\xF8D\x03\x02\x02\x02\xF9\xFA\x07(\x02\x02\xFAF\x03" + - "\x02\x02\x02\xFB\xFC\x07~\x02\x02\xFCH\x03\x02\x02\x02\xFD\xFE\x07(\x02" + - "\x02\xFE\xFF\x07(\x02\x02\xFFJ\x03\x02\x02\x02\u0100\u0101\x07~\x02\x02" + - "\u0101\u0102\x07~\x02\x02\u0102L\x03\x02\x02\x02\u0103\u0104\x07k\x02" + - "\x02\u0104\u0105\x07p\x02\x02\u0105\u0106\x07v\x02\x02\u0106N\x03\x02" + - "\x02\x02\u0107\u0108\x07d\x02\x02\u0108\u0109\x07q\x02\x02\u0109\u010A" + - "\x07q\x02\x02\u010A\u010B\x07n\x02\x02\u010BP\x03\x02\x02\x02\u010C\u010D" + - "\x07u\x02\x02\u010D\u010E\x07v\x02\x02\u010E\u010F\x07t\x02\x02\u010F" + - "\u0110\x07k\x02\x02\u0110\u0111\x07p\x02\x02\u0111\u0112\x07i\x02\x02" + - "\u0112R\x03\x02\x02\x02\u0113\u0114\x07r\x02\x02\u0114\u0115\x07w\x02" + - "\x02\u0115\u0116\x07d\x02\x02\u0116\u0117\x07m\x02\x02\u0117\u0118\x07" + - "g\x02\x02\u0118\u0119\x07{\x02\x02\u0119T\x03\x02\x02\x02\u011A\u011B" + - "\x07u\x02\x02\u011B\u011C\x07k\x02\x02\u011C\u011D\x07i\x02\x02\u011D" + - "V\x03\x02\x02\x02\u011E\u011F\x07f\x02\x02\u011F\u0120\x07c\x02\x02\u0120" + - "\u0121\x07v\x02\x02\u0121\u0122\x07c\x02\x02\u0122\u0123\x07u\x02\x02" + - "\u0123\u0124\x07k\x02\x02\u0124\u0125\x07i\x02\x02\u0125X\x03\x02\x02" + - "\x02\u0126\u0128\t\x02\x02\x02\u0127\u0126\x03\x02\x02\x02\u0128\u0129" + - "\x03\x02\x02\x02\u0129\u0127\x03\x02\x02\x02\u0129\u012A\x03\x02\x02\x02" + - "\u012A\u012B\x03\x02\x02\x02\u012B\u012D\x070\x02\x02\u012C\u012E\t\x02" + - "\x02\x02\u012D\u012C\x03\x02\x02\x02\u012E\u012F\x03\x02\x02\x02\u012F" + - "\u012D\x03\x02\x02\x02\u012F\u0130\x03\x02\x02\x02\u0130\u0131\x03\x02" + - "\x02\x02\u0131\u0133\x070\x02\x02\u0132\u0134\t\x02\x02\x02\u0133\u0132" + - "\x03\x02\x02\x02\u0134\u0135\x03\x02\x02\x02\u0135\u0133\x03\x02\x02\x02" + - "\u0135\u0136\x03\x02\x02\x02\u0136Z\x03\x02\x02\x02\u0137\u0138\x07v\x02" + - "\x02\u0138\u0139\x07t\x02\x02\u0139\u013A\x07w\x02\x02\u013A\u0141\x07" + - "g\x02\x02\u013B\u013C\x07h\x02\x02\u013C\u013D\x07c\x02\x02\u013D\u013E" + - "\x07n\x02\x02\u013E\u013F\x07u\x02\x02\u013F\u0141\x07g\x02\x02\u0140" + - "\u0137\x03\x02\x02\x02\u0140\u013B\x03\x02\x02\x02\u0141\\\x03\x02\x02" + - "\x02\u0142\u0143\x07u\x02\x02\u0143\u0144\x07c\x02\x02\u0144\u0145\x07" + - "v\x02\x02\u0145\u0146\x07q\x02\x02\u0146\u0147\x07u\x02\x02\u0147\u0148" + - "\x07j\x02\x02\u0148\u0149\x07k\x02\x02\u0149\u017C\x07u\x02\x02\u014A" + - "\u014B\x07u\x02\x02\u014B\u014C\x07c\x02\x02\u014C\u014D\x07v\x02\x02" + - "\u014D\u017C\x07u\x02\x02\u014E\u014F\x07h\x02\x02\u014F\u0150\x07k\x02" + - "\x02\u0150\u0151\x07p\x02\x02\u0151\u0152\x07p\x02\x02\u0152\u0153\x07" + - "g\x02\x02\u0153\u017C\x07{\x02\x02\u0154\u0155\x07d\x02\x02\u0155\u0156" + - "\x07k\x02\x02\u0156\u0157\x07v\x02\x02\u0157\u017C\x07u\x02\x02\u0158" + - "\u0159\x07d\x02\x02\u0159\u015A\x07k\x02\x02\u015A\u015B\x07v\x02\x02" + - "\u015B\u015C\x07e\x02\x02\u015C\u015D\x07q\x02\x02\u015D\u015E\x07k\x02" + - "\x02\u015E\u017C\x07p\x02\x02\u015F\u0160\x07u\x02\x02\u0160\u0161\x07" + - "g\x02\x02\u0161\u0162\x07e\x02\x02\u0162\u0163\x07q\x02\x02\u0163\u0164" + - "\x07p\x02\x02\u0164\u0165\x07f\x02\x02\u0165\u017C\x07u\x02\x02\u0166" + - "\u0167\x07o\x02\x02\u0167\u0168\x07k\x02\x02\u0168\u0169\x07p\x02\x02" + - "\u0169\u016A\x07w\x02\x02\u016A\u016B\x07v\x02\x02\u016B\u016C\x07g\x02" + - "\x02\u016C\u017C\x07u\x02\x02\u016D\u016E\x07j\x02\x02\u016E\u016F\x07" + - "q\x02\x02\u016F\u0170\x07w\x02\x02\u0170\u0171\x07t\x02\x02\u0171\u017C" + - "\x07u\x02\x02\u0172\u0173\x07f\x02\x02\u0173\u0174\x07c\x02\x02\u0174" + - "\u0175\x07{\x02\x02\u0175\u017C\x07u\x02\x02\u0176\u0177\x07y\x02\x02" + - "\u0177\u0178\x07g\x02\x02\u0178\u0179\x07g\x02\x02\u0179\u017A\x07m\x02" + - "\x02\u017A\u017C\x07u\x02\x02\u017B\u0142\x03\x02\x02\x02\u017B\u014A" + - "\x03\x02\x02\x02\u017B\u014E\x03\x02\x02\x02\u017B\u0154\x03\x02\x02\x02" + - "\u017B\u0158\x03\x02\x02\x02\u017B\u015F\x03\x02\x02\x02\u017B\u0166\x03" + - "\x02\x02\x02\u017B\u016D\x03\x02\x02\x02\u017B\u0172\x03\x02\x02\x02\u017B" + - "\u0176\x03\x02\x02\x02\u017C^\x03\x02\x02\x02\u017D\u017F\t\x03\x02\x02" + - "\u017E\u017D\x03\x02\x02\x02\u017E\u017F\x03\x02\x02\x02\u017F\u0181\x03" + - "\x02\x02\x02\u0180\u0182\t\x02\x02\x02\u0181\u0180\x03\x02\x02\x02\u0182" + - "\u0183\x03\x02\x02\x02\u0183\u0181\x03\x02\x02\x02\u0183\u0184\x03\x02" + - "\x02\x02\u0184\u018B\x03\x02\x02\x02\u0185\u0187\t\x04\x02\x02\u0186\u0188" + - "\t\x02\x02\x02\u0187\u0186\x03\x02\x02\x02\u0188\u0189\x03\x02\x02\x02" + - "\u0189\u0187\x03\x02\x02\x02\u0189\u018A\x03\x02\x02\x02\u018A\u018C\x03" + - "\x02\x02\x02\u018B\u0185\x03\x02\x02\x02\u018B\u018C\x03\x02\x02\x02\u018C" + - "`\x03\x02\x02\x02\u018D\u018E\x07d\x02\x02\u018E\u018F\x07{\x02\x02\u018F" + - "\u0190\x07v\x02\x02\u0190\u0191\x07g\x02\x02\u0191\u0192\x07u\x02\x02" + - "\u0192\u0194\x03\x02\x02\x02\u0193\u0195\x05c2\x02\u0194\u0193\x03\x02" + - "\x02\x02\u0194\u0195\x03\x02\x02\x02\u0195b\x03\x02\x02\x02\u0196\u019A" + - "\t\x05\x02\x02\u0197\u0199\t\x02\x02\x02\u0198\u0197\x03\x02\x02\x02\u0199" + - "\u019C\x03\x02\x02\x02\u019A\u0198\x03\x02\x02\x02\u019A\u019B\x03\x02" + - "\x02\x02\u019Bd\x03\x02\x02\x02\u019C\u019A\x03\x02\x02\x02\u019D\u01A3" + - "\x07$\x02\x02\u019E\u019F\x07^\x02\x02\u019F\u01A2\x07$\x02\x02\u01A0" + - "\u01A2\n\x06\x02\x02\u01A1\u019E\x03\x02\x02\x02\u01A1\u01A0\x03\x02\x02" + - "\x02\u01A2\u01A5\x03\x02\x02\x02\u01A3\u01A4\x03\x02\x02\x02\u01A3\u01A1" + - "\x03\x02\x02\x02\u01A4\u01A6\x03\x02\x02\x02\u01A5\u01A3\x03\x02\x02\x02" + - "\u01A6\u01B2\x07$\x02\x02\u01A7\u01AD\x07)\x02\x02\u01A8\u01A9\x07^\x02" + - "\x02\u01A9\u01AC\x07)\x02\x02\u01AA\u01AC\n\x07\x02\x02\u01AB\u01A8\x03" + - "\x02\x02\x02\u01AB\u01AA\x03\x02\x02\x02\u01AC\u01AF\x03\x02\x02\x02\u01AD" + - "\u01AE\x03\x02\x02\x02\u01AD\u01AB\x03\x02\x02\x02\u01AE\u01B0\x03\x02" + - "\x02\x02\u01AF\u01AD\x03\x02\x02\x02\u01B0\u01B2\x07)\x02\x02\u01B1\u019D" + - "\x03\x02\x02\x02\u01B1\u01A7\x03\x02\x02\x02\u01B2f\x03\x02\x02\x02\u01B3" + - "\u01B4\x07f\x02\x02\u01B4\u01B5\x07c\x02\x02\u01B5\u01B6\x07v\x02\x02" + - "\u01B6\u01B7\x07g\x02\x02\u01B7\u01B8\x07*\x02\x02\u01B8\u01B9\x03\x02" + - "\x02\x02\u01B9\u01BA\x05e3\x02\u01BA\u01BB\x07+\x02\x02\u01BBh\x03\x02" + - "\x02\x02\u01BC\u01BD\x072\x02\x02\u01BD\u01C1\t\b\x02\x02\u01BE\u01C0" + - "\t\t\x02\x02\u01BF\u01BE\x03\x02\x02\x02\u01C0\u01C3\x03\x02\x02\x02\u01C1" + - "\u01BF\x03\x02\x02\x02\u01C1\u01C2\x03\x02\x02\x02\u01C2j\x03\x02\x02" + - "\x02\u01C3\u01C1\x03\x02\x02\x02\u01C4\u01C5\x07v\x02\x02\u01C5\u01C6" + - "\x07z\x02\x02\u01C6\u01C7\x070\x02\x02\u01C7\u01C8\x07c\x02\x02\u01C8" + - "\u01C9\x07i\x02\x02\u01C9\u01D2\x07g\x02\x02\u01CA\u01CB\x07v\x02\x02" + - "\u01CB\u01CC\x07z\x02\x02\u01CC\u01CD\x070\x02\x02\u01CD\u01CE\x07v\x02" + - "\x02\u01CE\u01CF\x07k\x02\x02\u01CF\u01D0\x07o\x02\x02\u01D0\u01D2\x07" + - "g\x02\x02\u01D1\u01C4\x03\x02\x02\x02\u01D1\u01CA\x03\x02\x02\x02\u01D2" + - "l\x03\x02\x02\x02\u01D3\u01D4\x07v\x02\x02\u01D4\u01D5\x07z\x02\x02\u01D5" + - "\u01D6\x070\x02\x02\u01D6\u01D7\x07x\x02\x02\u01D7\u01D8\x07g\x02\x02" + - "\u01D8\u01D9\x07t\x02\x02\u01D9\u01DA\x07u\x02\x02\u01DA\u01DB\x07k\x02" + - "\x02\u01DB\u01DC\x07q\x02\x02\u01DC\u0254\x07p\x02\x02\u01DD\u01DE\x07" + - "v\x02\x02\u01DE\u01DF\x07z\x02\x02\u01DF\u01E0\x070\x02\x02\u01E0\u01E1" + - "\x07j\x02\x02\u01E1\u01E2\x07c\x02\x02\u01E2\u01E3\x07u\x02\x02\u01E3" + - "\u01E4\x07j\x02\x02\u01E4\u01E5\x07R\x02\x02\u01E5\u01E6\x07t\x02\x02" + - "\u01E6\u01E7\x07g\x02\x02\u01E7\u01E8\x07x\x02\x02\u01E8\u01E9\x07q\x02" + - "\x02\u01E9\u01EA\x07w\x02\x02\u01EA\u01EB\x07v\x02\x02\u01EB\u0254\x07" + - "u\x02\x02\u01EC\u01ED\x07v\x02\x02\u01ED\u01EE\x07z\x02\x02\u01EE\u01EF" + - "\x070\x02\x02\u01EF\u01F0\x07j\x02\x02\u01F0\u01F1\x07c\x02\x02\u01F1" + - "\u01F2\x07u\x02\x02\u01F2\u01F3\x07j\x02\x02\u01F3\u01F4\x07U\x02\x02" + - "\u01F4\u01F5\x07g\x02\x02\u01F5\u01F6\x07s\x02\x02\u01F6\u01F7\x07w\x02" + - "\x02\u01F7\u01F8\x07g\x02\x02\u01F8\u01F9\x07p\x02\x02\u01F9\u01FA\x07" + - "e\x02\x02\u01FA\u0254\x07g\x02\x02\u01FB\u01FC\x07v\x02\x02\u01FC\u01FD" + - "\x07z\x02\x02\u01FD\u01FE\x070\x02\x02\u01FE\u01FF\x07q\x02\x02\u01FF" + - "\u0200\x07w\x02\x02\u0200\u0201\x07v\x02\x02\u0201\u0202\x07r\x02\x02" + - "\u0202\u0203\x07q\x02\x02\u0203\u0204\x07k\x02\x02\u0204\u0205\x07p\x02" + - "\x02\u0205\u0254\x07v\x02\x02\u0206\u0207\x07v\x02\x02\u0207\u0208\x07" + - "z\x02\x02\u0208\u0209\x070\x02\x02\u0209\u020A\x07d\x02\x02\u020A\u020B" + - "\x07{\x02\x02\u020B\u020C\x07v\x02\x02\u020C\u020D\x07g\x02\x02\u020D" + - "\u020E\x07e\x02\x02\u020E\u020F\x07q\x02\x02\u020F\u0210\x07f\x02\x02" + - "\u0210\u0254\x07g\x02\x02\u0211\u0212\x07v\x02\x02\u0212\u0213\x07z\x02" + - "\x02\u0213\u0214\x070\x02\x02\u0214\u0215\x07x\x02\x02\u0215\u0216\x07" + - "c\x02\x02\u0216\u0217\x07n\x02\x02\u0217\u0218\x07w\x02\x02\u0218\u0254" + - "\x07g\x02\x02\u0219\u021A\x07v\x02\x02\u021A\u021B\x07z\x02\x02\u021B" + - "\u021C\x070\x02\x02\u021C\u021D\x07u\x02\x02\u021D\u021E\x07g\x02\x02" + - "\u021E\u021F\x07s\x02\x02\u021F\u0220\x07w\x02\x02\u0220\u0221\x07g\x02" + - "\x02\u0221\u0222\x07p\x02\x02\u0222\u0223\x07e\x02\x02\u0223\u0254"; - private static readonly _serializedATNSegment1: string = - "\x07g\x02\x02\u0224\u0225\x07v\x02\x02\u0225\u0226\x07z\x02\x02\u0226" + - "\u0227\x070\x02\x02\u0227\u0228\x07j\x02\x02\u0228\u0229\x07c\x02\x02" + - "\u0229\u022A\x07u\x02\x02\u022A\u022B\x07j\x02\x02\u022B\u022C\x07Q\x02" + - "\x02\u022C\u022D\x07w\x02\x02\u022D\u022E\x07v\x02\x02\u022E\u022F\x07" + - "r\x02\x02\u022F\u0230\x07w\x02\x02\u0230\u0231\x07v\x02\x02\u0231\u0254" + - "\x07u\x02\x02\u0232\u0233\x07v\x02\x02\u0233\u0234\x07z\x02\x02\u0234" + - "\u0235\x070\x02\x02\u0235\u0236\x07n\x02\x02\u0236\u0237\x07q\x02\x02" + - "\u0237\u0238\x07e\x02\x02\u0238\u0239\x07m\x02\x02\u0239\u023A\x07v\x02" + - "\x02\u023A\u023B\x07k\x02\x02\u023B\u023C\x07o\x02\x02\u023C\u0254\x07" + - "g\x02\x02\u023D\u023E\x07v\x02\x02\u023E\u023F\x07z\x02\x02\u023F\u0240" + - "\x070\x02\x02\u0240\u0241\x07j\x02\x02\u0241\u0242\x07c\x02\x02\u0242" + - "\u0243\x07u\x02\x02\u0243\u0244\x07j\x02\x02\u0244\u0245\x07v\x02\x02" + - "\u0245\u0246\x07{\x02\x02\u0246\u0247\x07r\x02\x02\u0247\u0254\x07g\x02" + - "\x02\u0248\u0249\x07v\x02\x02\u0249\u024A\x07z\x02\x02\u024A\u024B\x07" + - "0\x02\x02\u024B\u024C\x07r\x02\x02\u024C\u024D\x07t\x02\x02\u024D\u024E" + - "\x07g\x02\x02\u024E\u024F\x07k\x02\x02\u024F\u0250\x07o\x02\x02\u0250" + - "\u0251\x07c\x02\x02\u0251\u0252\x07i\x02\x02\u0252\u0254\x07g\x02\x02" + - "\u0253\u01D3\x03\x02\x02\x02\u0253\u01DD\x03\x02\x02\x02\u0253\u01EC\x03" + - "\x02\x02\x02\u0253\u01FB\x03\x02\x02\x02\u0253\u0206\x03\x02\x02\x02\u0253" + - "\u0211\x03\x02\x02\x02\u0253\u0219\x03\x02\x02\x02\u0253\u0224\x03\x02" + - "\x02\x02\u0253\u0232\x03\x02\x02\x02\u0253\u023D\x03\x02\x02\x02\u0253" + - "\u0248\x03\x02\x02\x02\u0254n\x03\x02\x02\x02\u0255\u0259\t\n\x02\x02" + - "\u0256\u0258\t\v\x02\x02\u0257\u0256\x03\x02\x02\x02\u0258\u025B\x03\x02" + - "\x02\x02\u0259\u0257\x03\x02\x02\x02\u0259\u025A\x03\x02\x02\x02\u025A" + - "p\x03\x02\x02\x02\u025B\u0259\x03\x02\x02\x02\u025C\u025E\t\f\x02\x02" + - "\u025D\u025C\x03\x02\x02\x02\u025E\u025F\x03\x02\x02\x02\u025F\u025D\x03" + - "\x02\x02\x02\u025F\u0260\x03\x02\x02\x02\u0260\u0261\x03\x02\x02\x02\u0261" + - "\u0262\b9\x02\x02\u0262r\x03\x02\x02\x02\u0263\u0264\x071\x02\x02\u0264" + - "\u0265\x07,\x02\x02\u0265\u0269\x03\x02\x02\x02\u0266\u0268\v\x02\x02" + - "\x02\u0267\u0266\x03\x02\x02\x02\u0268\u026B\x03\x02\x02\x02\u0269\u026A" + - "\x03\x02\x02\x02\u0269\u0267\x03\x02\x02\x02\u026A\u026C\x03\x02\x02\x02" + - "\u026B\u0269\x03\x02\x02\x02\u026C\u026D\x07,\x02\x02\u026D\u026E\x07" + - "1\x02\x02\u026E\u026F\x03\x02\x02\x02\u026F\u0270\b:\x03\x02\u0270t\x03" + - "\x02\x02\x02\u0271\u0272\x071\x02\x02\u0272\u0273\x071\x02\x02\u0273\u0277" + - "\x03\x02\x02\x02\u0274\u0276\n\r\x02\x02\u0275\u0274\x03\x02\x02\x02\u0276" + - "\u0279\x03\x02\x02\x02\u0277\u0275\x03\x02\x02\x02\u0277\u0278\x03\x02" + - "\x02\x02\u0278\u027A\x03\x02\x02\x02\u0279\u0277\x03\x02\x02\x02\u027A" + - "\u027B\b;\x03\x02\u027Bv\x03\x02\x02\x02\x1A\x02\u0129\u012F\u0135\u0140" + - "\u017B\u017E\u0183\u0189\u018B\u0194\u019A\u01A1\u01A3\u01AB\u01AD\u01B1" + - "\u01C1\u01D1\u0253\u0259\u025F\u0269\u0277\x04\b\x02\x02\x02\x03\x02"; - public static readonly _serializedATN: string = Utils.join( - [ - CashScriptLexer._serializedATNSegment0, - CashScriptLexer._serializedATNSegment1, - ], - "", - ); - public static __ATN: ATN; - public static get _ATN(): ATN { - if (!CashScriptLexer.__ATN) { - CashScriptLexer.__ATN = new ATNDeserializer().deserialize(Utils.toCharArray(CashScriptLexer._serializedATN)); - } - - return CashScriptLexer.__ATN; - } - -} - diff --git a/server/src/CashLinter/grammar/CashScriptListener.ts b/server/src/CashLinter/grammar/CashScriptListener.ts deleted file mode 100644 index 767505a..0000000 --- a/server/src/CashLinter/grammar/CashScriptListener.ts +++ /dev/null @@ -1,443 +0,0 @@ -// Generated from grammar/CashScript.g4 by ANTLR 4.9.0-SNAPSHOT - - -import { ParseTreeListener } from "antlr4ts/tree/ParseTreeListener"; - -import { ParenthesisedContext } from "./CashScriptParser"; -import { CastContext } from "./CashScriptParser"; -import { FunctionCallExpressionContext } from "./CashScriptParser"; -import { InstantiationContext } from "./CashScriptParser"; -import { TupleIndexOpContext } from "./CashScriptParser"; -import { UnaryOpContext } from "./CashScriptParser"; -import { BinaryOpContext } from "./CashScriptParser"; -import { ArrayContext } from "./CashScriptParser"; -import { PreimageFieldContext } from "./CashScriptParser"; -import { IdentifierContext } from "./CashScriptParser"; -import { LiteralExpressionContext } from "./CashScriptParser"; -import { SourceFileContext } from "./CashScriptParser"; -import { PragmaDirectiveContext } from "./CashScriptParser"; -import { PragmaNameContext } from "./CashScriptParser"; -import { PragmaValueContext } from "./CashScriptParser"; -import { VersionConstraintContext } from "./CashScriptParser"; -import { VersionOperatorContext } from "./CashScriptParser"; -import { ContractDefinitionContext } from "./CashScriptParser"; -import { FunctionDefinitionContext } from "./CashScriptParser"; -import { ParameterListContext } from "./CashScriptParser"; -import { ParameterContext } from "./CashScriptParser"; -import { BlockContext } from "./CashScriptParser"; -import { StatementContext } from "./CashScriptParser"; -import { VariableDefinitionContext } from "./CashScriptParser"; -import { AssignStatementContext } from "./CashScriptParser"; -import { TimeOpStatementContext } from "./CashScriptParser"; -import { RequireStatementContext } from "./CashScriptParser"; -import { IfStatementContext } from "./CashScriptParser"; -import { FunctionCallContext } from "./CashScriptParser"; -import { ExpressionListContext } from "./CashScriptParser"; -import { ExpressionContext } from "./CashScriptParser"; -import { LiteralContext } from "./CashScriptParser"; -import { NumberLiteralContext } from "./CashScriptParser"; -import { TypeNameContext } from "./CashScriptParser"; - - -/** - * This interface defines a complete listener for a parse tree produced by - * `CashScriptParser`. - */ -export interface CashScriptListener extends ParseTreeListener { - /** - * Enter a parse tree produced by the `Parenthesised` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - */ - enterParenthesised?: (ctx: ParenthesisedContext) => void; - /** - * Exit a parse tree produced by the `Parenthesised` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - */ - exitParenthesised?: (ctx: ParenthesisedContext) => void; - - /** - * Enter a parse tree produced by the `Cast` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - */ - enterCast?: (ctx: CastContext) => void; - /** - * Exit a parse tree produced by the `Cast` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - */ - exitCast?: (ctx: CastContext) => void; - - /** - * Enter a parse tree produced by the `FunctionCallExpression` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - */ - enterFunctionCallExpression?: (ctx: FunctionCallExpressionContext) => void; - /** - * Exit a parse tree produced by the `FunctionCallExpression` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - */ - exitFunctionCallExpression?: (ctx: FunctionCallExpressionContext) => void; - - /** - * Enter a parse tree produced by the `Instantiation` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - */ - enterInstantiation?: (ctx: InstantiationContext) => void; - /** - * Exit a parse tree produced by the `Instantiation` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - */ - exitInstantiation?: (ctx: InstantiationContext) => void; - - /** - * Enter a parse tree produced by the `TupleIndexOp` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - */ - enterTupleIndexOp?: (ctx: TupleIndexOpContext) => void; - /** - * Exit a parse tree produced by the `TupleIndexOp` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - */ - exitTupleIndexOp?: (ctx: TupleIndexOpContext) => void; - - /** - * Enter a parse tree produced by the `UnaryOp` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - */ - enterUnaryOp?: (ctx: UnaryOpContext) => void; - /** - * Exit a parse tree produced by the `UnaryOp` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - */ - exitUnaryOp?: (ctx: UnaryOpContext) => void; - - /** - * Enter a parse tree produced by the `BinaryOp` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - */ - enterBinaryOp?: (ctx: BinaryOpContext) => void; - /** - * Exit a parse tree produced by the `BinaryOp` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - */ - exitBinaryOp?: (ctx: BinaryOpContext) => void; - - /** - * Enter a parse tree produced by the `Array` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - */ - enterArray?: (ctx: ArrayContext) => void; - /** - * Exit a parse tree produced by the `Array` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - */ - exitArray?: (ctx: ArrayContext) => void; - - /** - * Enter a parse tree produced by the `PreimageField` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - */ - enterPreimageField?: (ctx: PreimageFieldContext) => void; - /** - * Exit a parse tree produced by the `PreimageField` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - */ - exitPreimageField?: (ctx: PreimageFieldContext) => void; - - /** - * Enter a parse tree produced by the `Identifier` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - */ - enterIdentifier?: (ctx: IdentifierContext) => void; - /** - * Exit a parse tree produced by the `Identifier` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - */ - exitIdentifier?: (ctx: IdentifierContext) => void; - - /** - * Enter a parse tree produced by the `LiteralExpression` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - */ - enterLiteralExpression?: (ctx: LiteralExpressionContext) => void; - /** - * Exit a parse tree produced by the `LiteralExpression` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - */ - exitLiteralExpression?: (ctx: LiteralExpressionContext) => void; - - /** - * Enter a parse tree produced by `CashScriptParser.sourceFile`. - * @param ctx the parse tree - */ - enterSourceFile?: (ctx: SourceFileContext) => void; - /** - * Exit a parse tree produced by `CashScriptParser.sourceFile`. - * @param ctx the parse tree - */ - exitSourceFile?: (ctx: SourceFileContext) => void; - - /** - * Enter a parse tree produced by `CashScriptParser.pragmaDirective`. - * @param ctx the parse tree - */ - enterPragmaDirective?: (ctx: PragmaDirectiveContext) => void; - /** - * Exit a parse tree produced by `CashScriptParser.pragmaDirective`. - * @param ctx the parse tree - */ - exitPragmaDirective?: (ctx: PragmaDirectiveContext) => void; - - /** - * Enter a parse tree produced by `CashScriptParser.pragmaName`. - * @param ctx the parse tree - */ - enterPragmaName?: (ctx: PragmaNameContext) => void; - /** - * Exit a parse tree produced by `CashScriptParser.pragmaName`. - * @param ctx the parse tree - */ - exitPragmaName?: (ctx: PragmaNameContext) => void; - - /** - * Enter a parse tree produced by `CashScriptParser.pragmaValue`. - * @param ctx the parse tree - */ - enterPragmaValue?: (ctx: PragmaValueContext) => void; - /** - * Exit a parse tree produced by `CashScriptParser.pragmaValue`. - * @param ctx the parse tree - */ - exitPragmaValue?: (ctx: PragmaValueContext) => void; - - /** - * Enter a parse tree produced by `CashScriptParser.versionConstraint`. - * @param ctx the parse tree - */ - enterVersionConstraint?: (ctx: VersionConstraintContext) => void; - /** - * Exit a parse tree produced by `CashScriptParser.versionConstraint`. - * @param ctx the parse tree - */ - exitVersionConstraint?: (ctx: VersionConstraintContext) => void; - - /** - * Enter a parse tree produced by `CashScriptParser.versionOperator`. - * @param ctx the parse tree - */ - enterVersionOperator?: (ctx: VersionOperatorContext) => void; - /** - * Exit a parse tree produced by `CashScriptParser.versionOperator`. - * @param ctx the parse tree - */ - exitVersionOperator?: (ctx: VersionOperatorContext) => void; - - /** - * Enter a parse tree produced by `CashScriptParser.contractDefinition`. - * @param ctx the parse tree - */ - enterContractDefinition?: (ctx: ContractDefinitionContext) => void; - /** - * Exit a parse tree produced by `CashScriptParser.contractDefinition`. - * @param ctx the parse tree - */ - exitContractDefinition?: (ctx: ContractDefinitionContext) => void; - - /** - * Enter a parse tree produced by `CashScriptParser.functionDefinition`. - * @param ctx the parse tree - */ - enterFunctionDefinition?: (ctx: FunctionDefinitionContext) => void; - /** - * Exit a parse tree produced by `CashScriptParser.functionDefinition`. - * @param ctx the parse tree - */ - exitFunctionDefinition?: (ctx: FunctionDefinitionContext) => void; - - /** - * Enter a parse tree produced by `CashScriptParser.parameterList`. - * @param ctx the parse tree - */ - enterParameterList?: (ctx: ParameterListContext) => void; - /** - * Exit a parse tree produced by `CashScriptParser.parameterList`. - * @param ctx the parse tree - */ - exitParameterList?: (ctx: ParameterListContext) => void; - - /** - * Enter a parse tree produced by `CashScriptParser.parameter`. - * @param ctx the parse tree - */ - enterParameter?: (ctx: ParameterContext) => void; - /** - * Exit a parse tree produced by `CashScriptParser.parameter`. - * @param ctx the parse tree - */ - exitParameter?: (ctx: ParameterContext) => void; - - /** - * Enter a parse tree produced by `CashScriptParser.block`. - * @param ctx the parse tree - */ - enterBlock?: (ctx: BlockContext) => void; - /** - * Exit a parse tree produced by `CashScriptParser.block`. - * @param ctx the parse tree - */ - exitBlock?: (ctx: BlockContext) => void; - - /** - * Enter a parse tree produced by `CashScriptParser.statement`. - * @param ctx the parse tree - */ - enterStatement?: (ctx: StatementContext) => void; - /** - * Exit a parse tree produced by `CashScriptParser.statement`. - * @param ctx the parse tree - */ - exitStatement?: (ctx: StatementContext) => void; - - /** - * Enter a parse tree produced by `CashScriptParser.variableDefinition`. - * @param ctx the parse tree - */ - enterVariableDefinition?: (ctx: VariableDefinitionContext) => void; - /** - * Exit a parse tree produced by `CashScriptParser.variableDefinition`. - * @param ctx the parse tree - */ - exitVariableDefinition?: (ctx: VariableDefinitionContext) => void; - - /** - * Enter a parse tree produced by `CashScriptParser.assignStatement`. - * @param ctx the parse tree - */ - enterAssignStatement?: (ctx: AssignStatementContext) => void; - /** - * Exit a parse tree produced by `CashScriptParser.assignStatement`. - * @param ctx the parse tree - */ - exitAssignStatement?: (ctx: AssignStatementContext) => void; - - /** - * Enter a parse tree produced by `CashScriptParser.timeOpStatement`. - * @param ctx the parse tree - */ - enterTimeOpStatement?: (ctx: TimeOpStatementContext) => void; - /** - * Exit a parse tree produced by `CashScriptParser.timeOpStatement`. - * @param ctx the parse tree - */ - exitTimeOpStatement?: (ctx: TimeOpStatementContext) => void; - - /** - * Enter a parse tree produced by `CashScriptParser.requireStatement`. - * @param ctx the parse tree - */ - enterRequireStatement?: (ctx: RequireStatementContext) => void; - /** - * Exit a parse tree produced by `CashScriptParser.requireStatement`. - * @param ctx the parse tree - */ - exitRequireStatement?: (ctx: RequireStatementContext) => void; - - /** - * Enter a parse tree produced by `CashScriptParser.ifStatement`. - * @param ctx the parse tree - */ - enterIfStatement?: (ctx: IfStatementContext) => void; - /** - * Exit a parse tree produced by `CashScriptParser.ifStatement`. - * @param ctx the parse tree - */ - exitIfStatement?: (ctx: IfStatementContext) => void; - - /** - * Enter a parse tree produced by `CashScriptParser.functionCall`. - * @param ctx the parse tree - */ - enterFunctionCall?: (ctx: FunctionCallContext) => void; - /** - * Exit a parse tree produced by `CashScriptParser.functionCall`. - * @param ctx the parse tree - */ - exitFunctionCall?: (ctx: FunctionCallContext) => void; - - /** - * Enter a parse tree produced by `CashScriptParser.expressionList`. - * @param ctx the parse tree - */ - enterExpressionList?: (ctx: ExpressionListContext) => void; - /** - * Exit a parse tree produced by `CashScriptParser.expressionList`. - * @param ctx the parse tree - */ - exitExpressionList?: (ctx: ExpressionListContext) => void; - - /** - * Enter a parse tree produced by `CashScriptParser.expression`. - * @param ctx the parse tree - */ - enterExpression?: (ctx: ExpressionContext) => void; - /** - * Exit a parse tree produced by `CashScriptParser.expression`. - * @param ctx the parse tree - */ - exitExpression?: (ctx: ExpressionContext) => void; - - /** - * Enter a parse tree produced by `CashScriptParser.literal`. - * @param ctx the parse tree - */ - enterLiteral?: (ctx: LiteralContext) => void; - /** - * Exit a parse tree produced by `CashScriptParser.literal`. - * @param ctx the parse tree - */ - exitLiteral?: (ctx: LiteralContext) => void; - - /** - * Enter a parse tree produced by `CashScriptParser.numberLiteral`. - * @param ctx the parse tree - */ - enterNumberLiteral?: (ctx: NumberLiteralContext) => void; - /** - * Exit a parse tree produced by `CashScriptParser.numberLiteral`. - * @param ctx the parse tree - */ - exitNumberLiteral?: (ctx: NumberLiteralContext) => void; - - /** - * Enter a parse tree produced by `CashScriptParser.typeName`. - * @param ctx the parse tree - */ - enterTypeName?: (ctx: TypeNameContext) => void; - /** - * Exit a parse tree produced by `CashScriptParser.typeName`. - * @param ctx the parse tree - */ - exitTypeName?: (ctx: TypeNameContext) => void; -} - diff --git a/server/src/CashLinter/grammar/CashScriptParser.ts b/server/src/CashLinter/grammar/CashScriptParser.ts deleted file mode 100644 index 6f5b889..0000000 --- a/server/src/CashLinter/grammar/CashScriptParser.ts +++ /dev/null @@ -1,2922 +0,0 @@ -// Generated from grammar/CashScript.g4 by ANTLR 4.9.0-SNAPSHOT - - -import { ATN } from "antlr4ts/atn/ATN"; -import { ATNDeserializer } from "antlr4ts/atn/ATNDeserializer"; -import { FailedPredicateException } from "antlr4ts/FailedPredicateException"; -import { NotNull } from "antlr4ts/Decorators"; -import { NoViableAltException } from "antlr4ts/NoViableAltException"; -import { Override } from "antlr4ts/Decorators"; -import { Parser } from "antlr4ts/Parser"; -import { ParserRuleContext } from "antlr4ts/ParserRuleContext"; -import { ParserATNSimulator } from "antlr4ts/atn/ParserATNSimulator"; -import { ParseTreeListener } from "antlr4ts/tree/ParseTreeListener"; -import { ParseTreeVisitor } from "antlr4ts/tree/ParseTreeVisitor"; -import { RecognitionException } from "antlr4ts/RecognitionException"; -import { RuleContext } from "antlr4ts/RuleContext"; -//import { RuleVersion } from "antlr4ts/RuleVersion"; -import { TerminalNode } from "antlr4ts/tree/TerminalNode"; -import { Token } from "antlr4ts/Token"; -import { TokenStream } from "antlr4ts/TokenStream"; -import { Vocabulary } from "antlr4ts/Vocabulary"; -import { VocabularyImpl } from "antlr4ts/VocabularyImpl"; - -import * as Utils from "antlr4ts/misc/Utils"; - -import { CashScriptListener } from "./CashScriptListener"; -import { CashScriptVisitor } from "./CashScriptVisitor"; - - -export class CashScriptParser extends Parser { - public static readonly T__0 = 1; - public static readonly T__1 = 2; - public static readonly T__2 = 3; - public static readonly T__3 = 4; - public static readonly T__4 = 5; - public static readonly T__5 = 6; - public static readonly T__6 = 7; - public static readonly T__7 = 8; - public static readonly T__8 = 9; - public static readonly T__9 = 10; - public static readonly T__10 = 11; - public static readonly T__11 = 12; - public static readonly T__12 = 13; - public static readonly T__13 = 14; - public static readonly T__14 = 15; - public static readonly T__15 = 16; - public static readonly T__16 = 17; - public static readonly T__17 = 18; - public static readonly T__18 = 19; - public static readonly T__19 = 20; - public static readonly T__20 = 21; - public static readonly T__21 = 22; - public static readonly T__22 = 23; - public static readonly T__23 = 24; - public static readonly T__24 = 25; - public static readonly T__25 = 26; - public static readonly T__26 = 27; - public static readonly T__27 = 28; - public static readonly T__28 = 29; - public static readonly T__29 = 30; - public static readonly T__30 = 31; - public static readonly T__31 = 32; - public static readonly T__32 = 33; - public static readonly T__33 = 34; - public static readonly T__34 = 35; - public static readonly T__35 = 36; - public static readonly T__36 = 37; - public static readonly T__37 = 38; - public static readonly T__38 = 39; - public static readonly T__39 = 40; - public static readonly T__40 = 41; - public static readonly T__41 = 42; - public static readonly T__42 = 43; - public static readonly VersionLiteral = 44; - public static readonly BooleanLiteral = 45; - public static readonly NumberUnit = 46; - public static readonly NumberLiteral = 47; - public static readonly Bytes = 48; - public static readonly Bound = 49; - public static readonly StringLiteral = 50; - public static readonly DateLiteral = 51; - public static readonly HexLiteral = 52; - public static readonly TxVar = 53; - public static readonly PreimageField = 54; - public static readonly Identifier = 55; - public static readonly WHITESPACE = 56; - public static readonly COMMENT = 57; - public static readonly LINE_COMMENT = 58; - public static readonly RULE_sourceFile = 0; - public static readonly RULE_pragmaDirective = 1; - public static readonly RULE_pragmaName = 2; - public static readonly RULE_pragmaValue = 3; - public static readonly RULE_versionConstraint = 4; - public static readonly RULE_versionOperator = 5; - public static readonly RULE_contractDefinition = 6; - public static readonly RULE_functionDefinition = 7; - public static readonly RULE_parameterList = 8; - public static readonly RULE_parameter = 9; - public static readonly RULE_block = 10; - public static readonly RULE_statement = 11; - public static readonly RULE_variableDefinition = 12; - public static readonly RULE_assignStatement = 13; - public static readonly RULE_timeOpStatement = 14; - public static readonly RULE_requireStatement = 15; - public static readonly RULE_ifStatement = 16; - public static readonly RULE_functionCall = 17; - public static readonly RULE_expressionList = 18; - public static readonly RULE_expression = 19; - public static readonly RULE_literal = 20; - public static readonly RULE_numberLiteral = 21; - public static readonly RULE_typeName = 22; - // tslint:disable:no-trailing-whitespace - public static readonly ruleNames: string[] = [ - "sourceFile", "pragmaDirective", "pragmaName", "pragmaValue", "versionConstraint", - "versionOperator", "contractDefinition", "functionDefinition", "parameterList", - "parameter", "block", "statement", "variableDefinition", "assignStatement", - "timeOpStatement", "requireStatement", "ifStatement", "functionCall", - "expressionList", "expression", "literal", "numberLiteral", "typeName", - ]; - - private static readonly _LITERAL_NAMES: Array = [ - undefined, "'pragma'", "';'", "'cashscript'", "'^'", "'~'", "'>='", "'>'", - "'<'", "'<='", "'='", "'contract'", "'{'", "'}'", "'function'", "'('", - "','", "')'", "'require'", "'if'", "'else'", "'new'", "'['", "']'", "'.reverse()'", - "'.length'", "'!'", "'-'", "'.split'", "'/'", "'%'", "'+'", "'=='", "'!='", - "'&'", "'|'", "'&&'", "'||'", "'int'", "'bool'", "'string'", "'pubkey'", - "'sig'", "'datasig'", - ]; - private static readonly _SYMBOLIC_NAMES: Array = [ - undefined, undefined, undefined, undefined, undefined, undefined, undefined, - undefined, undefined, undefined, undefined, undefined, undefined, undefined, - undefined, undefined, undefined, undefined, undefined, undefined, undefined, - undefined, undefined, undefined, undefined, undefined, undefined, undefined, - undefined, undefined, undefined, undefined, undefined, undefined, undefined, - undefined, undefined, undefined, undefined, undefined, undefined, undefined, - undefined, undefined, "VersionLiteral", "BooleanLiteral", "NumberUnit", - "NumberLiteral", "Bytes", "Bound", "StringLiteral", "DateLiteral", "HexLiteral", - "TxVar", "PreimageField", "Identifier", "WHITESPACE", "COMMENT", "LINE_COMMENT", - ]; - public static readonly VOCABULARY: Vocabulary = new VocabularyImpl(CashScriptParser._LITERAL_NAMES, CashScriptParser._SYMBOLIC_NAMES, []); - - // @Override - // @NotNull - public get vocabulary(): Vocabulary { - return CashScriptParser.VOCABULARY; - } - // tslint:enable:no-trailing-whitespace - - // @Override - public get grammarFileName(): string { return "CashScript.g4"; } - - // @Override - public get ruleNames(): string[] { return CashScriptParser.ruleNames; } - - // @Override - public get serializedATN(): string { return CashScriptParser._serializedATN; } - - protected createFailedPredicateException(predicate?: string, message?: string): FailedPredicateException { - return new FailedPredicateException(this, predicate, message); - } - - constructor(input: TokenStream) { - super(input); - this._interp = new ParserATNSimulator(CashScriptParser._ATN, this); - } - // @RuleVersion(0) - public sourceFile(): SourceFileContext { - let _localctx: SourceFileContext = new SourceFileContext(this._ctx, this.state); - this.enterRule(_localctx, 0, CashScriptParser.RULE_sourceFile); - let _la: number; - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 49; - this._errHandler.sync(this); - _la = this._input.LA(1); - while (_la === CashScriptParser.T__0) { - { - { - this.state = 46; - this.pragmaDirective(); - } - } - this.state = 51; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - this.state = 52; - this.contractDefinition(); - this.state = 53; - this.match(CashScriptParser.EOF); - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public pragmaDirective(): PragmaDirectiveContext { - let _localctx: PragmaDirectiveContext = new PragmaDirectiveContext(this._ctx, this.state); - this.enterRule(_localctx, 2, CashScriptParser.RULE_pragmaDirective); - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 55; - this.match(CashScriptParser.T__0); - this.state = 56; - this.pragmaName(); - this.state = 57; - this.pragmaValue(); - this.state = 58; - this.match(CashScriptParser.T__1); - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public pragmaName(): PragmaNameContext { - let _localctx: PragmaNameContext = new PragmaNameContext(this._ctx, this.state); - this.enterRule(_localctx, 4, CashScriptParser.RULE_pragmaName); - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 60; - this.match(CashScriptParser.T__2); - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public pragmaValue(): PragmaValueContext { - let _localctx: PragmaValueContext = new PragmaValueContext(this._ctx, this.state); - this.enterRule(_localctx, 6, CashScriptParser.RULE_pragmaValue); - let _la: number; - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 62; - this.versionConstraint(); - this.state = 64; - this._errHandler.sync(this); - _la = this._input.LA(1); - if ((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << CashScriptParser.T__3) | (1 << CashScriptParser.T__4) | (1 << CashScriptParser.T__5) | (1 << CashScriptParser.T__6) | (1 << CashScriptParser.T__7) | (1 << CashScriptParser.T__8) | (1 << CashScriptParser.T__9))) !== 0) || _la === CashScriptParser.VersionLiteral) { - { - this.state = 63; - this.versionConstraint(); - } - } - - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public versionConstraint(): VersionConstraintContext { - let _localctx: VersionConstraintContext = new VersionConstraintContext(this._ctx, this.state); - this.enterRule(_localctx, 8, CashScriptParser.RULE_versionConstraint); - let _la: number; - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 67; - this._errHandler.sync(this); - _la = this._input.LA(1); - if ((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << CashScriptParser.T__3) | (1 << CashScriptParser.T__4) | (1 << CashScriptParser.T__5) | (1 << CashScriptParser.T__6) | (1 << CashScriptParser.T__7) | (1 << CashScriptParser.T__8) | (1 << CashScriptParser.T__9))) !== 0)) { - { - this.state = 66; - this.versionOperator(); - } - } - - this.state = 69; - this.match(CashScriptParser.VersionLiteral); - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public versionOperator(): VersionOperatorContext { - let _localctx: VersionOperatorContext = new VersionOperatorContext(this._ctx, this.state); - this.enterRule(_localctx, 10, CashScriptParser.RULE_versionOperator); - let _la: number; - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 71; - _la = this._input.LA(1); - if (!((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << CashScriptParser.T__3) | (1 << CashScriptParser.T__4) | (1 << CashScriptParser.T__5) | (1 << CashScriptParser.T__6) | (1 << CashScriptParser.T__7) | (1 << CashScriptParser.T__8) | (1 << CashScriptParser.T__9))) !== 0))) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); - } - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public contractDefinition(): ContractDefinitionContext { - let _localctx: ContractDefinitionContext = new ContractDefinitionContext(this._ctx, this.state); - this.enterRule(_localctx, 12, CashScriptParser.RULE_contractDefinition); - let _la: number; - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 73; - this.match(CashScriptParser.T__10); - this.state = 74; - this.match(CashScriptParser.Identifier); - this.state = 75; - this.parameterList(); - this.state = 76; - this.match(CashScriptParser.T__11); - this.state = 80; - this._errHandler.sync(this); - _la = this._input.LA(1); - while (_la === CashScriptParser.T__13) { - { - { - this.state = 77; - this.functionDefinition(); - } - } - this.state = 82; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - this.state = 83; - this.match(CashScriptParser.T__12); - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public functionDefinition(): FunctionDefinitionContext { - let _localctx: FunctionDefinitionContext = new FunctionDefinitionContext(this._ctx, this.state); - this.enterRule(_localctx, 14, CashScriptParser.RULE_functionDefinition); - let _la: number; - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 85; - this.match(CashScriptParser.T__13); - this.state = 86; - this.match(CashScriptParser.Identifier); - this.state = 87; - this.parameterList(); - this.state = 88; - this.match(CashScriptParser.T__11); - this.state = 92; - this._errHandler.sync(this); - _la = this._input.LA(1); - while (_la === CashScriptParser.T__17 || _la === CashScriptParser.T__18 || ((((_la - 38)) & ~0x1F) === 0 && ((1 << (_la - 38)) & ((1 << (CashScriptParser.T__37 - 38)) | (1 << (CashScriptParser.T__38 - 38)) | (1 << (CashScriptParser.T__39 - 38)) | (1 << (CashScriptParser.T__40 - 38)) | (1 << (CashScriptParser.T__41 - 38)) | (1 << (CashScriptParser.T__42 - 38)) | (1 << (CashScriptParser.Bytes - 38)) | (1 << (CashScriptParser.Identifier - 38)))) !== 0)) { - { - { - this.state = 89; - this.statement(); - } - } - this.state = 94; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - this.state = 95; - this.match(CashScriptParser.T__12); - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public parameterList(): ParameterListContext { - let _localctx: ParameterListContext = new ParameterListContext(this._ctx, this.state); - this.enterRule(_localctx, 16, CashScriptParser.RULE_parameterList); - let _la: number; - try { - let _alt: number; - this.enterOuterAlt(_localctx, 1); - { - this.state = 97; - this.match(CashScriptParser.T__14); - this.state = 109; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (((((_la - 38)) & ~0x1F) === 0 && ((1 << (_la - 38)) & ((1 << (CashScriptParser.T__37 - 38)) | (1 << (CashScriptParser.T__38 - 38)) | (1 << (CashScriptParser.T__39 - 38)) | (1 << (CashScriptParser.T__40 - 38)) | (1 << (CashScriptParser.T__41 - 38)) | (1 << (CashScriptParser.T__42 - 38)) | (1 << (CashScriptParser.Bytes - 38)))) !== 0)) { - { - this.state = 98; - this.parameter(); - this.state = 103; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 5, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - { - { - this.state = 99; - this.match(CashScriptParser.T__15); - this.state = 100; - this.parameter(); - } - } - } - this.state = 105; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 5, this._ctx); - } - this.state = 107; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === CashScriptParser.T__15) { - { - this.state = 106; - this.match(CashScriptParser.T__15); - } - } - - } - } - - this.state = 111; - this.match(CashScriptParser.T__16); - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public parameter(): ParameterContext { - let _localctx: ParameterContext = new ParameterContext(this._ctx, this.state); - this.enterRule(_localctx, 18, CashScriptParser.RULE_parameter); - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 113; - this.typeName(); - this.state = 114; - this.match(CashScriptParser.Identifier); - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public block(): BlockContext { - let _localctx: BlockContext = new BlockContext(this._ctx, this.state); - this.enterRule(_localctx, 20, CashScriptParser.RULE_block); - let _la: number; - try { - this.state = 125; - this._errHandler.sync(this); - switch (this._input.LA(1)) { - case CashScriptParser.T__11: - this.enterOuterAlt(_localctx, 1); - { - this.state = 116; - this.match(CashScriptParser.T__11); - this.state = 120; - this._errHandler.sync(this); - _la = this._input.LA(1); - while (_la === CashScriptParser.T__17 || _la === CashScriptParser.T__18 || ((((_la - 38)) & ~0x1F) === 0 && ((1 << (_la - 38)) & ((1 << (CashScriptParser.T__37 - 38)) | (1 << (CashScriptParser.T__38 - 38)) | (1 << (CashScriptParser.T__39 - 38)) | (1 << (CashScriptParser.T__40 - 38)) | (1 << (CashScriptParser.T__41 - 38)) | (1 << (CashScriptParser.T__42 - 38)) | (1 << (CashScriptParser.Bytes - 38)) | (1 << (CashScriptParser.Identifier - 38)))) !== 0)) { - { - { - this.state = 117; - this.statement(); - } - } - this.state = 122; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - this.state = 123; - this.match(CashScriptParser.T__12); - } - break; - case CashScriptParser.T__17: - case CashScriptParser.T__18: - case CashScriptParser.T__37: - case CashScriptParser.T__38: - case CashScriptParser.T__39: - case CashScriptParser.T__40: - case CashScriptParser.T__41: - case CashScriptParser.T__42: - case CashScriptParser.Bytes: - case CashScriptParser.Identifier: - this.enterOuterAlt(_localctx, 2); - { - this.state = 124; - this.statement(); - } - break; - default: - throw new NoViableAltException(this); - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public statement(): StatementContext { - let _localctx: StatementContext = new StatementContext(this._ctx, this.state); - this.enterRule(_localctx, 22, CashScriptParser.RULE_statement); - try { - this.state = 132; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 10, this._ctx) ) { - case 1: - this.enterOuterAlt(_localctx, 1); - { - this.state = 127; - this.variableDefinition(); - } - break; - - case 2: - this.enterOuterAlt(_localctx, 2); - { - this.state = 128; - this.assignStatement(); - } - break; - - case 3: - this.enterOuterAlt(_localctx, 3); - { - this.state = 129; - this.timeOpStatement(); - } - break; - - case 4: - this.enterOuterAlt(_localctx, 4); - { - this.state = 130; - this.requireStatement(); - } - break; - - case 5: - this.enterOuterAlt(_localctx, 5); - { - this.state = 131; - this.ifStatement(); - } - break; - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public variableDefinition(): VariableDefinitionContext { - let _localctx: VariableDefinitionContext = new VariableDefinitionContext(this._ctx, this.state); - this.enterRule(_localctx, 24, CashScriptParser.RULE_variableDefinition); - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 134; - this.typeName(); - this.state = 135; - this.match(CashScriptParser.Identifier); - this.state = 136; - this.match(CashScriptParser.T__9); - this.state = 137; - this.expression(0); - this.state = 138; - this.match(CashScriptParser.T__1); - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public assignStatement(): AssignStatementContext { - let _localctx: AssignStatementContext = new AssignStatementContext(this._ctx, this.state); - this.enterRule(_localctx, 26, CashScriptParser.RULE_assignStatement); - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 140; - this.match(CashScriptParser.Identifier); - this.state = 141; - this.match(CashScriptParser.T__9); - this.state = 142; - this.expression(0); - this.state = 143; - this.match(CashScriptParser.T__1); - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public timeOpStatement(): TimeOpStatementContext { - let _localctx: TimeOpStatementContext = new TimeOpStatementContext(this._ctx, this.state); - this.enterRule(_localctx, 28, CashScriptParser.RULE_timeOpStatement); - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 145; - this.match(CashScriptParser.T__17); - this.state = 146; - this.match(CashScriptParser.T__14); - this.state = 147; - this.match(CashScriptParser.TxVar); - this.state = 148; - this.match(CashScriptParser.T__5); - this.state = 149; - this.expression(0); - this.state = 150; - this.match(CashScriptParser.T__16); - this.state = 151; - this.match(CashScriptParser.T__1); - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public requireStatement(): RequireStatementContext { - let _localctx: RequireStatementContext = new RequireStatementContext(this._ctx, this.state); - this.enterRule(_localctx, 30, CashScriptParser.RULE_requireStatement); - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 153; - this.match(CashScriptParser.T__17); - this.state = 154; - this.match(CashScriptParser.T__14); - this.state = 155; - this.expression(0); - this.state = 156; - this.match(CashScriptParser.T__16); - this.state = 157; - this.match(CashScriptParser.T__1); - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public ifStatement(): IfStatementContext { - let _localctx: IfStatementContext = new IfStatementContext(this._ctx, this.state); - this.enterRule(_localctx, 32, CashScriptParser.RULE_ifStatement); - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 159; - this.match(CashScriptParser.T__18); - this.state = 160; - this.match(CashScriptParser.T__14); - this.state = 161; - this.expression(0); - this.state = 162; - this.match(CashScriptParser.T__16); - this.state = 163; - _localctx._ifBlock = this.block(); - this.state = 166; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 11, this._ctx) ) { - case 1: - { - this.state = 164; - this.match(CashScriptParser.T__19); - this.state = 165; - _localctx._elseBlock = this.block(); - } - break; - } - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public functionCall(): FunctionCallContext { - let _localctx: FunctionCallContext = new FunctionCallContext(this._ctx, this.state); - this.enterRule(_localctx, 34, CashScriptParser.RULE_functionCall); - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 168; - this.match(CashScriptParser.Identifier); - this.state = 169; - this.expressionList(); - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public expressionList(): ExpressionListContext { - let _localctx: ExpressionListContext = new ExpressionListContext(this._ctx, this.state); - this.enterRule(_localctx, 36, CashScriptParser.RULE_expressionList); - let _la: number; - try { - let _alt: number; - this.enterOuterAlt(_localctx, 1); - { - this.state = 171; - this.match(CashScriptParser.T__14); - this.state = 183; - this._errHandler.sync(this); - _la = this._input.LA(1); - if ((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << CashScriptParser.T__14) | (1 << CashScriptParser.T__20) | (1 << CashScriptParser.T__21) | (1 << CashScriptParser.T__25) | (1 << CashScriptParser.T__26))) !== 0) || ((((_la - 38)) & ~0x1F) === 0 && ((1 << (_la - 38)) & ((1 << (CashScriptParser.T__37 - 38)) | (1 << (CashScriptParser.T__38 - 38)) | (1 << (CashScriptParser.T__39 - 38)) | (1 << (CashScriptParser.T__40 - 38)) | (1 << (CashScriptParser.T__41 - 38)) | (1 << (CashScriptParser.T__42 - 38)) | (1 << (CashScriptParser.BooleanLiteral - 38)) | (1 << (CashScriptParser.NumberLiteral - 38)) | (1 << (CashScriptParser.Bytes - 38)) | (1 << (CashScriptParser.StringLiteral - 38)) | (1 << (CashScriptParser.DateLiteral - 38)) | (1 << (CashScriptParser.HexLiteral - 38)) | (1 << (CashScriptParser.PreimageField - 38)) | (1 << (CashScriptParser.Identifier - 38)))) !== 0)) { - { - this.state = 172; - this.expression(0); - this.state = 177; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 12, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - { - { - this.state = 173; - this.match(CashScriptParser.T__15); - this.state = 174; - this.expression(0); - } - } - } - this.state = 179; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 12, this._ctx); - } - this.state = 181; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === CashScriptParser.T__15) { - { - this.state = 180; - this.match(CashScriptParser.T__15); - } - } - - } - } - - this.state = 185; - this.match(CashScriptParser.T__16); - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - - public expression(): ExpressionContext; - public expression(_p: number): ExpressionContext; - // @RuleVersion(0) - public expression(_p?: number): ExpressionContext { - if (_p === undefined) { - _p = 0; - } - - let _parentctx: ParserRuleContext = this._ctx; - let _parentState: number = this.state; - let _localctx: ExpressionContext = new ExpressionContext(this._ctx, _parentState); - let _prevctx: ExpressionContext = _localctx; - let _startState: number = 38; - this.enterRecursionRule(_localctx, 38, CashScriptParser.RULE_expression, _p); - let _la: number; - try { - let _alt: number; - this.enterOuterAlt(_localctx, 1); - { - this.state = 228; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 20, this._ctx) ) { - case 1: - { - _localctx = new ParenthesisedContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - - this.state = 188; - this.match(CashScriptParser.T__14); - this.state = 189; - this.expression(0); - this.state = 190; - this.match(CashScriptParser.T__16); - } - break; - - case 2: - { - _localctx = new CastContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - this.state = 192; - this.typeName(); - this.state = 193; - this.match(CashScriptParser.T__14); - this.state = 194; - (_localctx as CastContext)._castable = this.expression(0); - this.state = 197; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 15, this._ctx) ) { - case 1: - { - this.state = 195; - this.match(CashScriptParser.T__15); - this.state = 196; - (_localctx as CastContext)._size = this.expression(0); - } - break; - } - this.state = 200; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === CashScriptParser.T__15) { - { - this.state = 199; - this.match(CashScriptParser.T__15); - } - } - - this.state = 202; - this.match(CashScriptParser.T__16); - } - break; - - case 3: - { - _localctx = new FunctionCallExpressionContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - this.state = 204; - this.functionCall(); - } - break; - - case 4: - { - _localctx = new InstantiationContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - this.state = 205; - this.match(CashScriptParser.T__20); - this.state = 206; - this.match(CashScriptParser.Identifier); - this.state = 207; - this.expressionList(); - } - break; - - case 5: - { - _localctx = new UnaryOpContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - this.state = 208; - (_localctx as UnaryOpContext)._op = this._input.LT(1); - _la = this._input.LA(1); - if (!(_la === CashScriptParser.T__25 || _la === CashScriptParser.T__26)) { - (_localctx as UnaryOpContext)._op = this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 209; - this.expression(15); - } - break; - - case 6: - { - _localctx = new ArrayContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - this.state = 210; - this.match(CashScriptParser.T__21); - this.state = 222; - this._errHandler.sync(this); - _la = this._input.LA(1); - if ((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << CashScriptParser.T__14) | (1 << CashScriptParser.T__20) | (1 << CashScriptParser.T__21) | (1 << CashScriptParser.T__25) | (1 << CashScriptParser.T__26))) !== 0) || ((((_la - 38)) & ~0x1F) === 0 && ((1 << (_la - 38)) & ((1 << (CashScriptParser.T__37 - 38)) | (1 << (CashScriptParser.T__38 - 38)) | (1 << (CashScriptParser.T__39 - 38)) | (1 << (CashScriptParser.T__40 - 38)) | (1 << (CashScriptParser.T__41 - 38)) | (1 << (CashScriptParser.T__42 - 38)) | (1 << (CashScriptParser.BooleanLiteral - 38)) | (1 << (CashScriptParser.NumberLiteral - 38)) | (1 << (CashScriptParser.Bytes - 38)) | (1 << (CashScriptParser.StringLiteral - 38)) | (1 << (CashScriptParser.DateLiteral - 38)) | (1 << (CashScriptParser.HexLiteral - 38)) | (1 << (CashScriptParser.PreimageField - 38)) | (1 << (CashScriptParser.Identifier - 38)))) !== 0)) { - { - this.state = 211; - this.expression(0); - this.state = 216; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 17, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - { - { - this.state = 212; - this.match(CashScriptParser.T__15); - this.state = 213; - this.expression(0); - } - } - } - this.state = 218; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 17, this._ctx); - } - this.state = 220; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === CashScriptParser.T__15) { - { - this.state = 219; - this.match(CashScriptParser.T__15); - } - } - - } - } - - this.state = 224; - this.match(CashScriptParser.T__22); - } - break; - - case 7: - { - _localctx = new PreimageFieldContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - this.state = 225; - this.match(CashScriptParser.PreimageField); - } - break; - - case 8: - { - _localctx = new IdentifierContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - this.state = 226; - this.match(CashScriptParser.Identifier); - } - break; - - case 9: - { - _localctx = new LiteralExpressionContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - this.state = 227; - this.literal(); - } - break; - } - this._ctx._stop = this._input.tryLT(-1); - this.state = 271; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 22, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - if (this._parseListeners != null) { - this.triggerExitRuleEvent(); - } - _prevctx = _localctx; - { - this.state = 269; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 21, this._ctx) ) { - case 1: - { - _localctx = new BinaryOpContext(new ExpressionContext(_parentctx, _parentState)); - (_localctx as BinaryOpContext)._left = _prevctx; - this.pushNewRecursionContext(_localctx, _startState, CashScriptParser.RULE_expression); - this.state = 230; - if (!(this.precpred(this._ctx, 13))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 13)"); - } - this.state = 231; - (_localctx as BinaryOpContext)._op = this._input.LT(1); - _la = this._input.LA(1); - if (!(_la === CashScriptParser.T__28 || _la === CashScriptParser.T__29)) { - (_localctx as BinaryOpContext)._op = this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 232; - (_localctx as BinaryOpContext)._right = this.expression(14); - } - break; - - case 2: - { - _localctx = new BinaryOpContext(new ExpressionContext(_parentctx, _parentState)); - (_localctx as BinaryOpContext)._left = _prevctx; - this.pushNewRecursionContext(_localctx, _startState, CashScriptParser.RULE_expression); - this.state = 233; - if (!(this.precpred(this._ctx, 12))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 12)"); - } - this.state = 234; - (_localctx as BinaryOpContext)._op = this._input.LT(1); - _la = this._input.LA(1); - if (!(_la === CashScriptParser.T__26 || _la === CashScriptParser.T__30)) { - (_localctx as BinaryOpContext)._op = this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 235; - (_localctx as BinaryOpContext)._right = this.expression(13); - } - break; - - case 3: - { - _localctx = new BinaryOpContext(new ExpressionContext(_parentctx, _parentState)); - (_localctx as BinaryOpContext)._left = _prevctx; - this.pushNewRecursionContext(_localctx, _startState, CashScriptParser.RULE_expression); - this.state = 236; - if (!(this.precpred(this._ctx, 11))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 11)"); - } - this.state = 237; - (_localctx as BinaryOpContext)._op = this._input.LT(1); - _la = this._input.LA(1); - if (!((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << CashScriptParser.T__5) | (1 << CashScriptParser.T__6) | (1 << CashScriptParser.T__7) | (1 << CashScriptParser.T__8))) !== 0))) { - (_localctx as BinaryOpContext)._op = this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 238; - (_localctx as BinaryOpContext)._right = this.expression(12); - } - break; - - case 4: - { - _localctx = new BinaryOpContext(new ExpressionContext(_parentctx, _parentState)); - (_localctx as BinaryOpContext)._left = _prevctx; - this.pushNewRecursionContext(_localctx, _startState, CashScriptParser.RULE_expression); - this.state = 239; - if (!(this.precpred(this._ctx, 10))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 10)"); - } - this.state = 240; - (_localctx as BinaryOpContext)._op = this._input.LT(1); - _la = this._input.LA(1); - if (!(_la === CashScriptParser.T__31 || _la === CashScriptParser.T__32)) { - (_localctx as BinaryOpContext)._op = this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 241; - (_localctx as BinaryOpContext)._right = this.expression(11); - } - break; - - case 5: - { - _localctx = new BinaryOpContext(new ExpressionContext(_parentctx, _parentState)); - (_localctx as BinaryOpContext)._left = _prevctx; - this.pushNewRecursionContext(_localctx, _startState, CashScriptParser.RULE_expression); - this.state = 242; - if (!(this.precpred(this._ctx, 9))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 9)"); - } - this.state = 243; - (_localctx as BinaryOpContext)._op = this.match(CashScriptParser.T__33); - this.state = 244; - (_localctx as BinaryOpContext)._right = this.expression(10); - } - break; - - case 6: - { - _localctx = new BinaryOpContext(new ExpressionContext(_parentctx, _parentState)); - (_localctx as BinaryOpContext)._left = _prevctx; - this.pushNewRecursionContext(_localctx, _startState, CashScriptParser.RULE_expression); - this.state = 245; - if (!(this.precpred(this._ctx, 8))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 8)"); - } - this.state = 246; - (_localctx as BinaryOpContext)._op = this.match(CashScriptParser.T__3); - this.state = 247; - (_localctx as BinaryOpContext)._right = this.expression(9); - } - break; - - case 7: - { - _localctx = new BinaryOpContext(new ExpressionContext(_parentctx, _parentState)); - (_localctx as BinaryOpContext)._left = _prevctx; - this.pushNewRecursionContext(_localctx, _startState, CashScriptParser.RULE_expression); - this.state = 248; - if (!(this.precpred(this._ctx, 7))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 7)"); - } - this.state = 249; - (_localctx as BinaryOpContext)._op = this.match(CashScriptParser.T__34); - this.state = 250; - (_localctx as BinaryOpContext)._right = this.expression(8); - } - break; - - case 8: - { - _localctx = new BinaryOpContext(new ExpressionContext(_parentctx, _parentState)); - (_localctx as BinaryOpContext)._left = _prevctx; - this.pushNewRecursionContext(_localctx, _startState, CashScriptParser.RULE_expression); - this.state = 251; - if (!(this.precpred(this._ctx, 6))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 6)"); - } - this.state = 252; - (_localctx as BinaryOpContext)._op = this.match(CashScriptParser.T__35); - this.state = 253; - (_localctx as BinaryOpContext)._right = this.expression(7); - } - break; - - case 9: - { - _localctx = new BinaryOpContext(new ExpressionContext(_parentctx, _parentState)); - (_localctx as BinaryOpContext)._left = _prevctx; - this.pushNewRecursionContext(_localctx, _startState, CashScriptParser.RULE_expression); - this.state = 254; - if (!(this.precpred(this._ctx, 5))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 5)"); - } - this.state = 255; - (_localctx as BinaryOpContext)._op = this.match(CashScriptParser.T__36); - this.state = 256; - (_localctx as BinaryOpContext)._right = this.expression(6); - } - break; - - case 10: - { - _localctx = new TupleIndexOpContext(new ExpressionContext(_parentctx, _parentState)); - this.pushNewRecursionContext(_localctx, _startState, CashScriptParser.RULE_expression); - this.state = 257; - if (!(this.precpred(this._ctx, 17))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 17)"); - } - this.state = 258; - this.match(CashScriptParser.T__21); - this.state = 259; - (_localctx as TupleIndexOpContext)._index = this.match(CashScriptParser.NumberLiteral); - this.state = 260; - this.match(CashScriptParser.T__22); - } - break; - - case 11: - { - _localctx = new UnaryOpContext(new ExpressionContext(_parentctx, _parentState)); - this.pushNewRecursionContext(_localctx, _startState, CashScriptParser.RULE_expression); - this.state = 261; - if (!(this.precpred(this._ctx, 16))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 16)"); - } - this.state = 262; - (_localctx as UnaryOpContext)._op = this._input.LT(1); - _la = this._input.LA(1); - if (!(_la === CashScriptParser.T__23 || _la === CashScriptParser.T__24)) { - (_localctx as UnaryOpContext)._op = this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); - } - } - break; - - case 12: - { - _localctx = new BinaryOpContext(new ExpressionContext(_parentctx, _parentState)); - (_localctx as BinaryOpContext)._left = _prevctx; - this.pushNewRecursionContext(_localctx, _startState, CashScriptParser.RULE_expression); - this.state = 263; - if (!(this.precpred(this._ctx, 14))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 14)"); - } - this.state = 264; - (_localctx as BinaryOpContext)._op = this.match(CashScriptParser.T__27); - this.state = 265; - this.match(CashScriptParser.T__14); - this.state = 266; - (_localctx as BinaryOpContext)._right = this.expression(0); - this.state = 267; - this.match(CashScriptParser.T__16); - } - break; - } - } - } - this.state = 273; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 22, this._ctx); - } - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.unrollRecursionContexts(_parentctx); - } - return _localctx; - } - // @RuleVersion(0) - public literal(): LiteralContext { - let _localctx: LiteralContext = new LiteralContext(this._ctx, this.state); - this.enterRule(_localctx, 40, CashScriptParser.RULE_literal); - try { - this.state = 279; - this._errHandler.sync(this); - switch (this._input.LA(1)) { - case CashScriptParser.BooleanLiteral: - this.enterOuterAlt(_localctx, 1); - { - this.state = 274; - this.match(CashScriptParser.BooleanLiteral); - } - break; - case CashScriptParser.NumberLiteral: - this.enterOuterAlt(_localctx, 2); - { - this.state = 275; - this.numberLiteral(); - } - break; - case CashScriptParser.StringLiteral: - this.enterOuterAlt(_localctx, 3); - { - this.state = 276; - this.match(CashScriptParser.StringLiteral); - } - break; - case CashScriptParser.DateLiteral: - this.enterOuterAlt(_localctx, 4); - { - this.state = 277; - this.match(CashScriptParser.DateLiteral); - } - break; - case CashScriptParser.HexLiteral: - this.enterOuterAlt(_localctx, 5); - { - this.state = 278; - this.match(CashScriptParser.HexLiteral); - } - break; - default: - throw new NoViableAltException(this); - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public numberLiteral(): NumberLiteralContext { - let _localctx: NumberLiteralContext = new NumberLiteralContext(this._ctx, this.state); - this.enterRule(_localctx, 42, CashScriptParser.RULE_numberLiteral); - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 281; - this.match(CashScriptParser.NumberLiteral); - this.state = 283; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 24, this._ctx) ) { - case 1: - { - this.state = 282; - this.match(CashScriptParser.NumberUnit); - } - break; - } - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public typeName(): TypeNameContext { - let _localctx: TypeNameContext = new TypeNameContext(this._ctx, this.state); - this.enterRule(_localctx, 44, CashScriptParser.RULE_typeName); - let _la: number; - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 285; - _la = this._input.LA(1); - if (!(((((_la - 38)) & ~0x1F) === 0 && ((1 << (_la - 38)) & ((1 << (CashScriptParser.T__37 - 38)) | (1 << (CashScriptParser.T__38 - 38)) | (1 << (CashScriptParser.T__39 - 38)) | (1 << (CashScriptParser.T__40 - 38)) | (1 << (CashScriptParser.T__41 - 38)) | (1 << (CashScriptParser.T__42 - 38)) | (1 << (CashScriptParser.Bytes - 38)))) !== 0))) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); - } - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - - public sempred(_localctx: RuleContext, ruleIndex: number, predIndex: number): boolean { - switch (ruleIndex) { - case 19: - return this.expression_sempred(_localctx as ExpressionContext, predIndex); - } - return true; - } - private expression_sempred(_localctx: ExpressionContext, predIndex: number): boolean { - switch (predIndex) { - case 0: - return this.precpred(this._ctx, 13); - - case 1: - return this.precpred(this._ctx, 12); - - case 2: - return this.precpred(this._ctx, 11); - - case 3: - return this.precpred(this._ctx, 10); - - case 4: - return this.precpred(this._ctx, 9); - - case 5: - return this.precpred(this._ctx, 8); - - case 6: - return this.precpred(this._ctx, 7); - - case 7: - return this.precpred(this._ctx, 6); - - case 8: - return this.precpred(this._ctx, 5); - - case 9: - return this.precpred(this._ctx, 17); - - case 10: - return this.precpred(this._ctx, 16); - - case 11: - return this.precpred(this._ctx, 14); - } - return true; - } - - public static readonly _serializedATN: string = - "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x03<\u0122\x04\x02" + - "\t\x02\x04\x03\t\x03\x04\x04\t\x04\x04\x05\t\x05\x04\x06\t\x06\x04\x07" + - "\t\x07\x04\b\t\b\x04\t\t\t\x04\n\t\n\x04\v\t\v\x04\f\t\f\x04\r\t\r\x04" + - "\x0E\t\x0E\x04\x0F\t\x0F\x04\x10\t\x10\x04\x11\t\x11\x04\x12\t\x12\x04" + - "\x13\t\x13\x04\x14\t\x14\x04\x15\t\x15\x04\x16\t\x16\x04\x17\t\x17\x04" + - "\x18\t\x18\x03\x02\x07\x022\n\x02\f\x02\x0E\x025\v\x02\x03\x02\x03\x02" + - "\x03\x02\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x04\x03\x04\x03\x05" + - "\x03\x05\x05\x05C\n\x05\x03\x06\x05\x06F\n\x06\x03\x06\x03\x06\x03\x07" + - "\x03\x07\x03\b\x03\b\x03\b\x03\b\x03\b\x07\bQ\n\b\f\b\x0E\bT\v\b\x03\b" + - "\x03\b\x03\t\x03\t\x03\t\x03\t\x03\t\x07\t]\n\t\f\t\x0E\t`\v\t\x03\t\x03" + - "\t\x03\n\x03\n\x03\n\x03\n\x07\nh\n\n\f\n\x0E\nk\v\n\x03\n\x05\nn\n\n" + - "\x05\np\n\n\x03\n\x03\n\x03\v\x03\v\x03\v\x03\f\x03\f\x07\fy\n\f\f\f\x0E" + - "\f|\v\f\x03\f\x03\f\x05\f\x80\n\f\x03\r\x03\r\x03\r\x03\r\x03\r\x05\r" + - "\x87\n\r\x03\x0E\x03\x0E\x03\x0E\x03\x0E\x03\x0E\x03\x0E\x03\x0F\x03\x0F" + - "\x03\x0F\x03\x0F\x03\x0F\x03\x10\x03\x10\x03\x10\x03\x10\x03\x10\x03\x10" + - "\x03\x10\x03\x10\x03\x11\x03\x11\x03\x11\x03\x11\x03\x11\x03\x11\x03\x12" + - "\x03\x12\x03\x12\x03\x12\x03\x12\x03\x12\x03\x12\x05\x12\xA9\n\x12\x03" + - "\x13\x03\x13\x03\x13\x03\x14\x03\x14\x03\x14\x03\x14\x07\x14\xB2\n\x14" + - "\f\x14\x0E\x14\xB5\v\x14\x03\x14\x05\x14\xB8\n\x14\x05\x14\xBA\n\x14\x03" + - "\x14\x03\x14\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03" + - "\x15\x03\x15\x03\x15\x05\x15\xC8\n\x15\x03\x15\x05\x15\xCB\n\x15\x03\x15" + - "\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15" + - "\x03\x15\x03\x15\x07\x15\xD9\n\x15\f\x15\x0E\x15\xDC\v\x15\x03\x15\x05" + - "\x15\xDF\n\x15\x05\x15\xE1\n\x15\x03\x15\x03\x15\x03\x15\x03\x15\x05\x15" + - "\xE7\n\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03" + - "\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03" + - "\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03" + - "\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03" + - "\x15\x03\x15\x03\x15\x03\x15\x03\x15\x07\x15\u0110\n\x15\f\x15\x0E\x15" + - "\u0113\v\x15\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x05\x16\u011A\n\x16" + - "\x03\x17\x03\x17\x05\x17\u011E\n\x17\x03\x18\x03\x18\x03\x18\x02\x02\x03" + - "(\x19\x02\x02\x04\x02\x06\x02\b\x02\n\x02\f\x02\x0E\x02\x10\x02\x12\x02" + - "\x14\x02\x16\x02\x18\x02\x1A\x02\x1C\x02\x1E\x02 \x02\"\x02$\x02&\x02" + - "(\x02*\x02,\x02.\x02\x02\n\x03\x02\x06\f\x03\x02\x1C\x1D\x03\x02\x1F " + - "\x04\x02\x1D\x1D!!\x03\x02\b\v\x03\x02\"#\x03\x02\x1A\x1B\x04\x02(-22" + - "\x02\u013A\x023\x03\x02\x02\x02\x049\x03\x02\x02\x02\x06>\x03\x02\x02" + - "\x02\b@\x03\x02\x02\x02\nE\x03\x02\x02\x02\fI\x03\x02\x02\x02\x0EK\x03" + - "\x02\x02\x02\x10W\x03\x02\x02\x02\x12c\x03\x02\x02\x02\x14s\x03\x02\x02" + - "\x02\x16\x7F\x03\x02\x02\x02\x18\x86\x03\x02\x02\x02\x1A\x88\x03\x02\x02" + - "\x02\x1C\x8E\x03\x02\x02\x02\x1E\x93\x03\x02\x02\x02 \x9B\x03\x02\x02" + - "\x02\"\xA1\x03\x02\x02\x02$\xAA\x03\x02\x02\x02&\xAD\x03\x02\x02\x02(" + - "\xE6\x03\x02\x02\x02*\u0119\x03\x02\x02\x02,\u011B\x03\x02\x02\x02.\u011F" + - "\x03\x02\x02\x0202\x05\x04\x03\x0210\x03\x02\x02\x0225\x03\x02\x02\x02" + - "31\x03\x02\x02\x0234\x03\x02\x02\x0246\x03\x02\x02\x0253\x03\x02\x02\x02" + - "67\x05\x0E\b\x0278\x07\x02\x02\x038\x03\x03\x02\x02\x029:\x07\x03\x02" + - "\x02:;\x05\x06\x04\x02;<\x05\b\x05\x02<=\x07\x04\x02\x02=\x05\x03\x02" + - "\x02\x02>?\x07\x05\x02\x02?\x07\x03\x02\x02\x02@B\x05\n\x06\x02AC\x05" + - "\n\x06\x02BA\x03\x02\x02\x02BC\x03\x02\x02\x02C\t\x03\x02\x02\x02DF\x05" + - "\f\x07\x02ED\x03\x02\x02\x02EF\x03\x02\x02\x02FG\x03\x02\x02\x02GH\x07" + - ".\x02\x02H\v\x03\x02\x02\x02IJ\t\x02\x02\x02J\r\x03\x02\x02\x02KL\x07" + - "\r\x02\x02LM\x079\x02\x02MN\x05\x12\n\x02NR\x07\x0E\x02\x02OQ\x05\x10" + - "\t\x02PO\x03\x02\x02\x02QT\x03\x02\x02\x02RP\x03\x02\x02\x02RS\x03\x02" + - "\x02\x02SU\x03\x02\x02\x02TR\x03\x02\x02\x02UV\x07\x0F\x02\x02V\x0F\x03" + - "\x02\x02\x02WX\x07\x10\x02\x02XY\x079\x02\x02YZ\x05\x12\n\x02Z^\x07\x0E" + - "\x02\x02[]\x05\x18\r\x02\\[\x03\x02\x02\x02]`\x03\x02\x02\x02^\\\x03\x02" + - "\x02\x02^_\x03\x02\x02\x02_a\x03\x02\x02\x02`^\x03\x02\x02\x02ab\x07\x0F" + - "\x02\x02b\x11\x03\x02\x02\x02co\x07\x11\x02\x02di\x05\x14\v\x02ef\x07" + - "\x12\x02\x02fh\x05\x14\v\x02ge\x03\x02\x02\x02hk\x03\x02\x02\x02ig\x03" + - "\x02\x02\x02ij\x03\x02\x02\x02jm\x03\x02\x02\x02ki\x03\x02\x02\x02ln\x07" + - "\x12\x02\x02ml\x03\x02\x02\x02mn\x03\x02\x02\x02np\x03\x02\x02\x02od\x03" + - "\x02\x02\x02op\x03\x02\x02\x02pq\x03\x02\x02\x02qr\x07\x13\x02\x02r\x13" + - "\x03\x02\x02\x02st\x05.\x18\x02tu\x079\x02\x02u\x15\x03\x02\x02\x02vz" + - "\x07\x0E\x02\x02wy\x05\x18\r\x02xw\x03\x02\x02\x02y|\x03\x02\x02\x02z" + - "x\x03\x02\x02\x02z{\x03\x02\x02\x02{}\x03\x02\x02\x02|z\x03\x02\x02\x02" + - "}\x80\x07\x0F\x02\x02~\x80\x05\x18\r\x02\x7Fv\x03\x02\x02\x02\x7F~\x03" + - "\x02\x02\x02\x80\x17\x03\x02\x02\x02\x81\x87\x05\x1A\x0E\x02\x82\x87\x05" + - "\x1C\x0F\x02\x83\x87\x05\x1E\x10\x02\x84\x87\x05 \x11\x02\x85\x87\x05" + - "\"\x12\x02\x86\x81\x03\x02\x02\x02\x86\x82\x03\x02\x02\x02\x86\x83\x03" + - "\x02\x02\x02\x86\x84\x03\x02\x02\x02\x86\x85\x03\x02\x02\x02\x87\x19\x03" + - "\x02\x02\x02\x88\x89\x05.\x18\x02\x89\x8A\x079\x02\x02\x8A\x8B\x07\f\x02" + - "\x02\x8B\x8C\x05(\x15\x02\x8C\x8D\x07\x04\x02\x02\x8D\x1B\x03\x02\x02" + - "\x02\x8E\x8F\x079\x02\x02\x8F\x90\x07\f\x02\x02\x90\x91\x05(\x15\x02\x91" + - "\x92\x07\x04\x02\x02\x92\x1D\x03\x02\x02\x02\x93\x94\x07\x14\x02\x02\x94" + - "\x95\x07\x11\x02\x02\x95\x96\x077\x02\x02\x96\x97\x07\b\x02\x02\x97\x98" + - "\x05(\x15\x02\x98\x99\x07\x13\x02\x02\x99\x9A\x07\x04\x02\x02\x9A\x1F" + - "\x03\x02\x02\x02\x9B\x9C\x07\x14\x02\x02\x9C\x9D\x07\x11\x02\x02\x9D\x9E" + - "\x05(\x15\x02\x9E\x9F\x07\x13\x02\x02\x9F\xA0\x07\x04\x02\x02\xA0!\x03" + - "\x02\x02\x02\xA1\xA2\x07\x15\x02\x02\xA2\xA3\x07\x11\x02\x02\xA3\xA4\x05" + - "(\x15\x02\xA4\xA5\x07\x13\x02\x02\xA5\xA8\x05\x16\f\x02\xA6\xA7\x07\x16" + - "\x02\x02\xA7\xA9\x05\x16\f\x02\xA8\xA6\x03\x02\x02\x02\xA8\xA9\x03\x02" + - "\x02\x02\xA9#\x03\x02\x02\x02\xAA\xAB\x079\x02\x02\xAB\xAC\x05&\x14\x02" + - "\xAC%\x03\x02\x02\x02\xAD\xB9\x07\x11\x02\x02\xAE\xB3\x05(\x15\x02\xAF" + - "\xB0\x07\x12\x02\x02\xB0\xB2\x05(\x15\x02\xB1\xAF\x03\x02\x02\x02\xB2" + - "\xB5\x03\x02\x02\x02\xB3\xB1\x03\x02\x02\x02\xB3\xB4\x03\x02\x02\x02\xB4" + - "\xB7\x03\x02\x02\x02\xB5\xB3\x03\x02\x02\x02\xB6\xB8\x07\x12\x02\x02\xB7" + - "\xB6\x03\x02\x02\x02\xB7\xB8\x03\x02\x02\x02\xB8\xBA\x03\x02\x02\x02\xB9" + - "\xAE\x03\x02\x02\x02\xB9\xBA\x03\x02\x02\x02\xBA\xBB\x03\x02\x02\x02\xBB" + - "\xBC\x07\x13\x02\x02\xBC\'\x03\x02\x02\x02\xBD\xBE\b\x15\x01\x02\xBE\xBF" + - "\x07\x11\x02\x02\xBF\xC0\x05(\x15\x02\xC0\xC1\x07\x13\x02\x02\xC1\xE7" + - "\x03\x02\x02\x02\xC2\xC3\x05.\x18\x02\xC3\xC4\x07\x11\x02\x02\xC4\xC7" + - "\x05(\x15\x02\xC5\xC6\x07\x12\x02\x02\xC6\xC8\x05(\x15\x02\xC7\xC5\x03" + - "\x02\x02\x02\xC7\xC8\x03\x02\x02\x02\xC8\xCA\x03\x02\x02\x02\xC9\xCB\x07" + - "\x12\x02\x02\xCA\xC9\x03\x02\x02\x02\xCA\xCB\x03\x02\x02\x02\xCB\xCC\x03" + - "\x02\x02\x02\xCC\xCD\x07\x13\x02\x02\xCD\xE7\x03\x02\x02\x02\xCE\xE7\x05" + - "$\x13\x02\xCF\xD0\x07\x17\x02\x02\xD0\xD1\x079\x02\x02\xD1\xE7\x05&\x14" + - "\x02\xD2\xD3\t\x03\x02\x02\xD3\xE7\x05(\x15\x11\xD4\xE0\x07\x18\x02\x02" + - "\xD5\xDA\x05(\x15\x02\xD6\xD7\x07\x12\x02\x02\xD7\xD9\x05(\x15\x02\xD8" + - "\xD6\x03\x02\x02\x02\xD9\xDC\x03\x02\x02\x02\xDA\xD8\x03\x02\x02\x02\xDA" + - "\xDB\x03\x02\x02\x02\xDB\xDE\x03\x02\x02\x02\xDC\xDA\x03\x02\x02\x02\xDD" + - "\xDF\x07\x12\x02\x02\xDE\xDD\x03\x02\x02\x02\xDE\xDF\x03\x02\x02\x02\xDF" + - "\xE1\x03\x02\x02\x02\xE0\xD5\x03\x02\x02\x02\xE0\xE1\x03\x02\x02\x02\xE1" + - "\xE2\x03\x02\x02\x02\xE2\xE7\x07\x19\x02\x02\xE3\xE7\x078\x02\x02\xE4" + - "\xE7\x079\x02\x02\xE5\xE7\x05*\x16\x02\xE6\xBD\x03\x02\x02\x02\xE6\xC2" + - "\x03\x02\x02\x02\xE6\xCE\x03\x02\x02\x02\xE6\xCF\x03\x02\x02\x02\xE6\xD2" + - "\x03\x02\x02\x02\xE6\xD4\x03\x02\x02\x02\xE6\xE3\x03\x02\x02\x02\xE6\xE4" + - "\x03\x02\x02\x02\xE6\xE5\x03\x02\x02\x02\xE7\u0111\x03\x02\x02\x02\xE8" + - "\xE9\f\x0F\x02\x02\xE9\xEA\t\x04\x02\x02\xEA\u0110\x05(\x15\x10\xEB\xEC" + - "\f\x0E\x02\x02\xEC\xED\t\x05\x02\x02\xED\u0110\x05(\x15\x0F\xEE\xEF\f" + - "\r\x02\x02\xEF\xF0\t\x06\x02\x02\xF0\u0110\x05(\x15\x0E\xF1\xF2\f\f\x02" + - "\x02\xF2\xF3\t\x07\x02\x02\xF3\u0110\x05(\x15\r\xF4\xF5\f\v\x02\x02\xF5" + - "\xF6\x07$\x02\x02\xF6\u0110\x05(\x15\f\xF7\xF8\f\n\x02\x02\xF8\xF9\x07" + - "\x06\x02\x02\xF9\u0110\x05(\x15\v\xFA\xFB\f\t\x02\x02\xFB\xFC\x07%\x02" + - "\x02\xFC\u0110\x05(\x15\n\xFD\xFE\f\b\x02\x02\xFE\xFF\x07&\x02\x02\xFF" + - "\u0110\x05(\x15\t\u0100\u0101\f\x07\x02\x02\u0101\u0102\x07\'\x02\x02" + - "\u0102\u0110\x05(\x15\b\u0103\u0104\f\x13\x02\x02\u0104\u0105\x07\x18" + - "\x02\x02\u0105\u0106\x071\x02\x02\u0106\u0110\x07\x19\x02\x02\u0107\u0108" + - "\f\x12\x02\x02\u0108\u0110\t\b\x02\x02\u0109\u010A\f\x10\x02\x02\u010A" + - "\u010B\x07\x1E\x02\x02\u010B\u010C\x07\x11\x02\x02\u010C\u010D\x05(\x15" + - "\x02\u010D\u010E\x07\x13\x02\x02\u010E\u0110\x03\x02\x02\x02\u010F\xE8" + - "\x03\x02\x02\x02\u010F\xEB\x03\x02\x02\x02\u010F\xEE\x03\x02\x02\x02\u010F" + - "\xF1\x03\x02\x02\x02\u010F\xF4\x03\x02\x02\x02\u010F\xF7\x03\x02\x02\x02" + - "\u010F\xFA\x03\x02\x02\x02\u010F\xFD\x03\x02\x02\x02\u010F\u0100\x03\x02" + - "\x02\x02\u010F\u0103\x03\x02\x02\x02\u010F\u0107\x03\x02\x02\x02\u010F" + - "\u0109\x03\x02\x02\x02\u0110\u0113\x03\x02\x02\x02\u0111\u010F\x03\x02" + - "\x02\x02\u0111\u0112\x03\x02\x02\x02\u0112)\x03\x02\x02\x02\u0113\u0111" + - "\x03\x02\x02\x02\u0114\u011A\x07/\x02\x02\u0115\u011A\x05,\x17\x02\u0116" + - "\u011A\x074\x02\x02\u0117\u011A\x075\x02\x02\u0118\u011A\x076\x02\x02" + - "\u0119\u0114\x03\x02\x02\x02\u0119\u0115\x03\x02\x02\x02\u0119\u0116\x03" + - "\x02\x02\x02\u0119\u0117\x03\x02\x02\x02\u0119\u0118\x03\x02\x02\x02\u011A" + - "+\x03\x02\x02\x02\u011B\u011D\x071\x02\x02\u011C\u011E\x070\x02\x02\u011D" + - "\u011C\x03\x02\x02\x02\u011D\u011E\x03\x02\x02\x02\u011E-\x03\x02\x02" + - "\x02\u011F\u0120\t\t\x02\x02\u0120/\x03\x02\x02\x02\x1B3BER^imoz\x7F\x86" + - "\xA8\xB3\xB7\xB9\xC7\xCA\xDA\xDE\xE0\xE6\u010F\u0111\u0119\u011D"; - public static __ATN: ATN; - public static get _ATN(): ATN { - if (!CashScriptParser.__ATN) { - CashScriptParser.__ATN = new ATNDeserializer().deserialize(Utils.toCharArray(CashScriptParser._serializedATN)); - } - - return CashScriptParser.__ATN; - } - -} - -export class SourceFileContext extends ParserRuleContext { - public contractDefinition(): ContractDefinitionContext { - return this.getRuleContext(0, ContractDefinitionContext); - } - public EOF(): TerminalNode { return this.getToken(CashScriptParser.EOF, 0); } - public pragmaDirective(): PragmaDirectiveContext[]; - public pragmaDirective(i: number): PragmaDirectiveContext; - public pragmaDirective(i?: number): PragmaDirectiveContext | PragmaDirectiveContext[] { - if (i === undefined) { - return this.getRuleContexts(PragmaDirectiveContext); - } else { - return this.getRuleContext(i, PragmaDirectiveContext); - } - } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return CashScriptParser.RULE_sourceFile; } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterSourceFile) { - listener.enterSourceFile(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitSourceFile) { - listener.exitSourceFile(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitSourceFile) { - return visitor.visitSourceFile(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class PragmaDirectiveContext extends ParserRuleContext { - public pragmaName(): PragmaNameContext { - return this.getRuleContext(0, PragmaNameContext); - } - public pragmaValue(): PragmaValueContext { - return this.getRuleContext(0, PragmaValueContext); - } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return CashScriptParser.RULE_pragmaDirective; } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterPragmaDirective) { - listener.enterPragmaDirective(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitPragmaDirective) { - listener.exitPragmaDirective(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitPragmaDirective) { - return visitor.visitPragmaDirective(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class PragmaNameContext extends ParserRuleContext { - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return CashScriptParser.RULE_pragmaName; } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterPragmaName) { - listener.enterPragmaName(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitPragmaName) { - listener.exitPragmaName(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitPragmaName) { - return visitor.visitPragmaName(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class PragmaValueContext extends ParserRuleContext { - public versionConstraint(): VersionConstraintContext[]; - public versionConstraint(i: number): VersionConstraintContext; - public versionConstraint(i?: number): VersionConstraintContext | VersionConstraintContext[] { - if (i === undefined) { - return this.getRuleContexts(VersionConstraintContext); - } else { - return this.getRuleContext(i, VersionConstraintContext); - } - } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return CashScriptParser.RULE_pragmaValue; } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterPragmaValue) { - listener.enterPragmaValue(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitPragmaValue) { - listener.exitPragmaValue(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitPragmaValue) { - return visitor.visitPragmaValue(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class VersionConstraintContext extends ParserRuleContext { - public VersionLiteral(): TerminalNode { return this.getToken(CashScriptParser.VersionLiteral, 0); } - public versionOperator(): VersionOperatorContext | undefined { - return this.tryGetRuleContext(0, VersionOperatorContext); - } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return CashScriptParser.RULE_versionConstraint; } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterVersionConstraint) { - listener.enterVersionConstraint(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitVersionConstraint) { - listener.exitVersionConstraint(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitVersionConstraint) { - return visitor.visitVersionConstraint(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class VersionOperatorContext extends ParserRuleContext { - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return CashScriptParser.RULE_versionOperator; } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterVersionOperator) { - listener.enterVersionOperator(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitVersionOperator) { - listener.exitVersionOperator(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitVersionOperator) { - return visitor.visitVersionOperator(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class ContractDefinitionContext extends ParserRuleContext { - public Identifier(): TerminalNode { return this.getToken(CashScriptParser.Identifier, 0); } - public parameterList(): ParameterListContext { - return this.getRuleContext(0, ParameterListContext); - } - public functionDefinition(): FunctionDefinitionContext[]; - public functionDefinition(i: number): FunctionDefinitionContext; - public functionDefinition(i?: number): FunctionDefinitionContext | FunctionDefinitionContext[] { - if (i === undefined) { - return this.getRuleContexts(FunctionDefinitionContext); - } else { - return this.getRuleContext(i, FunctionDefinitionContext); - } - } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return CashScriptParser.RULE_contractDefinition; } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterContractDefinition) { - listener.enterContractDefinition(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitContractDefinition) { - listener.exitContractDefinition(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitContractDefinition) { - return visitor.visitContractDefinition(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class FunctionDefinitionContext extends ParserRuleContext { - public Identifier(): TerminalNode { return this.getToken(CashScriptParser.Identifier, 0); } - public parameterList(): ParameterListContext { - return this.getRuleContext(0, ParameterListContext); - } - public statement(): StatementContext[]; - public statement(i: number): StatementContext; - public statement(i?: number): StatementContext | StatementContext[] { - if (i === undefined) { - return this.getRuleContexts(StatementContext); - } else { - return this.getRuleContext(i, StatementContext); - } - } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return CashScriptParser.RULE_functionDefinition; } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterFunctionDefinition) { - listener.enterFunctionDefinition(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitFunctionDefinition) { - listener.exitFunctionDefinition(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitFunctionDefinition) { - return visitor.visitFunctionDefinition(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class ParameterListContext extends ParserRuleContext { - public parameter(): ParameterContext[]; - public parameter(i: number): ParameterContext; - public parameter(i?: number): ParameterContext | ParameterContext[] { - if (i === undefined) { - return this.getRuleContexts(ParameterContext); - } else { - return this.getRuleContext(i, ParameterContext); - } - } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return CashScriptParser.RULE_parameterList; } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterParameterList) { - listener.enterParameterList(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitParameterList) { - listener.exitParameterList(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitParameterList) { - return visitor.visitParameterList(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class ParameterContext extends ParserRuleContext { - public typeName(): TypeNameContext { - return this.getRuleContext(0, TypeNameContext); - } - public Identifier(): TerminalNode { return this.getToken(CashScriptParser.Identifier, 0); } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return CashScriptParser.RULE_parameter; } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterParameter) { - listener.enterParameter(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitParameter) { - listener.exitParameter(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitParameter) { - return visitor.visitParameter(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class BlockContext extends ParserRuleContext { - public statement(): StatementContext[]; - public statement(i: number): StatementContext; - public statement(i?: number): StatementContext | StatementContext[] { - if (i === undefined) { - return this.getRuleContexts(StatementContext); - } else { - return this.getRuleContext(i, StatementContext); - } - } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return CashScriptParser.RULE_block; } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterBlock) { - listener.enterBlock(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitBlock) { - listener.exitBlock(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitBlock) { - return visitor.visitBlock(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class StatementContext extends ParserRuleContext { - public variableDefinition(): VariableDefinitionContext | undefined { - return this.tryGetRuleContext(0, VariableDefinitionContext); - } - public assignStatement(): AssignStatementContext | undefined { - return this.tryGetRuleContext(0, AssignStatementContext); - } - public timeOpStatement(): TimeOpStatementContext | undefined { - return this.tryGetRuleContext(0, TimeOpStatementContext); - } - public requireStatement(): RequireStatementContext | undefined { - return this.tryGetRuleContext(0, RequireStatementContext); - } - public ifStatement(): IfStatementContext | undefined { - return this.tryGetRuleContext(0, IfStatementContext); - } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return CashScriptParser.RULE_statement; } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterStatement) { - listener.enterStatement(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitStatement) { - listener.exitStatement(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitStatement) { - return visitor.visitStatement(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class VariableDefinitionContext extends ParserRuleContext { - public typeName(): TypeNameContext { - return this.getRuleContext(0, TypeNameContext); - } - public Identifier(): TerminalNode { return this.getToken(CashScriptParser.Identifier, 0); } - public expression(): ExpressionContext { - return this.getRuleContext(0, ExpressionContext); - } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return CashScriptParser.RULE_variableDefinition; } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterVariableDefinition) { - listener.enterVariableDefinition(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitVariableDefinition) { - listener.exitVariableDefinition(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitVariableDefinition) { - return visitor.visitVariableDefinition(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class AssignStatementContext extends ParserRuleContext { - public Identifier(): TerminalNode { return this.getToken(CashScriptParser.Identifier, 0); } - public expression(): ExpressionContext { - return this.getRuleContext(0, ExpressionContext); - } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return CashScriptParser.RULE_assignStatement; } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterAssignStatement) { - listener.enterAssignStatement(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitAssignStatement) { - listener.exitAssignStatement(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitAssignStatement) { - return visitor.visitAssignStatement(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class TimeOpStatementContext extends ParserRuleContext { - public TxVar(): TerminalNode { return this.getToken(CashScriptParser.TxVar, 0); } - public expression(): ExpressionContext { - return this.getRuleContext(0, ExpressionContext); - } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return CashScriptParser.RULE_timeOpStatement; } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterTimeOpStatement) { - listener.enterTimeOpStatement(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitTimeOpStatement) { - listener.exitTimeOpStatement(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitTimeOpStatement) { - return visitor.visitTimeOpStatement(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class RequireStatementContext extends ParserRuleContext { - public expression(): ExpressionContext { - return this.getRuleContext(0, ExpressionContext); - } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return CashScriptParser.RULE_requireStatement; } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterRequireStatement) { - listener.enterRequireStatement(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitRequireStatement) { - listener.exitRequireStatement(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitRequireStatement) { - return visitor.visitRequireStatement(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class IfStatementContext extends ParserRuleContext { - public _ifBlock!: BlockContext; - public _elseBlock!: BlockContext; - public expression(): ExpressionContext { - return this.getRuleContext(0, ExpressionContext); - } - public block(): BlockContext[]; - public block(i: number): BlockContext; - public block(i?: number): BlockContext | BlockContext[] { - if (i === undefined) { - return this.getRuleContexts(BlockContext); - } else { - return this.getRuleContext(i, BlockContext); - } - } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return CashScriptParser.RULE_ifStatement; } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterIfStatement) { - listener.enterIfStatement(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitIfStatement) { - listener.exitIfStatement(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitIfStatement) { - return visitor.visitIfStatement(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class FunctionCallContext extends ParserRuleContext { - public Identifier(): TerminalNode { return this.getToken(CashScriptParser.Identifier, 0); } - public expressionList(): ExpressionListContext { - return this.getRuleContext(0, ExpressionListContext); - } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return CashScriptParser.RULE_functionCall; } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterFunctionCall) { - listener.enterFunctionCall(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitFunctionCall) { - listener.exitFunctionCall(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitFunctionCall) { - return visitor.visitFunctionCall(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class ExpressionListContext extends ParserRuleContext { - public expression(): ExpressionContext[]; - public expression(i: number): ExpressionContext; - public expression(i?: number): ExpressionContext | ExpressionContext[] { - if (i === undefined) { - return this.getRuleContexts(ExpressionContext); - } else { - return this.getRuleContext(i, ExpressionContext); - } - } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return CashScriptParser.RULE_expressionList; } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterExpressionList) { - listener.enterExpressionList(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitExpressionList) { - listener.exitExpressionList(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitExpressionList) { - return visitor.visitExpressionList(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class ExpressionContext extends ParserRuleContext { - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return CashScriptParser.RULE_expression; } - public copyFrom(ctx: ExpressionContext): void { - super.copyFrom(ctx); - } -} -export class ParenthesisedContext extends ExpressionContext { - public expression(): ExpressionContext { - return this.getRuleContext(0, ExpressionContext); - } - constructor(ctx: ExpressionContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterParenthesised) { - listener.enterParenthesised(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitParenthesised) { - listener.exitParenthesised(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitParenthesised) { - return visitor.visitParenthesised(this); - } else { - return visitor.visitChildren(this); - } - } -} -export class CastContext extends ExpressionContext { - public _castable!: ExpressionContext; - public _size!: ExpressionContext; - public typeName(): TypeNameContext { - return this.getRuleContext(0, TypeNameContext); - } - public expression(): ExpressionContext[]; - public expression(i: number): ExpressionContext; - public expression(i?: number): ExpressionContext | ExpressionContext[] { - if (i === undefined) { - return this.getRuleContexts(ExpressionContext); - } else { - return this.getRuleContext(i, ExpressionContext); - } - } - constructor(ctx: ExpressionContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterCast) { - listener.enterCast(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitCast) { - listener.exitCast(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitCast) { - return visitor.visitCast(this); - } else { - return visitor.visitChildren(this); - } - } -} -export class FunctionCallExpressionContext extends ExpressionContext { - public functionCall(): FunctionCallContext { - return this.getRuleContext(0, FunctionCallContext); - } - constructor(ctx: ExpressionContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterFunctionCallExpression) { - listener.enterFunctionCallExpression(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitFunctionCallExpression) { - listener.exitFunctionCallExpression(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitFunctionCallExpression) { - return visitor.visitFunctionCallExpression(this); - } else { - return visitor.visitChildren(this); - } - } -} -export class InstantiationContext extends ExpressionContext { - public Identifier(): TerminalNode { return this.getToken(CashScriptParser.Identifier, 0); } - public expressionList(): ExpressionListContext { - return this.getRuleContext(0, ExpressionListContext); - } - constructor(ctx: ExpressionContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterInstantiation) { - listener.enterInstantiation(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitInstantiation) { - listener.exitInstantiation(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitInstantiation) { - return visitor.visitInstantiation(this); - } else { - return visitor.visitChildren(this); - } - } -} -export class TupleIndexOpContext extends ExpressionContext { - public _index!: Token; - public expression(): ExpressionContext { - return this.getRuleContext(0, ExpressionContext); - } - public NumberLiteral(): TerminalNode { return this.getToken(CashScriptParser.NumberLiteral, 0); } - constructor(ctx: ExpressionContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterTupleIndexOp) { - listener.enterTupleIndexOp(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitTupleIndexOp) { - listener.exitTupleIndexOp(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitTupleIndexOp) { - return visitor.visitTupleIndexOp(this); - } else { - return visitor.visitChildren(this); - } - } -} -export class UnaryOpContext extends ExpressionContext { - public _op!: Token; - public expression(): ExpressionContext { - return this.getRuleContext(0, ExpressionContext); - } - constructor(ctx: ExpressionContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterUnaryOp) { - listener.enterUnaryOp(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitUnaryOp) { - listener.exitUnaryOp(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitUnaryOp) { - return visitor.visitUnaryOp(this); - } else { - return visitor.visitChildren(this); - } - } -} -export class BinaryOpContext extends ExpressionContext { - public _left!: ExpressionContext; - public _op!: Token; - public _right!: ExpressionContext; - public expression(): ExpressionContext[]; - public expression(i: number): ExpressionContext; - public expression(i?: number): ExpressionContext | ExpressionContext[] { - if (i === undefined) { - return this.getRuleContexts(ExpressionContext); - } else { - return this.getRuleContext(i, ExpressionContext); - } - } - constructor(ctx: ExpressionContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterBinaryOp) { - listener.enterBinaryOp(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitBinaryOp) { - listener.exitBinaryOp(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitBinaryOp) { - return visitor.visitBinaryOp(this); - } else { - return visitor.visitChildren(this); - } - } -} -export class ArrayContext extends ExpressionContext { - public expression(): ExpressionContext[]; - public expression(i: number): ExpressionContext; - public expression(i?: number): ExpressionContext | ExpressionContext[] { - if (i === undefined) { - return this.getRuleContexts(ExpressionContext); - } else { - return this.getRuleContext(i, ExpressionContext); - } - } - constructor(ctx: ExpressionContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterArray) { - listener.enterArray(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitArray) { - listener.exitArray(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitArray) { - return visitor.visitArray(this); - } else { - return visitor.visitChildren(this); - } - } -} -export class PreimageFieldContext extends ExpressionContext { - public PreimageField(): TerminalNode { return this.getToken(CashScriptParser.PreimageField, 0); } - constructor(ctx: ExpressionContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterPreimageField) { - listener.enterPreimageField(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitPreimageField) { - listener.exitPreimageField(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitPreimageField) { - return visitor.visitPreimageField(this); - } else { - return visitor.visitChildren(this); - } - } -} -export class IdentifierContext extends ExpressionContext { - public Identifier(): TerminalNode { return this.getToken(CashScriptParser.Identifier, 0); } - constructor(ctx: ExpressionContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterIdentifier) { - listener.enterIdentifier(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitIdentifier) { - listener.exitIdentifier(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitIdentifier) { - return visitor.visitIdentifier(this); - } else { - return visitor.visitChildren(this); - } - } -} -export class LiteralExpressionContext extends ExpressionContext { - public literal(): LiteralContext { - return this.getRuleContext(0, LiteralContext); - } - constructor(ctx: ExpressionContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterLiteralExpression) { - listener.enterLiteralExpression(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitLiteralExpression) { - listener.exitLiteralExpression(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitLiteralExpression) { - return visitor.visitLiteralExpression(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class LiteralContext extends ParserRuleContext { - public BooleanLiteral(): TerminalNode | undefined { return this.tryGetToken(CashScriptParser.BooleanLiteral, 0); } - public numberLiteral(): NumberLiteralContext | undefined { - return this.tryGetRuleContext(0, NumberLiteralContext); - } - public StringLiteral(): TerminalNode | undefined { return this.tryGetToken(CashScriptParser.StringLiteral, 0); } - public DateLiteral(): TerminalNode | undefined { return this.tryGetToken(CashScriptParser.DateLiteral, 0); } - public HexLiteral(): TerminalNode | undefined { return this.tryGetToken(CashScriptParser.HexLiteral, 0); } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return CashScriptParser.RULE_literal; } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterLiteral) { - listener.enterLiteral(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitLiteral) { - listener.exitLiteral(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitLiteral) { - return visitor.visitLiteral(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class NumberLiteralContext extends ParserRuleContext { - public NumberLiteral(): TerminalNode { return this.getToken(CashScriptParser.NumberLiteral, 0); } - public NumberUnit(): TerminalNode | undefined { return this.tryGetToken(CashScriptParser.NumberUnit, 0); } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return CashScriptParser.RULE_numberLiteral; } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterNumberLiteral) { - listener.enterNumberLiteral(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitNumberLiteral) { - listener.exitNumberLiteral(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitNumberLiteral) { - return visitor.visitNumberLiteral(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class TypeNameContext extends ParserRuleContext { - public Bytes(): TerminalNode { return this.getToken(CashScriptParser.Bytes, 0); } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return CashScriptParser.RULE_typeName; } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterTypeName) { - listener.enterTypeName(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitTypeName) { - listener.exitTypeName(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitTypeName) { - return visitor.visitTypeName(this); - } else { - return visitor.visitChildren(this); - } - } -} - - diff --git a/server/src/CashLinter/grammar/CashScriptVisitor.ts b/server/src/CashLinter/grammar/CashScriptVisitor.ts deleted file mode 100644 index ff4c973..0000000 --- a/server/src/CashLinter/grammar/CashScriptVisitor.ts +++ /dev/null @@ -1,299 +0,0 @@ -// Generated from grammar/CashScript.g4 by ANTLR 4.9.0-SNAPSHOT - - -import { ParseTreeVisitor } from "antlr4ts/tree/ParseTreeVisitor"; - -import { ParenthesisedContext } from "./CashScriptParser"; -import { CastContext } from "./CashScriptParser"; -import { FunctionCallExpressionContext } from "./CashScriptParser"; -import { InstantiationContext } from "./CashScriptParser"; -import { TupleIndexOpContext } from "./CashScriptParser"; -import { UnaryOpContext } from "./CashScriptParser"; -import { BinaryOpContext } from "./CashScriptParser"; -import { ArrayContext } from "./CashScriptParser"; -import { PreimageFieldContext } from "./CashScriptParser"; -import { IdentifierContext } from "./CashScriptParser"; -import { LiteralExpressionContext } from "./CashScriptParser"; -import { SourceFileContext } from "./CashScriptParser"; -import { PragmaDirectiveContext } from "./CashScriptParser"; -import { PragmaNameContext } from "./CashScriptParser"; -import { PragmaValueContext } from "./CashScriptParser"; -import { VersionConstraintContext } from "./CashScriptParser"; -import { VersionOperatorContext } from "./CashScriptParser"; -import { ContractDefinitionContext } from "./CashScriptParser"; -import { FunctionDefinitionContext } from "./CashScriptParser"; -import { ParameterListContext } from "./CashScriptParser"; -import { ParameterContext } from "./CashScriptParser"; -import { BlockContext } from "./CashScriptParser"; -import { StatementContext } from "./CashScriptParser"; -import { VariableDefinitionContext } from "./CashScriptParser"; -import { AssignStatementContext } from "./CashScriptParser"; -import { TimeOpStatementContext } from "./CashScriptParser"; -import { RequireStatementContext } from "./CashScriptParser"; -import { IfStatementContext } from "./CashScriptParser"; -import { FunctionCallContext } from "./CashScriptParser"; -import { ExpressionListContext } from "./CashScriptParser"; -import { ExpressionContext } from "./CashScriptParser"; -import { LiteralContext } from "./CashScriptParser"; -import { NumberLiteralContext } from "./CashScriptParser"; -import { TypeNameContext } from "./CashScriptParser"; - - -/** - * This interface defines a complete generic visitor for a parse tree produced - * by `CashScriptParser`. - * - * @param The return type of the visit operation. Use `void` for - * operations with no return type. - */ -export interface CashScriptVisitor extends ParseTreeVisitor { - /** - * Visit a parse tree produced by the `Parenthesised` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitParenthesised?: (ctx: ParenthesisedContext) => Result; - - /** - * Visit a parse tree produced by the `Cast` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitCast?: (ctx: CastContext) => Result; - - /** - * Visit a parse tree produced by the `FunctionCallExpression` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitFunctionCallExpression?: (ctx: FunctionCallExpressionContext) => Result; - - /** - * Visit a parse tree produced by the `Instantiation` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitInstantiation?: (ctx: InstantiationContext) => Result; - - /** - * Visit a parse tree produced by the `TupleIndexOp` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitTupleIndexOp?: (ctx: TupleIndexOpContext) => Result; - - /** - * Visit a parse tree produced by the `UnaryOp` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitUnaryOp?: (ctx: UnaryOpContext) => Result; - - /** - * Visit a parse tree produced by the `BinaryOp` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitBinaryOp?: (ctx: BinaryOpContext) => Result; - - /** - * Visit a parse tree produced by the `Array` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitArray?: (ctx: ArrayContext) => Result; - - /** - * Visit a parse tree produced by the `PreimageField` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitPreimageField?: (ctx: PreimageFieldContext) => Result; - - /** - * Visit a parse tree produced by the `Identifier` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitIdentifier?: (ctx: IdentifierContext) => Result; - - /** - * Visit a parse tree produced by the `LiteralExpression` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitLiteralExpression?: (ctx: LiteralExpressionContext) => Result; - - /** - * Visit a parse tree produced by `CashScriptParser.sourceFile`. - * @param ctx the parse tree - * @return the visitor result - */ - visitSourceFile?: (ctx: SourceFileContext) => Result; - - /** - * Visit a parse tree produced by `CashScriptParser.pragmaDirective`. - * @param ctx the parse tree - * @return the visitor result - */ - visitPragmaDirective?: (ctx: PragmaDirectiveContext) => Result; - - /** - * Visit a parse tree produced by `CashScriptParser.pragmaName`. - * @param ctx the parse tree - * @return the visitor result - */ - visitPragmaName?: (ctx: PragmaNameContext) => Result; - - /** - * Visit a parse tree produced by `CashScriptParser.pragmaValue`. - * @param ctx the parse tree - * @return the visitor result - */ - visitPragmaValue?: (ctx: PragmaValueContext) => Result; - - /** - * Visit a parse tree produced by `CashScriptParser.versionConstraint`. - * @param ctx the parse tree - * @return the visitor result - */ - visitVersionConstraint?: (ctx: VersionConstraintContext) => Result; - - /** - * Visit a parse tree produced by `CashScriptParser.versionOperator`. - * @param ctx the parse tree - * @return the visitor result - */ - visitVersionOperator?: (ctx: VersionOperatorContext) => Result; - - /** - * Visit a parse tree produced by `CashScriptParser.contractDefinition`. - * @param ctx the parse tree - * @return the visitor result - */ - visitContractDefinition?: (ctx: ContractDefinitionContext) => Result; - - /** - * Visit a parse tree produced by `CashScriptParser.functionDefinition`. - * @param ctx the parse tree - * @return the visitor result - */ - visitFunctionDefinition?: (ctx: FunctionDefinitionContext) => Result; - - /** - * Visit a parse tree produced by `CashScriptParser.parameterList`. - * @param ctx the parse tree - * @return the visitor result - */ - visitParameterList?: (ctx: ParameterListContext) => Result; - - /** - * Visit a parse tree produced by `CashScriptParser.parameter`. - * @param ctx the parse tree - * @return the visitor result - */ - visitParameter?: (ctx: ParameterContext) => Result; - - /** - * Visit a parse tree produced by `CashScriptParser.block`. - * @param ctx the parse tree - * @return the visitor result - */ - visitBlock?: (ctx: BlockContext) => Result; - - /** - * Visit a parse tree produced by `CashScriptParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitStatement?: (ctx: StatementContext) => Result; - - /** - * Visit a parse tree produced by `CashScriptParser.variableDefinition`. - * @param ctx the parse tree - * @return the visitor result - */ - visitVariableDefinition?: (ctx: VariableDefinitionContext) => Result; - - /** - * Visit a parse tree produced by `CashScriptParser.assignStatement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitAssignStatement?: (ctx: AssignStatementContext) => Result; - - /** - * Visit a parse tree produced by `CashScriptParser.timeOpStatement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitTimeOpStatement?: (ctx: TimeOpStatementContext) => Result; - - /** - * Visit a parse tree produced by `CashScriptParser.requireStatement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitRequireStatement?: (ctx: RequireStatementContext) => Result; - - /** - * Visit a parse tree produced by `CashScriptParser.ifStatement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitIfStatement?: (ctx: IfStatementContext) => Result; - - /** - * Visit a parse tree produced by `CashScriptParser.functionCall`. - * @param ctx the parse tree - * @return the visitor result - */ - visitFunctionCall?: (ctx: FunctionCallContext) => Result; - - /** - * Visit a parse tree produced by `CashScriptParser.expressionList`. - * @param ctx the parse tree - * @return the visitor result - */ - visitExpressionList?: (ctx: ExpressionListContext) => Result; - - /** - * Visit a parse tree produced by `CashScriptParser.expression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitExpression?: (ctx: ExpressionContext) => Result; - - /** - * Visit a parse tree produced by `CashScriptParser.literal`. - * @param ctx the parse tree - * @return the visitor result - */ - visitLiteral?: (ctx: LiteralContext) => Result; - - /** - * Visit a parse tree produced by `CashScriptParser.numberLiteral`. - * @param ctx the parse tree - * @return the visitor result - */ - visitNumberLiteral?: (ctx: NumberLiteralContext) => Result; - - /** - * Visit a parse tree produced by `CashScriptParser.typeName`. - * @param ctx the parse tree - * @return the visitor result - */ - visitTypeName?: (ctx: TypeNameContext) => Result; -} - diff --git a/server/src/compilerErrors.ts b/server/src/compilerErrors.ts deleted file mode 100644 index 5eeb921..0000000 --- a/server/src/compilerErrors.ts +++ /dev/null @@ -1,20 +0,0 @@ -import {CashCompiler} from "cashscript"; - -export default class CompilerErrors{ - - static checkErrors(file:string){ - - var s = ""; - (function(){ - var oldLog = console.log; - console.log = function (message:any){ - s += message; - }; - - CashCompiler.compileString(file); - - console.log = oldLog; - })(); - - } -} \ No newline at end of file diff --git a/server/src/completionService.ts b/server/src/completionService.ts deleted file mode 100644 index a994b4a..0000000 --- a/server/src/completionService.ts +++ /dev/null @@ -1,344 +0,0 @@ -import { CompletionItem, CompletionItemKind, Position, Range, TextDocumentIdentifier, TextDocumentPositionParams } from 'vscode-languageserver'; -import { TextDocument } from 'vscode-languageserver-textdocument'; - -export default class CompletionService { - - protected currentIndex: number = 0; - private text: string = ""; - private offset:number = 0; - constructor(public doc: TextDocument|undefined, public pos: Position){ - this.text = doc?.getText() || ""; - this.offset = doc?.offsetAt(pos) || 0; - } - - - - getAllCompletions(): CompletionItem[]{ - console.log("completion TRIGG") - let completions:CompletionItem[] = []; - - //completions = completions.concat(this.getDotCompletions()); - //if(completions.length > 0) return completions; - if(this.isDot()){ - return this.getDotCompletions(); - } - - completions = completions.concat(this.getVarCompletions()); - completions = completions.concat(this.getConditionalCompletions()); - completions = completions.concat(this.getControlCompletions()); - completions = completions.concat(this.getGlobalFunctionCompletions()); - completions = completions.concat(this.getOutputCompletions()); - completions = completions.concat(this.getTypesCompletions()); - completions = completions.concat(this.getGlobalConstantsCompletions()); - - return completions; - } - - protected getCharRange(begin:number, end:number){ - return this.text.substring(begin, end); - } - - protected isDot():boolean{ - const offset:number = this.doc?.offsetAt(this.pos) || 0; - const t = this.getCharRange(offset-1, offset); - if(t === '.') return true; - return false; - } - - - DOT_COMPLETIONS:{[key:string]:CompletionItem[]} = { - tx:[ - { - label:"time", - kind:CompletionItemKind.Field, - }, - { - label:"age", - kind:CompletionItemKind.Field - }, - { - label:"version", - kind:CompletionItemKind.Field - }, - { - label:"hashPrevouts", - kind:CompletionItemKind.Field - }, - { - label:"hashSequence", - kind:CompletionItemKind.Field - }, - { - label:"outpoint", - kind:CompletionItemKind.Field - }, - { - label:"bytecode", - kind:CompletionItemKind.Field - }, - { - label:"value", - kind:CompletionItemKind.Field - }, - { - label:"sequence", - kind:CompletionItemKind.Field - }, - { - label:"hashOutputs", - kind:CompletionItemKind.Field - }, - { - label:"locktime", - kind:CompletionItemKind.Field - }, - { - label:"hashtype", - kind:CompletionItemKind.Field - }, - ] - } - - protected getDotCompletions():CompletionItem[]{ - - const re = /(\w+).$/ // EX: "tx." - const range:Range = { - start:{character:0, line:this.pos.line}, - end:this.pos - } - const text = this.doc?.getText(range); - var arr, keyword; - if((arr=text?.match(re))){ - keyword = arr[1]; - console.log("keyword: ", keyword); - - return this.DOT_COMPLETIONS[keyword]; - } - - return [] - } - - protected getVarCompletions():CompletionItem[]{ - - const re = /(int|bool|string|pubkey|sig|datasig|bytes)\s+(\w+)/g; - const completions:CompletionItem[] = []; - for(const m of this.text.matchAll(re)){ - completions.push({ - label:m[2], - kind:CompletionItemKind.Variable - }); - } - - return completions; - } - - protected getConditionalCompletions():CompletionItem[]{ - const completions:CompletionItem[] = []; - if(!this.text.includes("contract")){ - completions.push({ - label:"contract", - detail:"Instantiate a new Contract", - insertText:"contract ${1:ContractName}($2) {\n\n}", - insertTextFormat:2 - }); - } - - return completions; - } - - protected getControlCompletions():CompletionItem[]{ - const words = ["pragma", "cashscript", "if", "else", "require"] - const completions = []; - for (let i = 0; i < words.length; i++) { - this.currentIndex += 1; - completions.push( - CompletionItem.create(words[i]) - ); - } - return completions; - } - - protected getGlobalFunctionCompletions():CompletionItem[]{ - const words = ["abs","min","max","within", - "ripemd160", "sha1", "sha256", "hash160","hash256", - "checkSig", "checkMultiSig", "checkDataSig"] - - /* - const comps: CompletionItem[] = [ - { - label:"abs", - detail: 'int abs(int a): Returns the absolute value of argument a.', - insertText: 'abs(${1:value})', - insertTextFormat: 2, - }, - { - label:"min", - detail:"int min(int a, int b): Returns the minimum value of arguments `a` and `b`.", - insertText:"min(${1:a}, ${2:b})", - insertTextFormat:2 - }, - { - label:"max", - detail:"int max(int a, int b): Returns the maximum value of arguments `a` and `b`.", - insertText:"max(${1:a}, ${2:b})", - insertTextFormat:2 - }, - { - label:"within", - detail:"bool within(int x, int lower, int upper): Returns `true` if and only if `x >= lower && x < upper`.", - insertText:"within(${1:x}, ${2:lower}, ${3:upper})", - insertTextFormat:2 - }, - { - label:"ripemd160", - detail:"bytes20 ripemd160(any x): Returns the SHA-1 hash of argument `x`.", - insertText:"ripemd160(${1:x})", - insertTextFormat:2 - }, - { - label:"sha256", - detail:"bytes32 sha256(any x): Returns the SHA-256 hash of argument `x`.", - insertText:"sha256(${1:x})", - insertTextFormat:2 - }, - { - label:"hash160", - detail:"bytes20 hash160(any x): Returns the RIPEMD-160 hash of the SHA-256 hash of argument `x`.", - insertText:"hash160(${1:x})", - insertTextFormat:2 - }, - { - label:"hash256", - detail:"bytes32 hash256(any x): bytes32 hash256(any x)", - insertText:"hash256(${1:x})", - insertTextFormat:2 - }, - { - label:"checkMultiSig", - detail:"bool checkMultiSig(sig[] sigs, pubkey[] pks): Performs a multi-signature check using a list of transaction signatures and public keys.", - insertText:"checkMultiSig(${1:sigs}, ${2:pks})", - insertTextFormat:2 - }, - { - label:"checkDataSig", - detail:"bool checkDataSig(datasig s, bytes msg, pubkey pk): Checks that sig `s` is a valid signature for message `msg` and matches with public key `pk`.", - insertText:"checkDataSig(${1:signature}, ${2:message}, ${3:pubkey})", - insertTextFormat:2 - } - ]*/ - - const comps: CompletionItem[] = [ - { - label:"abs", - detail: 'int abs(int a): Returns the absolute value of argument a.', - insertText: 'abs', - insertTextFormat: 2, - }, - { - label:"min", - detail:"int min(int a, int b): Returns the minimum value of arguments `a` and `b`.", - insertText:"min", - insertTextFormat:2 - }, - { - label:"max", - detail:"int max(int a, int b): Returns the maximum value of arguments `a` and `b`.", - insertText:"max", - insertTextFormat:2 - }, - { - label:"within", - detail:"bool within(int x, int lower, int upper): Returns `true` if and only if `x >= lower && x < upper`.", - insertText:"within", - insertTextFormat:2 - }, - { - label:"ripemd160", - detail:"bytes20 ripemd160(any x): Returns the SHA-1 hash of argument `x`.", - insertText:"ripemd160", - insertTextFormat:2 - }, - { - label:"sha256", - detail:"bytes32 sha256(any x): Returns the SHA-256 hash of argument `x`.", - insertText:"sha256", - insertTextFormat:2 - }, - { - label:"hash160", - detail:"bytes20 hash160(any x): Returns the RIPEMD-160 hash of the SHA-256 hash of argument `x`.", - insertText:"hash160", - insertTextFormat:2 - }, - { - label:"hash256", - detail:"bytes32 hash256(any x): bytes32 hash256(any x)", - insertText:"hash256", - insertTextFormat:2 - }, - { - label:"checkMultiSig", - detail:"bool checkMultiSig(sig[] sigs, pubkey[] pks): Performs a multi-signature check using a list of transaction signatures and public keys.", - insertText:"checkMultiSig", - insertTextFormat:2 - }, - { - label:"checkDataSig", - detail:"bool checkDataSig(datasig s, bytes msg, pubkey pk): Checks that sig `s` is a valid signature for message `msg` and matches with public key `pk`.", - insertText:"checkDataSig", - insertTextFormat:2 - } - ] - - return comps; - } - - protected getOutputCompletions():CompletionItem[]{ - const words = ["OutputP2PKH", "OutputP2PSH", "OutputNullData"] - const completions = []; - for (let i = 0; i < words.length; i++) { - this.currentIndex += 1; - completions.push( - { - label: words[i], - kind: CompletionItemKind.Keyword, - data: i+1 - } - ); - } - return completions; - } - - protected getTypesCompletions():CompletionItem[]{ - const words = ["int", "bool", "string", "bytes", "pubkey", "sig", "datasig", "true", "false", "date"] - const completions = []; - for (let i = 0; i < words.length; i++) { - this.currentIndex += 1; - completions.push( - { - label: words[i], - kind: CompletionItemKind.Keyword, - data: i+1 - } - ); - } - return completions; - } - - protected getGlobalConstantsCompletions():CompletionItem[]{ - const words = ["sats", "satoshis", "finney", "bit", "bitcoin", "seconds", "minutes", "hours", "days", "weeks"]; - const completions = []; - for (let i = 0; i < words.length; i++) { - this.currentIndex += 1; - completions.push( - { - label: words[i], - kind: CompletionItemKind.Keyword, - data: i+1 - } - ); - } - return completions; - } - -} \ No newline at end of file diff --git a/server/src/server.ts b/server/src/server.ts deleted file mode 100644 index 960df5f..0000000 --- a/server/src/server.ts +++ /dev/null @@ -1,265 +0,0 @@ -import { - createConnection, - TextDocuments, - Diagnostic, - DiagnosticSeverity, - ProposedFeatures, - InitializeParams, - DidChangeConfigurationNotification, - CompletionItem, - CompletionItemKind, - TextDocumentPositionParams, - TextDocumentSyncKind, - InitializeResult -} from 'vscode-languageserver/node'; - -import {Position, TextDocument} from 'vscode-languageserver-textdocument'; -import CompletionService from './completionService'; -import CompilerErrors from './compilerErrors'; -import CashLinter from './CashLinter/CashLinter'; - -// Create a connection for the server, using Node's IPC as a transport. -// Also include all preview / proposed LSP features. -let connection = createConnection(ProposedFeatures.all); - -// Create a simple text document manager. -let documents: TextDocuments = new TextDocuments(TextDocument); - -let hasConfigurationCapability: boolean = false; -let hasWorkspaceFolderCapability: boolean = false; -let hasDiagnosticRelatedInformationCapability: boolean = false; - -let isValidatingFile: boolean = false; -let validationDelay: number = 750; - -connection.onInitialize((params: InitializeParams) => { - let capabilities = params.capabilities; - - // Does the client support the `workspace/configuration` request? - // If not, we fall back using global settings. - hasConfigurationCapability = !!( - capabilities.workspace && !!capabilities.workspace.configuration - ); - hasWorkspaceFolderCapability = !!( - capabilities.workspace && !!capabilities.workspace.workspaceFolders - ); - hasDiagnosticRelatedInformationCapability = !!( - capabilities.textDocument && - capabilities.textDocument.publishDiagnostics && - capabilities.textDocument.publishDiagnostics.relatedInformation - ); - - const result: InitializeResult = { - capabilities: { - textDocumentSync: TextDocumentSyncKind.Incremental, - // Tell the client that this server supports code completion. - completionProvider: { - resolveProvider: true, - triggerCharacters:[".",] - }, - } - }; - if (hasWorkspaceFolderCapability) { - result.capabilities.workspace = { - workspaceFolders: { - supported: true - } - }; - } - return result; -}); - - - -connection.onInitialized(() => { - if (hasConfigurationCapability) { - // Register for all configuration changes. - connection.client.register(DidChangeConfigurationNotification.type, undefined); - } - if (hasWorkspaceFolderCapability) { - connection.workspace.onDidChangeWorkspaceFolders(_event => { - connection.console.log('Workspace folder change event received.'); - }); - } -}); - -// The example settings -interface ExampleSettings { - maxNumberOfProblems: number; -} - -// The global settings, used when the `workspace/configuration` request is not supported by the client. -// Please note that this is not the case when using this server with the client provided in this example -// but could happen with other clients. -const defaultSettings: ExampleSettings = { maxNumberOfProblems: 1000 }; -let globalSettings: ExampleSettings = defaultSettings; - -// Cache the settings of all open documents -let documentSettings: Map> = new Map(); - -connection.onDidChangeConfiguration(change => { - if (hasConfigurationCapability) { - // Reset all cached document settings - documentSettings.clear(); - } else { - globalSettings = ( - (change.settings.languageServerExample || defaultSettings) - ); - } - - // Revalidate all open text documents - documents.all().forEach(validateTextDocument); -}); - -function getDocumentSettings(resource: string): Thenable { - if (!hasConfigurationCapability) { - return Promise.resolve(globalSettings); - } - let result = documentSettings.get(resource); - if (!result) { - result = connection.workspace.getConfiguration({ - scopeUri: resource, - section: 'languageServerExample' - }); - documentSettings.set(resource, result); - } - return result; -} - -// Only keep settings for open documents -documents.onDidClose(e => { - documentSettings.delete(e.document.uri); -}); - - -function validate(doc:TextDocument){ - console.log("VALIDATE") - isValidatingFile = false; -} - - -// The content of a text document has changed. This event is emitted -// when the text document first opened or when its content has changed. -documents.onDidChangeContent(change => { - - if(!isValidatingFile){ - isValidatingFile = true; - setTimeout(() => validateTextDocument(change.document), validationDelay); - } - - // validateTextDocument(change.document); - // console.log("CHANGE") - // if(!isValidatingFile){ - // isValidatingFile = true; - // setTimeout(() => validateTextDocument(change.document), validationDelay); - // } - - //validateTextDocument(change.document); -}); - -async function validateTextDocument(textDocument: TextDocument): Promise { - // In this simple example we get the settings for every validate run. - let settings = await getDocumentSettings(textDocument.uri); - isValidatingFile = false; - - console.log("validate...") - const code = textDocument.getText(); - const diagnostics = CashLinter.getDiagnostics(code); - connection.sendDiagnostics({ uri: textDocument.uri, diagnostics }); - - // The validator creates diagnostics for all uppercase words length 2 and more - // let text = textDocument.getText(); - - //CompilerErrors.checkErrors(text); - - - - /* - let pattern = /\b[A-Z]{2,}\b/g; - let m: RegExpExecArray | null; - - let problems = 0; - let diagnostics: Diagnostic[] = []; - while ((m = pattern.exec(text)) && problems < settings.maxNumberOfProblems) { - problems++; - let diagnostic: Diagnostic = { - severity: DiagnosticSeverity.Warning, - range: { - start: textDocument.positionAt(m.index), - end: textDocument.positionAt(m.index + m[0].length) - }, - message: `${m[0]} is all uppercase.`, - source: 'ex' - }; - if (hasDiagnosticRelatedInformationCapability) { - diagnostic.relatedInformation = [ - { - location: { - uri: textDocument.uri, - range: Object.assign({}, diagnostic.range) - }, - message: 'Spelling matters' - }, - { - location: { - uri: textDocument.uri, - range: Object.assign({}, diagnostic.range) - }, - message: 'Particularly for names' - } - ]; - } - diagnostics.push(diagnostic); - } - - // Send the computed diagnostics to VSCode. - connection.sendDiagnostics({ uri: textDocument.uri, diagnostics });*/ -} - -connection.onDidChangeWatchedFiles(_change => { - // Monitored files have change in VSCode - connection.console.log('We received an file change event'); -}); - -// This handler provides the initial list of the completion items. -connection.onCompletion( - (_textDocumentPosition: TextDocumentPositionParams): CompletionItem[] => { - // The pass parameter contains the position of the text document in - // which code complete got requested. For the example we ignore this - // info and always provide the same completion items. - const doc: TextDocument|undefined = documents.get(_textDocumentPosition.textDocument.uri); - const pos: Position = _textDocumentPosition.position; - const cs = new CompletionService(doc, pos); - return cs.getAllCompletions(); - } -); - - - -// connection.onHover( -// () => { - -// } -// ) - -// This handler resolves additional information for the item selected in -// the completion list. -connection.onCompletionResolve( - (item: CompletionItem): CompletionItem => { - if (item.data === 1) { - item.detail = 'TypeScript details'; - item.documentation = 'TypeScript documentation'; - } else if (item.data === 2) { - item.detail = 'JavaScript details'; - item.documentation = 'JavaScript documentation'; - } - return item; - } -); - -// Make the text document manager listen on the connection -// for open, change and close text document events -documents.listen(connection); - -// Listen on the connection -connection.listen(); diff --git a/server/tsconfig.json b/server/tsconfig.json deleted file mode 100644 index d97e9a2..0000000 --- a/server/tsconfig.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "compilerOptions": { - "target": "es2019", - "lib": ["ES2020", - "es2017", - "esnext.bigint", - "dom", - ], - "esModuleInterop": true, - "module": "commonjs", - "moduleResolution": "node", - "sourceMap": true, - "strict": true, - "outDir": "out", - "rootDir": "src" - }, - "include": ["src"], - "exclude": ["node_modules", ".vscode-test"] -} diff --git a/snippets/cashscript.snippets.json b/snippets/cashscript.snippets.json index 62279b6..eecf663 100644 --- a/snippets/cashscript.snippets.json +++ b/snippets/cashscript.snippets.json @@ -5,6 +5,11 @@ "description":"Set semantic version" }, + "Create Contract": { + "prefix":"contract", + "body":"contract ${1:ContractName}($2) {\n\n}", + "description":"Creates a contract" + }, "Function Statement" : { "prefix":"function", diff --git a/vscode-cashscript/src/CashscriptCompletionProvider.ts b/src/CashscriptCompletionProvider.ts similarity index 96% rename from vscode-cashscript/src/CashscriptCompletionProvider.ts rename to src/CashscriptCompletionProvider.ts index aae02e0..1d0f140 100644 --- a/vscode-cashscript/src/CashscriptCompletionProvider.ts +++ b/src/CashscriptCompletionProvider.ts @@ -171,7 +171,7 @@ export default class CashscriptCompletionProvider implements vscode.CompletionIt "ripemd160", "sha1", "sha256", "hash160","hash256", "checkSig", "checkMultiSig", "checkDataSig"] - const comps: CompletionItem[] = [ + return [ { label:"abs", detail: 'int abs(int a): Returns the absolute value of argument a.', @@ -220,6 +220,12 @@ export default class CashscriptCompletionProvider implements vscode.CompletionIt insertText:"hash256", // insertTextFormat:2 }, + { + label:"checkSig", + detail:"bool checksig(sig s, pubkey pk): Checks that transaction signature `s` is valid for the current transaction and matches with public key `pk`.", + insertText:"checkSig", + // insertTextFormat:2 + }, { label:"checkMultiSig", detail:"bool checkMultiSig(sig[] sigs, pubkey[] pks): Performs a multi-signature check using a list of transaction signatures and public keys.", @@ -233,8 +239,6 @@ export default class CashscriptCompletionProvider implements vscode.CompletionIt // insertTextFormat:2 } ] - - return comps; } protected getOutputCompletions():CompletionItem[]{ diff --git a/vscode-cashscript/src/CashscriptHoverProvider.ts b/src/CashscriptHoverProvider.ts similarity index 100% rename from vscode-cashscript/src/CashscriptHoverProvider.ts rename to src/CashscriptHoverProvider.ts diff --git a/vscode-cashscript/src/CashscriptLinter/CashscriptLinter.ts b/src/CashscriptLinter/CashscriptLinter.ts similarity index 100% rename from vscode-cashscript/src/CashscriptLinter/CashscriptLinter.ts rename to src/CashscriptLinter/CashscriptLinter.ts diff --git a/server/src/CashLinter/ErrorListeners.ts b/src/CashscriptLinter/ErrorListeners.ts similarity index 100% rename from server/src/CashLinter/ErrorListeners.ts rename to src/CashscriptLinter/ErrorListeners.ts diff --git a/comp/grammar/CashScript.g4 b/src/CashscriptLinter/grammar/CashScript.g4 similarity index 100% rename from comp/grammar/CashScript.g4 rename to src/CashscriptLinter/grammar/CashScript.g4 diff --git a/comp/grammar/CashScript.interp b/src/CashscriptLinter/grammar/CashScript.interp similarity index 100% rename from comp/grammar/CashScript.interp rename to src/CashscriptLinter/grammar/CashScript.interp diff --git a/comp/grammar/CashScript.tokens b/src/CashscriptLinter/grammar/CashScript.tokens similarity index 100% rename from comp/grammar/CashScript.tokens rename to src/CashscriptLinter/grammar/CashScript.tokens diff --git a/comp/grammar/CashScriptLexer.interp b/src/CashscriptLinter/grammar/CashScriptLexer.interp similarity index 100% rename from comp/grammar/CashScriptLexer.interp rename to src/CashscriptLinter/grammar/CashScriptLexer.interp diff --git a/comp/grammar/CashScriptLexer.tokens b/src/CashscriptLinter/grammar/CashScriptLexer.tokens similarity index 100% rename from comp/grammar/CashScriptLexer.tokens rename to src/CashscriptLinter/grammar/CashScriptLexer.tokens diff --git a/comp/grammar/CashScriptLexer.ts b/src/CashscriptLinter/grammar/CashScriptLexer.ts similarity index 100% rename from comp/grammar/CashScriptLexer.ts rename to src/CashscriptLinter/grammar/CashScriptLexer.ts diff --git a/comp/grammar/CashScriptListener.ts b/src/CashscriptLinter/grammar/CashScriptListener.ts similarity index 100% rename from comp/grammar/CashScriptListener.ts rename to src/CashscriptLinter/grammar/CashScriptListener.ts diff --git a/comp/grammar/CashScriptParser.ts b/src/CashscriptLinter/grammar/CashScriptParser.ts similarity index 100% rename from comp/grammar/CashScriptParser.ts rename to src/CashscriptLinter/grammar/CashScriptParser.ts diff --git a/comp/grammar/CashScriptVisitor.ts b/src/CashscriptLinter/grammar/CashScriptVisitor.ts similarity index 100% rename from comp/grammar/CashScriptVisitor.ts rename to src/CashscriptLinter/grammar/CashScriptVisitor.ts diff --git a/vscode-cashscript/src/CashscriptSignatureCompleter.ts b/src/CashscriptSignatureCompleter.ts similarity index 100% rename from vscode-cashscript/src/CashscriptSignatureCompleter.ts rename to src/CashscriptSignatureCompleter.ts diff --git a/client/src/LanguageDesc.ts b/src/LanguageDesc.ts similarity index 100% rename from client/src/LanguageDesc.ts rename to src/LanguageDesc.ts diff --git a/vscode-cashscript/src/extension.ts b/src/extension.ts similarity index 100% rename from vscode-cashscript/src/extension.ts rename to src/extension.ts diff --git a/vscode-cashscript/src/server.ts b/src/server.ts similarity index 100% rename from vscode-cashscript/src/server.ts rename to src/server.ts diff --git a/syntaxes/cash.tmGrammar.json b/syntaxes/cash.tmGrammar.json deleted file mode 100644 index d4471c3..0000000 --- a/syntaxes/cash.tmGrammar.json +++ /dev/null @@ -1,198 +0,0 @@ -{ - "scopeName": "source.cash", - "patterns": [ - {"include":"#comment"}, - {"include":"#string"}, - {"include":"#unit"}, - {"include":"#type"}, - {"include":"#control"}, - {"include":"#function"}, - {"include":"#declaration"}, - - {"include":"#variable"}, - {"include":"#numeric"} - ], - "repository": { - - "comment": { - "patterns": [{ "include": "#comment-line" }, {"include":"#comment-block"}] - }, - "comment-line": { - "match": "(? Tip: Many popular extensions utilize animations. This is an excellent way to show off your extension! We recommend short, focused animations that are easy to follow. - -## Requirements - -If you have any requirements or dependencies, add a section describing those and how to install and configure them. - -## Extension Settings - -Include if your extension adds any VS Code settings through the `contributes.configuration` extension point. - -For example: - -This extension contributes the following settings: - -* `myExtension.enable`: enable/disable this extension -* `myExtension.thing`: set to `blah` to do something - -## Known Issues - -Calling out known issues can help limit users opening duplicate issues against your extension. - -## Release Notes - -Users appreciate release notes as you update your extension. - -### 1.0.0 - -Initial release of ... - -### 1.0.1 - -Fixed issue #. - -### 1.1.0 - -Added features X, Y, and Z. - ------------------------------------------------------------------------------------------------------------ - -## Working with Markdown - -**Note:** You can author your README using Visual Studio Code. Here are some useful editor keyboard shortcuts: - -* Split the editor (`Cmd+\` on macOS or `Ctrl+\` on Windows and Linux) -* Toggle preview (`Shift+CMD+V` on macOS or `Shift+Ctrl+V` on Windows and Linux) -* Press `Ctrl+Space` (Windows, Linux) or `Cmd+Space` (macOS) to see a list of Markdown snippets - -### For more information - -* [Visual Studio Code's Markdown Support](http://code.visualstudio.com/docs/languages/markdown) -* [Markdown Syntax Reference](https://help.github.com/articles/markdown-basics/) - -**Enjoy!** diff --git a/vscode-cashscript/cashscript.configuration.json b/vscode-cashscript/cashscript.configuration.json deleted file mode 100644 index 3227c2e..0000000 --- a/vscode-cashscript/cashscript.configuration.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "comments": { - "lineComment": "//", - "blockComment": [ "/*", "*/" ] - }, - "brackets": [ - ["{", "}"], - ["[", "]"], - ["(", ")"] - ], - "autoClosingPairs": [ - { "open": "{", "close": "}" }, - { "open": "[", "close": "]" }, - { "open": "(", "close": ")" }, - { "open": "'", "close": "'", "notIn": ["string", "comment"] }, - { "open": "\"", "close": "\"", "notIn": ["string"] }, - { "open": "/*", "close": " */", "notIn": ["string"] } - ], - "surroundingPairs": [ - ["{", "}"], - ["[", "]"], - ["(", ")"], - ["\"", "\""], - ["'", "'"] - ] -} \ No newline at end of file diff --git a/vscode-cashscript/package-lock.json b/vscode-cashscript/package-lock.json deleted file mode 100644 index fde33c4..0000000 --- a/vscode-cashscript/package-lock.json +++ /dev/null @@ -1,568 +0,0 @@ -{ - "name": "vscode-cashscript", - "version": "0.0.1", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@bitauth/libauth": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/@bitauth/libauth/-/libauth-1.18.1.tgz", - "integrity": "sha512-s7evdGbdGAnGkv7xt6mCbcWTTNvburc1Z9EX/8JKwcRLqofjDs7VAEz+RP3a8OGEo4MWFV6Ydqu/BeJjIA7Kdg==" - }, - "@cashscript/utils": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/@cashscript/utils/-/utils-0.6.3.tgz", - "integrity": "sha512-DwWxgAM/XRmpGaeiQ0qZUQKw0C+eDNnjvkwo6hWux1JCY5Sv/HyysEIF1wk+mpAmV4nzpnfuAsU6muu/aF7B0w==", - "requires": { - "@bitauth/libauth": "^1.18.1", - "hash.js": "^1.1.7" - } - }, - "@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true - }, - "@types/node": { - "version": "15.12.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-15.12.2.tgz", - "integrity": "sha512-zjQ69G564OCIWIOHSXyQEEDpdpGl+G348RAKY0XXy9Z5kU9Vzv1GMNnkar/ZJ8dzXB3COzD9Mo9NtRZ4xfgUww==" - }, - "@types/vscode": { - "version": "1.56.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.56.0.tgz", - "integrity": "sha512-Q5VmQxOx+L1Y6lIJiGcJzwcyV3pQo/eiW8P+7sNLhFI16tJCwtua2DLjHRcpjbCLNVYpQM73kzfFo1Z0HyP9eQ==", - "dev": true - }, - "@types/ws": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.4.tgz", - "integrity": "sha512-d/7W23JAXPodQNbOZNXvl2K+bqAQrCMwlh/nuQsPSQk6Fq0opHoPrUw43aHsvSbIiQPr8Of2hkFbnz1XBFVyZQ==", - "requires": { - "@types/node": "*" - } - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "requires": { - "debug": "4" - } - }, - "antlr4ts": { - "version": "0.5.0-alpha.4", - "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", - "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==" - }, - "async-mutex": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.2.6.tgz", - "integrity": "sha512-Hs4R+4SPgamu6rSGW8C7cV9gaWUKEHykfzCCvIRuaVv636Ju10ZdeUbvb4TBEW0INuq2DHZqXbK4Nd3yG4RaRw==", - "requires": { - "tslib": "^2.0.0" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "big-integer": { - "version": "1.6.48", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz", - "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==", - "dev": true - }, - "binary": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", - "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=", - "dev": true, - "requires": { - "buffers": "~0.1.1", - "chainsaw": "~0.1.0" - } - }, - "bip68": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/bip68/-/bip68-1.0.4.tgz", - "integrity": "sha512-O1htyufFTYy3EO0JkHg2CLykdXEtV2ssqw47Gq9A0WByp662xpJnMEB9m43LZjsSDjIAOozWRExlFQk2hlV1XQ==" - }, - "bitcoin-rpc-promise-retry": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/bitcoin-rpc-promise-retry/-/bitcoin-rpc-promise-retry-1.3.0.tgz", - "integrity": "sha512-xhldBhYwiUNY4spzkXXcU9LEq+nbSKJ5tvYWEUe/XTCe1VYoe8tEb5jJq4MBA2d+5egiUOA+P1QTTYm1FqPtOg==", - "requires": { - "bitcoind-rpc": "^0.8.0" - } - }, - "bitcoind-rpc": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/bitcoind-rpc/-/bitcoind-rpc-0.8.1.tgz", - "integrity": "sha512-NfhykAT/x/P1SOiog8UzltvTiv6A6d2X5VWJ3UjGeAqFLXv+IYHy+E4fFCBmgQRyIb1EIcyIZK1SVpSOGRHsaw==" - }, - "bluebird": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", - "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "buffer-indexof-polyfill": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", - "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==", - "dev": true - }, - "buffers": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", - "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=", - "dev": true - }, - "cashc": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/cashc/-/cashc-0.6.3.tgz", - "integrity": "sha512-Jd19Em2y3fMK4Xtr9citQqVRlSUMjZG+PVPRSGM5BVcJaYuLOLzHL1iAXAz+RIvkMvaFMaownpOP4yFyMJRWIA==", - "requires": { - "@bitauth/libauth": "^1.18.1", - "@cashscript/utils": "^0.6.3", - "antlr4ts": "^0.5.0-alpha.4", - "commander": "^7.1.0", - "semver": "^7.3.4" - }, - "dependencies": { - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "cashscript": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/cashscript/-/cashscript-0.6.3.tgz", - "integrity": "sha512-ISWioARsX/TnUJrcU6w0WsBW5HCY5GKxM2F065AovGf9z7XhmK+UeQnch+mKVUzV96BzPw0HUuTAQpDvFqbMeg==", - "requires": { - "@bitauth/libauth": "^1.18.1", - "@cashscript/utils": "^0.6.3", - "bip68": "^1.0.4", - "bitcoin-rpc-promise-retry": "^1.3.0", - "delay": "^5.0.0", - "electrum-cash": "^2.0.6" - } - }, - "chainsaw": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", - "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=", - "dev": true, - "requires": { - "traverse": ">=0.3.0 <0.4" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "requires": { - "ms": "2.1.2" - } - }, - "delay": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/delay/-/delay-5.0.0.tgz", - "integrity": "sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==" - }, - "duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", - "dev": true, - "requires": { - "readable-stream": "^2.0.2" - } - }, - "electrum-cash": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/electrum-cash/-/electrum-cash-2.0.7.tgz", - "integrity": "sha512-AHgrJR7WVdo8mWH3E1Us1VygOUvLuJVFJnItMbj/thsApqecqxZznzhlqMjc+mHhole6S1xq/nOkmRo5OAtRow==", - "requires": { - "@types/ws": "^7.2.6", - "async-mutex": "^0.2.4", - "debug": "^4.1.1", - "isomorphic-ws": "^4.0.1", - "ws": "^7.3.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fstream": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", - "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - }, - "dependencies": { - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", - "dev": true - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - } - }, - "https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isomorphic-ws": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz", - "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==" - }, - "listenercount": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", - "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=", - "dev": true - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "traverse": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", - "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=", - "dev": true - }, - "tslib": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", - "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" - }, - "typescript": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.2.tgz", - "integrity": "sha512-zZ4hShnmnoVnAHpVHWpTcxdv7dWP60S2FsydQLV8V5PbS3FifjWFFRiHSWpDJahly88PRyV5teTSLoq4eG7mKw==", - "dev": true - }, - "unzipper": { - "version": "0.10.11", - "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz", - "integrity": "sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==", - "dev": true, - "requires": { - "big-integer": "^1.6.17", - "binary": "~0.3.0", - "bluebird": "~3.4.1", - "buffer-indexof-polyfill": "~1.0.0", - "duplexer2": "~0.1.4", - "fstream": "^1.0.12", - "graceful-fs": "^4.2.2", - "listenercount": "~1.0.1", - "readable-stream": "~2.3.6", - "setimmediate": "~1.0.4" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "vscode-jsonrpc": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", - "integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==" - }, - "vscode-languageclient": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-7.0.0.tgz", - "integrity": "sha512-P9AXdAPlsCgslpP9pRxYPqkNYV7Xq8300/aZDpO35j1fJm/ncize8iGswzYlcvFw5DQUx4eVk+KvfXdL0rehNg==", - "requires": { - "minimatch": "^3.0.4", - "semver": "^7.3.4", - "vscode-languageserver-protocol": "3.16.0" - }, - "dependencies": { - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "vscode-languageserver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz", - "integrity": "sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw==", - "requires": { - "vscode-languageserver-protocol": "3.16.0" - } - }, - "vscode-languageserver-protocol": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz", - "integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==", - "requires": { - "vscode-jsonrpc": "6.0.0", - "vscode-languageserver-types": "3.16.0" - } - }, - "vscode-languageserver-textdocument": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.1.tgz", - "integrity": "sha512-UIcJDjX7IFkck7cSkNNyzIz5FyvpQfY7sdzVy+wkKN/BLaD4DQ0ppXQrKePomCxTS7RrolK1I0pey0bG9eh8dA==" - }, - "vscode-languageserver-types": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", - "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==" - }, - "vscode-test": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-1.5.2.tgz", - "integrity": "sha512-x9PVfKxF6EInH9iSFGQi0V8H5zIW1fC7RAer6yNQR6sy3WyOwlWkuT3I+wf75xW/cO53hxMi1aj/EvqQfDFOAg==", - "dev": true, - "requires": { - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "rimraf": "^3.0.2", - "unzipper": "^0.10.11" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==" - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - } -} diff --git a/vscode-cashscript/package.json b/vscode-cashscript/package.json deleted file mode 100644 index d506885..0000000 --- a/vscode-cashscript/package.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "name": "vscode-cashscript", - "displayName": "vscode-cashscript", - "description": "Language extension for cashscript", - "version": "0.0.1", - "engines": { - "vscode": "^1.50.1" - }, - "categories": [ - "Programming Languages" - ], - "activationEvents": [ - "onLanguage:cashscript", - "onCommand:cashscript.compile" - ], - "main": "./out/src/extension", - "scripts": { - "vscode:prepublish": "npm run compile", - "compile": "tsc -p ./", - "watch": "tsc -watch -p ./", - "prepare": "node ./node_modules/vscode/bin/install" - }, - "contributes": { - "languages": [ - { - "id": "cashscript", - "aliases": [ - "Cashscript", - "cashscript" - ], - "extensions": [ - ".cash" - ], - "configuration": "./cashscript.configuration.json" - } - ], - "grammars": [ - { - "language": "cashscript", - "scopeName": "source.cash", - "path": "./syntaxes/cashscript.tmLanguage.json" - } - ], - "snippets": [ - { - "language": "cashscript", - "path": "./snippets/cashscript.snippets.json" - } - ], - "commands": [ - { - "command": "cashscript.compile", - "title": "Compile Contract" - } - ], - "keybindings": [ - { - "command": "cashscript.compile", - "key": "ctrl+f5" - } - ], - "menus": { - "editor/title": [ - { - "when": "resourceLangId == cashscript", - "command": "cashscript.compile", - "group": "navigation" - } - ] - } - }, - "dependencies": { - "antlr4ts": "^0.5.0-alpha.4", - "cashc": "^0.6.3", - "cashscript": "^0.6.3", - "vscode-languageclient": "^7.0.0", - "vscode-languageserver": "^7.0.0", - "vscode-languageserver-textdocument": "^1.0.1" - }, - "devDependencies": { - "@types/vscode": "^1.56.0", - "typescript": "^4.3.2", - "vscode-test": "^1.5.2" - } -} diff --git a/vscode-cashscript/snippets/cashscript.snippets.json b/vscode-cashscript/snippets/cashscript.snippets.json deleted file mode 100644 index eecf663..0000000 --- a/vscode-cashscript/snippets/cashscript.snippets.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "Set Pragma":{ - "prefix":"pragma", - "body":"pragma cashscript ^${1:0.5.6};\n", - "description":"Set semantic version" - }, - - "Create Contract": { - "prefix":"contract", - "body":"contract ${1:ContractName}($2) {\n\n}", - "description":"Creates a contract" - }, - - "Function Statement" : { - "prefix":"function", - "body":"function ${1:functionName}(${2:params}) {\n\t$3\n}", - "description":"Create function" - }, - - "If Statement" : { - "prefix":"if", - "body":"if (${1:condition}){\n\t$2\n}", - "description":"If statement" - }, - - "If-Else statement":{ - "prefix":"ifelse", - "body":"if (${1:condition}) {\n\t$2\n} else {\n\t$3\n}", - "description":"if-else statement" - } - - -} \ No newline at end of file diff --git a/vscode-cashscript/src/CashscriptLinter/ErrorListeners.ts b/vscode-cashscript/src/CashscriptLinter/ErrorListeners.ts deleted file mode 100644 index de2fc14..0000000 --- a/vscode-cashscript/src/CashscriptLinter/ErrorListeners.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { ANTLRErrorListener, DefaultErrorStrategy, Parser, RecognitionException, Recognizer } from 'antlr4ts'; -import { Diagnostic, DiagnosticSeverity, Range } from 'vscode-languageserver'; - -export class SafeErrorListener implements ANTLRErrorListener { - static readonly INSTANCE = new SafeErrorListener(); - - errs:Diagnostic[] = [] - - getErrs():Diagnostic[]{ - return this.errs; - } - - syntaxError( - recognizer: Recognizer, - offendingSymbol: T, - line: number, - charPositionInLine: number, - message: string, - e?: RecognitionException, - ): void { - const capitalisedMessage = message.charAt(0).toUpperCase() + message.slice(1); - - //console.log(capitalisedMessage); - const range:Range = { - start:{ - line:line-1, - character:charPositionInLine - }, - end:{ - line:line-1, - character:charPositionInLine - } - } - - const diag = Diagnostic.create(range, capitalisedMessage, DiagnosticSeverity.Error) - this.errs.push(diag); - } - - } - -export class SafeErrorStrategy extends DefaultErrorStrategy{ - sync(recognizer: Parser): void { - return - } -} \ No newline at end of file diff --git a/vscode-cashscript/src/CashscriptLinter/grammar/CashScript.g4 b/vscode-cashscript/src/CashscriptLinter/grammar/CashScript.g4 deleted file mode 100644 index 7802cbf..0000000 --- a/vscode-cashscript/src/CashscriptLinter/grammar/CashScript.g4 +++ /dev/null @@ -1,198 +0,0 @@ -grammar CashScript; - -sourceFile - : pragmaDirective* contractDefinition EOF - ; - -pragmaDirective - : 'pragma' pragmaName pragmaValue ';' - ; - -pragmaName - : 'cashscript' - ; - -pragmaValue - : versionConstraint versionConstraint? - ; - -versionConstraint - : versionOperator? VersionLiteral - ; - -versionOperator - : '^' | '~' | '>=' | '>' | '<' | '<=' | '=' - ; - -contractDefinition - : 'contract' Identifier parameterList '{' functionDefinition* '}' - ; - -functionDefinition - : 'function' Identifier parameterList '{' statement* '}' - ; - -parameterList - : '(' (parameter (',' parameter)* ','?)? ')' - ; - -parameter - : typeName Identifier - ; - -block - : '{' statement* '}' - | statement - ; - -statement - : variableDefinition - | assignStatement - | timeOpStatement - | requireStatement - | ifStatement - ; - -variableDefinition - : typeName Identifier '=' expression ';' - ; - -assignStatement - : Identifier '=' expression ';' - ; - -timeOpStatement - : 'require' '(' TxVar '>=' expression ')' ';' - ; - -requireStatement - : 'require' '(' expression ')' ';' - ; - -ifStatement - : 'if' '(' expression ')' ifBlock=block ('else' elseBlock=block)? - ; - -functionCall - : Identifier expressionList // Only built-in functions are accepted - ; - -expressionList - : '(' (expression (',' expression)* ','?)? ')' - ; - -expression - : '(' expression ')' # Parenthesised - | typeName '(' castable=expression (',' size=expression)? ','? ')' # Cast - | functionCall # FunctionCallExpression - | 'new' Identifier expressionList #Instantiation - | expression '[' index=NumberLiteral ']' # TupleIndexOp - | expression op=('.reverse()' | '.length') # UnaryOp - | op=('!' | '-') expression # UnaryOp - // | expression '**' expression --- OP_POW does not exist in BCH Script - // | expression ('*' | '/' | '%') expression --- OP_MUL is disabled in BCH Script - | left=expression op='.split' '(' right=expression ')' # BinaryOp - | left=expression op=('/' | '%') right=expression # BinaryOp - | left=expression op=('+' | '-') right=expression # BinaryOp - // | expression ('>>' | '<<') expression --- OP_LSHIFT & RSHIFT are disabled in BCH Script - | left=expression op=('<' | '<=' | '>' | '>=') right=expression # BinaryOp - | left=expression op=('==' | '!=') right=expression # BinaryOp - | left=expression op='&' right=expression # BinaryOp - | left=expression op='^' right=expression # BinaryOp - | left=expression op='|' right=expression # BinaryOp - | left=expression op='&&' right=expression # BinaryOp - | left=expression op='||' right=expression # BinaryOp - | '[' (expression (',' expression)* ','?)? ']' # Array - | PreimageField # PreimageField - | Identifier # Identifier - | literal # LiteralExpression - ; - -literal - : BooleanLiteral - | numberLiteral - | StringLiteral - | DateLiteral - | HexLiteral - ; - -numberLiteral - : NumberLiteral NumberUnit? - ; - -typeName - : 'int' | 'bool' | 'string' | 'pubkey' | 'sig' | 'datasig' | Bytes - ; - -VersionLiteral - : [0-9]+ '.' [0-9]+ '.' [0-9]+ - ; - -BooleanLiteral - : 'true' | 'false' - ; - -NumberUnit - : 'satoshis' | 'sats' | 'finney' | 'bits' | 'bitcoin' - | 'seconds' | 'minutes' | 'hours' | 'days' | 'weeks' - ; - -NumberLiteral - : [-]?[0-9]+ ([eE] [0-9]+)? - ; - -Bytes - : 'bytes' Bound? - ; - -Bound - : [1-9] [0-9]* - ; - -StringLiteral - : '"' ('\\"' | ~["\r\n])*? '"' - | '\'' ('\\\'' | ~['\r\n])*? '\'' - ; - -DateLiteral - : 'date(' StringLiteral ')' - ; - -HexLiteral - : '0' [xX] [0-9A-Fa-f]* - ; - -TxVar - : 'tx.age' - | 'tx.time' - ; - -PreimageField - : 'tx.version' - | 'tx.hashPrevouts' - | 'tx.hashSequence' - | 'tx.outpoint' - | 'tx.bytecode' - | 'tx.value' - | 'tx.sequence' - | 'tx.hashOutputs' - | 'tx.locktime' - | 'tx.hashtype' - | 'tx.preimage' - ; - -Identifier - : [a-zA-Z] [a-zA-Z0-9_]* - ; - -WHITESPACE - : [ \t\r\n\u000C]+ -> skip - ; - -COMMENT - : '/*' .*? '*/' -> channel(HIDDEN) - ; - -LINE_COMMENT - : '//' ~[\r\n]* -> channel(HIDDEN) - ; diff --git a/vscode-cashscript/src/CashscriptLinter/grammar/CashScript.interp b/vscode-cashscript/src/CashscriptLinter/grammar/CashScript.interp deleted file mode 100644 index e1a1717..0000000 --- a/vscode-cashscript/src/CashscriptLinter/grammar/CashScript.interp +++ /dev/null @@ -1,150 +0,0 @@ -token literal names: -null -'pragma' -';' -'cashscript' -'^' -'~' -'>=' -'>' -'<' -'<=' -'=' -'contract' -'{' -'}' -'function' -'(' -',' -')' -'require' -'if' -'else' -'new' -'[' -']' -'.reverse()' -'.length' -'!' -'-' -'.split' -'/' -'%' -'+' -'==' -'!=' -'&' -'|' -'&&' -'||' -'int' -'bool' -'string' -'pubkey' -'sig' -'datasig' -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null - -token symbolic names: -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -VersionLiteral -BooleanLiteral -NumberUnit -NumberLiteral -Bytes -Bound -StringLiteral -DateLiteral -HexLiteral -TxVar -PreimageField -Identifier -WHITESPACE -COMMENT -LINE_COMMENT - -rule names: -sourceFile -pragmaDirective -pragmaName -pragmaValue -versionConstraint -versionOperator -contractDefinition -functionDefinition -parameterList -parameter -block -statement -variableDefinition -assignStatement -timeOpStatement -requireStatement -ifStatement -functionCall -expressionList -expression -literal -numberLiteral -typeName - - -atn: -[3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 3, 60, 290, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 3, 2, 7, 2, 50, 10, 2, 12, 2, 14, 2, 53, 11, 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 5, 3, 5, 5, 5, 67, 10, 5, 3, 6, 5, 6, 70, 10, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 7, 8, 81, 10, 8, 12, 8, 14, 8, 84, 11, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 7, 9, 93, 10, 9, 12, 9, 14, 9, 96, 11, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 7, 10, 104, 10, 10, 12, 10, 14, 10, 107, 11, 10, 3, 10, 5, 10, 110, 10, 10, 5, 10, 112, 10, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 7, 12, 121, 10, 12, 12, 12, 14, 12, 124, 11, 12, 3, 12, 3, 12, 5, 12, 128, 10, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 5, 13, 135, 10, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 5, 18, 169, 10, 18, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 7, 20, 178, 10, 20, 12, 20, 14, 20, 181, 11, 20, 3, 20, 5, 20, 184, 10, 20, 5, 20, 186, 10, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 5, 21, 200, 10, 21, 3, 21, 5, 21, 203, 10, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 7, 21, 217, 10, 21, 12, 21, 14, 21, 220, 11, 21, 3, 21, 5, 21, 223, 10, 21, 5, 21, 225, 10, 21, 3, 21, 3, 21, 3, 21, 3, 21, 5, 21, 231, 10, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 7, 21, 272, 10, 21, 12, 21, 14, 21, 275, 11, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 5, 22, 282, 10, 22, 3, 23, 3, 23, 5, 23, 286, 10, 23, 3, 24, 3, 24, 3, 24, 2, 2, 3, 40, 25, 2, 2, 4, 2, 6, 2, 8, 2, 10, 2, 12, 2, 14, 2, 16, 2, 18, 2, 20, 2, 22, 2, 24, 2, 26, 2, 28, 2, 30, 2, 32, 2, 34, 2, 36, 2, 38, 2, 40, 2, 42, 2, 44, 2, 46, 2, 2, 10, 3, 2, 6, 12, 3, 2, 28, 29, 3, 2, 31, 32, 4, 2, 29, 29, 33, 33, 3, 2, 8, 11, 3, 2, 34, 35, 3, 2, 26, 27, 4, 2, 40, 45, 50, 50, 2, 314, 2, 51, 3, 2, 2, 2, 4, 57, 3, 2, 2, 2, 6, 62, 3, 2, 2, 2, 8, 64, 3, 2, 2, 2, 10, 69, 3, 2, 2, 2, 12, 73, 3, 2, 2, 2, 14, 75, 3, 2, 2, 2, 16, 87, 3, 2, 2, 2, 18, 99, 3, 2, 2, 2, 20, 115, 3, 2, 2, 2, 22, 127, 3, 2, 2, 2, 24, 134, 3, 2, 2, 2, 26, 136, 3, 2, 2, 2, 28, 142, 3, 2, 2, 2, 30, 147, 3, 2, 2, 2, 32, 155, 3, 2, 2, 2, 34, 161, 3, 2, 2, 2, 36, 170, 3, 2, 2, 2, 38, 173, 3, 2, 2, 2, 40, 230, 3, 2, 2, 2, 42, 281, 3, 2, 2, 2, 44, 283, 3, 2, 2, 2, 46, 287, 3, 2, 2, 2, 48, 50, 5, 4, 3, 2, 49, 48, 3, 2, 2, 2, 50, 53, 3, 2, 2, 2, 51, 49, 3, 2, 2, 2, 51, 52, 3, 2, 2, 2, 52, 54, 3, 2, 2, 2, 53, 51, 3, 2, 2, 2, 54, 55, 5, 14, 8, 2, 55, 56, 7, 2, 2, 3, 56, 3, 3, 2, 2, 2, 57, 58, 7, 3, 2, 2, 58, 59, 5, 6, 4, 2, 59, 60, 5, 8, 5, 2, 60, 61, 7, 4, 2, 2, 61, 5, 3, 2, 2, 2, 62, 63, 7, 5, 2, 2, 63, 7, 3, 2, 2, 2, 64, 66, 5, 10, 6, 2, 65, 67, 5, 10, 6, 2, 66, 65, 3, 2, 2, 2, 66, 67, 3, 2, 2, 2, 67, 9, 3, 2, 2, 2, 68, 70, 5, 12, 7, 2, 69, 68, 3, 2, 2, 2, 69, 70, 3, 2, 2, 2, 70, 71, 3, 2, 2, 2, 71, 72, 7, 46, 2, 2, 72, 11, 3, 2, 2, 2, 73, 74, 9, 2, 2, 2, 74, 13, 3, 2, 2, 2, 75, 76, 7, 13, 2, 2, 76, 77, 7, 57, 2, 2, 77, 78, 5, 18, 10, 2, 78, 82, 7, 14, 2, 2, 79, 81, 5, 16, 9, 2, 80, 79, 3, 2, 2, 2, 81, 84, 3, 2, 2, 2, 82, 80, 3, 2, 2, 2, 82, 83, 3, 2, 2, 2, 83, 85, 3, 2, 2, 2, 84, 82, 3, 2, 2, 2, 85, 86, 7, 15, 2, 2, 86, 15, 3, 2, 2, 2, 87, 88, 7, 16, 2, 2, 88, 89, 7, 57, 2, 2, 89, 90, 5, 18, 10, 2, 90, 94, 7, 14, 2, 2, 91, 93, 5, 24, 13, 2, 92, 91, 3, 2, 2, 2, 93, 96, 3, 2, 2, 2, 94, 92, 3, 2, 2, 2, 94, 95, 3, 2, 2, 2, 95, 97, 3, 2, 2, 2, 96, 94, 3, 2, 2, 2, 97, 98, 7, 15, 2, 2, 98, 17, 3, 2, 2, 2, 99, 111, 7, 17, 2, 2, 100, 105, 5, 20, 11, 2, 101, 102, 7, 18, 2, 2, 102, 104, 5, 20, 11, 2, 103, 101, 3, 2, 2, 2, 104, 107, 3, 2, 2, 2, 105, 103, 3, 2, 2, 2, 105, 106, 3, 2, 2, 2, 106, 109, 3, 2, 2, 2, 107, 105, 3, 2, 2, 2, 108, 110, 7, 18, 2, 2, 109, 108, 3, 2, 2, 2, 109, 110, 3, 2, 2, 2, 110, 112, 3, 2, 2, 2, 111, 100, 3, 2, 2, 2, 111, 112, 3, 2, 2, 2, 112, 113, 3, 2, 2, 2, 113, 114, 7, 19, 2, 2, 114, 19, 3, 2, 2, 2, 115, 116, 5, 46, 24, 2, 116, 117, 7, 57, 2, 2, 117, 21, 3, 2, 2, 2, 118, 122, 7, 14, 2, 2, 119, 121, 5, 24, 13, 2, 120, 119, 3, 2, 2, 2, 121, 124, 3, 2, 2, 2, 122, 120, 3, 2, 2, 2, 122, 123, 3, 2, 2, 2, 123, 125, 3, 2, 2, 2, 124, 122, 3, 2, 2, 2, 125, 128, 7, 15, 2, 2, 126, 128, 5, 24, 13, 2, 127, 118, 3, 2, 2, 2, 127, 126, 3, 2, 2, 2, 128, 23, 3, 2, 2, 2, 129, 135, 5, 26, 14, 2, 130, 135, 5, 28, 15, 2, 131, 135, 5, 30, 16, 2, 132, 135, 5, 32, 17, 2, 133, 135, 5, 34, 18, 2, 134, 129, 3, 2, 2, 2, 134, 130, 3, 2, 2, 2, 134, 131, 3, 2, 2, 2, 134, 132, 3, 2, 2, 2, 134, 133, 3, 2, 2, 2, 135, 25, 3, 2, 2, 2, 136, 137, 5, 46, 24, 2, 137, 138, 7, 57, 2, 2, 138, 139, 7, 12, 2, 2, 139, 140, 5, 40, 21, 2, 140, 141, 7, 4, 2, 2, 141, 27, 3, 2, 2, 2, 142, 143, 7, 57, 2, 2, 143, 144, 7, 12, 2, 2, 144, 145, 5, 40, 21, 2, 145, 146, 7, 4, 2, 2, 146, 29, 3, 2, 2, 2, 147, 148, 7, 20, 2, 2, 148, 149, 7, 17, 2, 2, 149, 150, 7, 55, 2, 2, 150, 151, 7, 8, 2, 2, 151, 152, 5, 40, 21, 2, 152, 153, 7, 19, 2, 2, 153, 154, 7, 4, 2, 2, 154, 31, 3, 2, 2, 2, 155, 156, 7, 20, 2, 2, 156, 157, 7, 17, 2, 2, 157, 158, 5, 40, 21, 2, 158, 159, 7, 19, 2, 2, 159, 160, 7, 4, 2, 2, 160, 33, 3, 2, 2, 2, 161, 162, 7, 21, 2, 2, 162, 163, 7, 17, 2, 2, 163, 164, 5, 40, 21, 2, 164, 165, 7, 19, 2, 2, 165, 168, 5, 22, 12, 2, 166, 167, 7, 22, 2, 2, 167, 169, 5, 22, 12, 2, 168, 166, 3, 2, 2, 2, 168, 169, 3, 2, 2, 2, 169, 35, 3, 2, 2, 2, 170, 171, 7, 57, 2, 2, 171, 172, 5, 38, 20, 2, 172, 37, 3, 2, 2, 2, 173, 185, 7, 17, 2, 2, 174, 179, 5, 40, 21, 2, 175, 176, 7, 18, 2, 2, 176, 178, 5, 40, 21, 2, 177, 175, 3, 2, 2, 2, 178, 181, 3, 2, 2, 2, 179, 177, 3, 2, 2, 2, 179, 180, 3, 2, 2, 2, 180, 183, 3, 2, 2, 2, 181, 179, 3, 2, 2, 2, 182, 184, 7, 18, 2, 2, 183, 182, 3, 2, 2, 2, 183, 184, 3, 2, 2, 2, 184, 186, 3, 2, 2, 2, 185, 174, 3, 2, 2, 2, 185, 186, 3, 2, 2, 2, 186, 187, 3, 2, 2, 2, 187, 188, 7, 19, 2, 2, 188, 39, 3, 2, 2, 2, 189, 190, 8, 21, 1, 2, 190, 191, 7, 17, 2, 2, 191, 192, 5, 40, 21, 2, 192, 193, 7, 19, 2, 2, 193, 231, 3, 2, 2, 2, 194, 195, 5, 46, 24, 2, 195, 196, 7, 17, 2, 2, 196, 199, 5, 40, 21, 2, 197, 198, 7, 18, 2, 2, 198, 200, 5, 40, 21, 2, 199, 197, 3, 2, 2, 2, 199, 200, 3, 2, 2, 2, 200, 202, 3, 2, 2, 2, 201, 203, 7, 18, 2, 2, 202, 201, 3, 2, 2, 2, 202, 203, 3, 2, 2, 2, 203, 204, 3, 2, 2, 2, 204, 205, 7, 19, 2, 2, 205, 231, 3, 2, 2, 2, 206, 231, 5, 36, 19, 2, 207, 208, 7, 23, 2, 2, 208, 209, 7, 57, 2, 2, 209, 231, 5, 38, 20, 2, 210, 211, 9, 3, 2, 2, 211, 231, 5, 40, 21, 17, 212, 224, 7, 24, 2, 2, 213, 218, 5, 40, 21, 2, 214, 215, 7, 18, 2, 2, 215, 217, 5, 40, 21, 2, 216, 214, 3, 2, 2, 2, 217, 220, 3, 2, 2, 2, 218, 216, 3, 2, 2, 2, 218, 219, 3, 2, 2, 2, 219, 222, 3, 2, 2, 2, 220, 218, 3, 2, 2, 2, 221, 223, 7, 18, 2, 2, 222, 221, 3, 2, 2, 2, 222, 223, 3, 2, 2, 2, 223, 225, 3, 2, 2, 2, 224, 213, 3, 2, 2, 2, 224, 225, 3, 2, 2, 2, 225, 226, 3, 2, 2, 2, 226, 231, 7, 25, 2, 2, 227, 231, 7, 56, 2, 2, 228, 231, 7, 57, 2, 2, 229, 231, 5, 42, 22, 2, 230, 189, 3, 2, 2, 2, 230, 194, 3, 2, 2, 2, 230, 206, 3, 2, 2, 2, 230, 207, 3, 2, 2, 2, 230, 210, 3, 2, 2, 2, 230, 212, 3, 2, 2, 2, 230, 227, 3, 2, 2, 2, 230, 228, 3, 2, 2, 2, 230, 229, 3, 2, 2, 2, 231, 273, 3, 2, 2, 2, 232, 233, 12, 15, 2, 2, 233, 234, 9, 4, 2, 2, 234, 272, 5, 40, 21, 16, 235, 236, 12, 14, 2, 2, 236, 237, 9, 5, 2, 2, 237, 272, 5, 40, 21, 15, 238, 239, 12, 13, 2, 2, 239, 240, 9, 6, 2, 2, 240, 272, 5, 40, 21, 14, 241, 242, 12, 12, 2, 2, 242, 243, 9, 7, 2, 2, 243, 272, 5, 40, 21, 13, 244, 245, 12, 11, 2, 2, 245, 246, 7, 36, 2, 2, 246, 272, 5, 40, 21, 12, 247, 248, 12, 10, 2, 2, 248, 249, 7, 6, 2, 2, 249, 272, 5, 40, 21, 11, 250, 251, 12, 9, 2, 2, 251, 252, 7, 37, 2, 2, 252, 272, 5, 40, 21, 10, 253, 254, 12, 8, 2, 2, 254, 255, 7, 38, 2, 2, 255, 272, 5, 40, 21, 9, 256, 257, 12, 7, 2, 2, 257, 258, 7, 39, 2, 2, 258, 272, 5, 40, 21, 8, 259, 260, 12, 19, 2, 2, 260, 261, 7, 24, 2, 2, 261, 262, 7, 49, 2, 2, 262, 272, 7, 25, 2, 2, 263, 264, 12, 18, 2, 2, 264, 272, 9, 8, 2, 2, 265, 266, 12, 16, 2, 2, 266, 267, 7, 30, 2, 2, 267, 268, 7, 17, 2, 2, 268, 269, 5, 40, 21, 2, 269, 270, 7, 19, 2, 2, 270, 272, 3, 2, 2, 2, 271, 232, 3, 2, 2, 2, 271, 235, 3, 2, 2, 2, 271, 238, 3, 2, 2, 2, 271, 241, 3, 2, 2, 2, 271, 244, 3, 2, 2, 2, 271, 247, 3, 2, 2, 2, 271, 250, 3, 2, 2, 2, 271, 253, 3, 2, 2, 2, 271, 256, 3, 2, 2, 2, 271, 259, 3, 2, 2, 2, 271, 263, 3, 2, 2, 2, 271, 265, 3, 2, 2, 2, 272, 275, 3, 2, 2, 2, 273, 271, 3, 2, 2, 2, 273, 274, 3, 2, 2, 2, 274, 41, 3, 2, 2, 2, 275, 273, 3, 2, 2, 2, 276, 282, 7, 47, 2, 2, 277, 282, 5, 44, 23, 2, 278, 282, 7, 52, 2, 2, 279, 282, 7, 53, 2, 2, 280, 282, 7, 54, 2, 2, 281, 276, 3, 2, 2, 2, 281, 277, 3, 2, 2, 2, 281, 278, 3, 2, 2, 2, 281, 279, 3, 2, 2, 2, 281, 280, 3, 2, 2, 2, 282, 43, 3, 2, 2, 2, 283, 285, 7, 49, 2, 2, 284, 286, 7, 48, 2, 2, 285, 284, 3, 2, 2, 2, 285, 286, 3, 2, 2, 2, 286, 45, 3, 2, 2, 2, 287, 288, 9, 9, 2, 2, 288, 47, 3, 2, 2, 2, 27, 51, 66, 69, 82, 94, 105, 109, 111, 122, 127, 134, 168, 179, 183, 185, 199, 202, 218, 222, 224, 230, 271, 273, 281, 285] \ No newline at end of file diff --git a/vscode-cashscript/src/CashscriptLinter/grammar/CashScript.tokens b/vscode-cashscript/src/CashscriptLinter/grammar/CashScript.tokens deleted file mode 100644 index 4e7b5bb..0000000 --- a/vscode-cashscript/src/CashscriptLinter/grammar/CashScript.tokens +++ /dev/null @@ -1,101 +0,0 @@ -T__0=1 -T__1=2 -T__2=3 -T__3=4 -T__4=5 -T__5=6 -T__6=7 -T__7=8 -T__8=9 -T__9=10 -T__10=11 -T__11=12 -T__12=13 -T__13=14 -T__14=15 -T__15=16 -T__16=17 -T__17=18 -T__18=19 -T__19=20 -T__20=21 -T__21=22 -T__22=23 -T__23=24 -T__24=25 -T__25=26 -T__26=27 -T__27=28 -T__28=29 -T__29=30 -T__30=31 -T__31=32 -T__32=33 -T__33=34 -T__34=35 -T__35=36 -T__36=37 -T__37=38 -T__38=39 -T__39=40 -T__40=41 -T__41=42 -T__42=43 -VersionLiteral=44 -BooleanLiteral=45 -NumberUnit=46 -NumberLiteral=47 -Bytes=48 -Bound=49 -StringLiteral=50 -DateLiteral=51 -HexLiteral=52 -TxVar=53 -PreimageField=54 -Identifier=55 -WHITESPACE=56 -COMMENT=57 -LINE_COMMENT=58 -'pragma'=1 -';'=2 -'cashscript'=3 -'^'=4 -'~'=5 -'>='=6 -'>'=7 -'<'=8 -'<='=9 -'='=10 -'contract'=11 -'{'=12 -'}'=13 -'function'=14 -'('=15 -','=16 -')'=17 -'require'=18 -'if'=19 -'else'=20 -'new'=21 -'['=22 -']'=23 -'.reverse()'=24 -'.length'=25 -'!'=26 -'-'=27 -'.split'=28 -'/'=29 -'%'=30 -'+'=31 -'=='=32 -'!='=33 -'&'=34 -'|'=35 -'&&'=36 -'||'=37 -'int'=38 -'bool'=39 -'string'=40 -'pubkey'=41 -'sig'=42 -'datasig'=43 diff --git a/vscode-cashscript/src/CashscriptLinter/grammar/CashScriptLexer.interp b/vscode-cashscript/src/CashscriptLinter/grammar/CashScriptLexer.interp deleted file mode 100644 index 038e75c..0000000 --- a/vscode-cashscript/src/CashscriptLinter/grammar/CashScriptLexer.interp +++ /dev/null @@ -1,191 +0,0 @@ -token literal names: -null -'pragma' -';' -'cashscript' -'^' -'~' -'>=' -'>' -'<' -'<=' -'=' -'contract' -'{' -'}' -'function' -'(' -',' -')' -'require' -'if' -'else' -'new' -'[' -']' -'.reverse()' -'.length' -'!' -'-' -'.split' -'/' -'%' -'+' -'==' -'!=' -'&' -'|' -'&&' -'||' -'int' -'bool' -'string' -'pubkey' -'sig' -'datasig' -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null - -token symbolic names: -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -null -VersionLiteral -BooleanLiteral -NumberUnit -NumberLiteral -Bytes -Bound -StringLiteral -DateLiteral -HexLiteral -TxVar -PreimageField -Identifier -WHITESPACE -COMMENT -LINE_COMMENT - -rule names: -T__0 -T__1 -T__2 -T__3 -T__4 -T__5 -T__6 -T__7 -T__8 -T__9 -T__10 -T__11 -T__12 -T__13 -T__14 -T__15 -T__16 -T__17 -T__18 -T__19 -T__20 -T__21 -T__22 -T__23 -T__24 -T__25 -T__26 -T__27 -T__28 -T__29 -T__30 -T__31 -T__32 -T__33 -T__34 -T__35 -T__36 -T__37 -T__38 -T__39 -T__40 -T__41 -T__42 -VersionLiteral -BooleanLiteral -NumberUnit -NumberLiteral -Bytes -Bound -StringLiteral -DateLiteral -HexLiteral -TxVar -PreimageField -Identifier -WHITESPACE -COMMENT -LINE_COMMENT - -channel names: -DEFAULT_TOKEN_CHANNEL -HIDDEN - -mode names: -DEFAULT_MODE - -atn: -[3, 51485, 51898, 1421, 44986, 20307, 1543, 60043, 49729, 2, 60, 636, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 31, 3, 31, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 45, 6, 45, 296, 10, 45, 13, 45, 14, 45, 297, 3, 45, 3, 45, 6, 45, 302, 10, 45, 13, 45, 14, 45, 303, 3, 45, 3, 45, 6, 45, 308, 10, 45, 13, 45, 14, 45, 309, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 5, 46, 321, 10, 46, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 5, 47, 380, 10, 47, 3, 48, 5, 48, 383, 10, 48, 3, 48, 6, 48, 386, 10, 48, 13, 48, 14, 48, 387, 3, 48, 3, 48, 6, 48, 392, 10, 48, 13, 48, 14, 48, 393, 5, 48, 396, 10, 48, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 5, 49, 405, 10, 49, 3, 50, 3, 50, 7, 50, 409, 10, 50, 12, 50, 14, 50, 412, 11, 50, 3, 51, 3, 51, 3, 51, 3, 51, 7, 51, 418, 10, 51, 12, 51, 14, 51, 421, 11, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 7, 51, 428, 10, 51, 12, 51, 14, 51, 431, 11, 51, 3, 51, 5, 51, 434, 10, 51, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 7, 53, 448, 10, 53, 12, 53, 14, 53, 451, 11, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 5, 54, 466, 10, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 5, 55, 596, 10, 55, 3, 56, 3, 56, 7, 56, 600, 10, 56, 12, 56, 14, 56, 603, 11, 56, 3, 57, 6, 57, 606, 10, 57, 13, 57, 14, 57, 607, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 58, 7, 58, 616, 10, 58, 12, 58, 14, 58, 619, 11, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 7, 59, 630, 10, 59, 12, 59, 14, 59, 633, 11, 59, 3, 59, 3, 59, 5, 419, 429, 617, 2, 2, 60, 3, 2, 3, 5, 2, 4, 7, 2, 5, 9, 2, 6, 11, 2, 7, 13, 2, 8, 15, 2, 9, 17, 2, 10, 19, 2, 11, 21, 2, 12, 23, 2, 13, 25, 2, 14, 27, 2, 15, 29, 2, 16, 31, 2, 17, 33, 2, 18, 35, 2, 19, 37, 2, 20, 39, 2, 21, 41, 2, 22, 43, 2, 23, 45, 2, 24, 47, 2, 25, 49, 2, 26, 51, 2, 27, 53, 2, 28, 55, 2, 29, 57, 2, 30, 59, 2, 31, 61, 2, 32, 63, 2, 33, 65, 2, 34, 67, 2, 35, 69, 2, 36, 71, 2, 37, 73, 2, 38, 75, 2, 39, 77, 2, 40, 79, 2, 41, 81, 2, 42, 83, 2, 43, 85, 2, 44, 87, 2, 45, 89, 2, 46, 91, 2, 47, 93, 2, 48, 95, 2, 49, 97, 2, 50, 99, 2, 51, 101, 2, 52, 103, 2, 53, 105, 2, 54, 107, 2, 55, 109, 2, 56, 111, 2, 57, 113, 2, 58, 115, 2, 59, 117, 2, 60, 3, 2, 14, 3, 2, 50, 59, 3, 2, 47, 47, 4, 2, 71, 71, 103, 103, 3, 2, 51, 59, 5, 2, 12, 12, 15, 15, 36, 36, 5, 2, 12, 12, 15, 15, 41, 41, 4, 2, 90, 90, 122, 122, 5, 2, 50, 59, 67, 72, 99, 104, 4, 2, 67, 92, 99, 124, 6, 2, 50, 59, 67, 92, 97, 97, 99, 124, 5, 2, 11, 12, 14, 15, 34, 34, 4, 2, 12, 12, 15, 15, 2, 675, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 3, 119, 3, 2, 2, 2, 5, 126, 3, 2, 2, 2, 7, 128, 3, 2, 2, 2, 9, 139, 3, 2, 2, 2, 11, 141, 3, 2, 2, 2, 13, 143, 3, 2, 2, 2, 15, 146, 3, 2, 2, 2, 17, 148, 3, 2, 2, 2, 19, 150, 3, 2, 2, 2, 21, 153, 3, 2, 2, 2, 23, 155, 3, 2, 2, 2, 25, 164, 3, 2, 2, 2, 27, 166, 3, 2, 2, 2, 29, 168, 3, 2, 2, 2, 31, 177, 3, 2, 2, 2, 33, 179, 3, 2, 2, 2, 35, 181, 3, 2, 2, 2, 37, 183, 3, 2, 2, 2, 39, 191, 3, 2, 2, 2, 41, 194, 3, 2, 2, 2, 43, 199, 3, 2, 2, 2, 45, 203, 3, 2, 2, 2, 47, 205, 3, 2, 2, 2, 49, 207, 3, 2, 2, 2, 51, 218, 3, 2, 2, 2, 53, 226, 3, 2, 2, 2, 55, 228, 3, 2, 2, 2, 57, 230, 3, 2, 2, 2, 59, 237, 3, 2, 2, 2, 61, 239, 3, 2, 2, 2, 63, 241, 3, 2, 2, 2, 65, 243, 3, 2, 2, 2, 67, 246, 3, 2, 2, 2, 69, 249, 3, 2, 2, 2, 71, 251, 3, 2, 2, 2, 73, 253, 3, 2, 2, 2, 75, 256, 3, 2, 2, 2, 77, 259, 3, 2, 2, 2, 79, 263, 3, 2, 2, 2, 81, 268, 3, 2, 2, 2, 83, 275, 3, 2, 2, 2, 85, 282, 3, 2, 2, 2, 87, 286, 3, 2, 2, 2, 89, 295, 3, 2, 2, 2, 91, 320, 3, 2, 2, 2, 93, 379, 3, 2, 2, 2, 95, 382, 3, 2, 2, 2, 97, 397, 3, 2, 2, 2, 99, 406, 3, 2, 2, 2, 101, 433, 3, 2, 2, 2, 103, 435, 3, 2, 2, 2, 105, 444, 3, 2, 2, 2, 107, 465, 3, 2, 2, 2, 109, 595, 3, 2, 2, 2, 111, 597, 3, 2, 2, 2, 113, 605, 3, 2, 2, 2, 115, 611, 3, 2, 2, 2, 117, 625, 3, 2, 2, 2, 119, 120, 7, 114, 2, 2, 120, 121, 7, 116, 2, 2, 121, 122, 7, 99, 2, 2, 122, 123, 7, 105, 2, 2, 123, 124, 7, 111, 2, 2, 124, 125, 7, 99, 2, 2, 125, 4, 3, 2, 2, 2, 126, 127, 7, 61, 2, 2, 127, 6, 3, 2, 2, 2, 128, 129, 7, 101, 2, 2, 129, 130, 7, 99, 2, 2, 130, 131, 7, 117, 2, 2, 131, 132, 7, 106, 2, 2, 132, 133, 7, 117, 2, 2, 133, 134, 7, 101, 2, 2, 134, 135, 7, 116, 2, 2, 135, 136, 7, 107, 2, 2, 136, 137, 7, 114, 2, 2, 137, 138, 7, 118, 2, 2, 138, 8, 3, 2, 2, 2, 139, 140, 7, 96, 2, 2, 140, 10, 3, 2, 2, 2, 141, 142, 7, 128, 2, 2, 142, 12, 3, 2, 2, 2, 143, 144, 7, 64, 2, 2, 144, 145, 7, 63, 2, 2, 145, 14, 3, 2, 2, 2, 146, 147, 7, 64, 2, 2, 147, 16, 3, 2, 2, 2, 148, 149, 7, 62, 2, 2, 149, 18, 3, 2, 2, 2, 150, 151, 7, 62, 2, 2, 151, 152, 7, 63, 2, 2, 152, 20, 3, 2, 2, 2, 153, 154, 7, 63, 2, 2, 154, 22, 3, 2, 2, 2, 155, 156, 7, 101, 2, 2, 156, 157, 7, 113, 2, 2, 157, 158, 7, 112, 2, 2, 158, 159, 7, 118, 2, 2, 159, 160, 7, 116, 2, 2, 160, 161, 7, 99, 2, 2, 161, 162, 7, 101, 2, 2, 162, 163, 7, 118, 2, 2, 163, 24, 3, 2, 2, 2, 164, 165, 7, 125, 2, 2, 165, 26, 3, 2, 2, 2, 166, 167, 7, 127, 2, 2, 167, 28, 3, 2, 2, 2, 168, 169, 7, 104, 2, 2, 169, 170, 7, 119, 2, 2, 170, 171, 7, 112, 2, 2, 171, 172, 7, 101, 2, 2, 172, 173, 7, 118, 2, 2, 173, 174, 7, 107, 2, 2, 174, 175, 7, 113, 2, 2, 175, 176, 7, 112, 2, 2, 176, 30, 3, 2, 2, 2, 177, 178, 7, 42, 2, 2, 178, 32, 3, 2, 2, 2, 179, 180, 7, 46, 2, 2, 180, 34, 3, 2, 2, 2, 181, 182, 7, 43, 2, 2, 182, 36, 3, 2, 2, 2, 183, 184, 7, 116, 2, 2, 184, 185, 7, 103, 2, 2, 185, 186, 7, 115, 2, 2, 186, 187, 7, 119, 2, 2, 187, 188, 7, 107, 2, 2, 188, 189, 7, 116, 2, 2, 189, 190, 7, 103, 2, 2, 190, 38, 3, 2, 2, 2, 191, 192, 7, 107, 2, 2, 192, 193, 7, 104, 2, 2, 193, 40, 3, 2, 2, 2, 194, 195, 7, 103, 2, 2, 195, 196, 7, 110, 2, 2, 196, 197, 7, 117, 2, 2, 197, 198, 7, 103, 2, 2, 198, 42, 3, 2, 2, 2, 199, 200, 7, 112, 2, 2, 200, 201, 7, 103, 2, 2, 201, 202, 7, 121, 2, 2, 202, 44, 3, 2, 2, 2, 203, 204, 7, 93, 2, 2, 204, 46, 3, 2, 2, 2, 205, 206, 7, 95, 2, 2, 206, 48, 3, 2, 2, 2, 207, 208, 7, 48, 2, 2, 208, 209, 7, 116, 2, 2, 209, 210, 7, 103, 2, 2, 210, 211, 7, 120, 2, 2, 211, 212, 7, 103, 2, 2, 212, 213, 7, 116, 2, 2, 213, 214, 7, 117, 2, 2, 214, 215, 7, 103, 2, 2, 215, 216, 7, 42, 2, 2, 216, 217, 7, 43, 2, 2, 217, 50, 3, 2, 2, 2, 218, 219, 7, 48, 2, 2, 219, 220, 7, 110, 2, 2, 220, 221, 7, 103, 2, 2, 221, 222, 7, 112, 2, 2, 222, 223, 7, 105, 2, 2, 223, 224, 7, 118, 2, 2, 224, 225, 7, 106, 2, 2, 225, 52, 3, 2, 2, 2, 226, 227, 7, 35, 2, 2, 227, 54, 3, 2, 2, 2, 228, 229, 7, 47, 2, 2, 229, 56, 3, 2, 2, 2, 230, 231, 7, 48, 2, 2, 231, 232, 7, 117, 2, 2, 232, 233, 7, 114, 2, 2, 233, 234, 7, 110, 2, 2, 234, 235, 7, 107, 2, 2, 235, 236, 7, 118, 2, 2, 236, 58, 3, 2, 2, 2, 237, 238, 7, 49, 2, 2, 238, 60, 3, 2, 2, 2, 239, 240, 7, 39, 2, 2, 240, 62, 3, 2, 2, 2, 241, 242, 7, 45, 2, 2, 242, 64, 3, 2, 2, 2, 243, 244, 7, 63, 2, 2, 244, 245, 7, 63, 2, 2, 245, 66, 3, 2, 2, 2, 246, 247, 7, 35, 2, 2, 247, 248, 7, 63, 2, 2, 248, 68, 3, 2, 2, 2, 249, 250, 7, 40, 2, 2, 250, 70, 3, 2, 2, 2, 251, 252, 7, 126, 2, 2, 252, 72, 3, 2, 2, 2, 253, 254, 7, 40, 2, 2, 254, 255, 7, 40, 2, 2, 255, 74, 3, 2, 2, 2, 256, 257, 7, 126, 2, 2, 257, 258, 7, 126, 2, 2, 258, 76, 3, 2, 2, 2, 259, 260, 7, 107, 2, 2, 260, 261, 7, 112, 2, 2, 261, 262, 7, 118, 2, 2, 262, 78, 3, 2, 2, 2, 263, 264, 7, 100, 2, 2, 264, 265, 7, 113, 2, 2, 265, 266, 7, 113, 2, 2, 266, 267, 7, 110, 2, 2, 267, 80, 3, 2, 2, 2, 268, 269, 7, 117, 2, 2, 269, 270, 7, 118, 2, 2, 270, 271, 7, 116, 2, 2, 271, 272, 7, 107, 2, 2, 272, 273, 7, 112, 2, 2, 273, 274, 7, 105, 2, 2, 274, 82, 3, 2, 2, 2, 275, 276, 7, 114, 2, 2, 276, 277, 7, 119, 2, 2, 277, 278, 7, 100, 2, 2, 278, 279, 7, 109, 2, 2, 279, 280, 7, 103, 2, 2, 280, 281, 7, 123, 2, 2, 281, 84, 3, 2, 2, 2, 282, 283, 7, 117, 2, 2, 283, 284, 7, 107, 2, 2, 284, 285, 7, 105, 2, 2, 285, 86, 3, 2, 2, 2, 286, 287, 7, 102, 2, 2, 287, 288, 7, 99, 2, 2, 288, 289, 7, 118, 2, 2, 289, 290, 7, 99, 2, 2, 290, 291, 7, 117, 2, 2, 291, 292, 7, 107, 2, 2, 292, 293, 7, 105, 2, 2, 293, 88, 3, 2, 2, 2, 294, 296, 9, 2, 2, 2, 295, 294, 3, 2, 2, 2, 296, 297, 3, 2, 2, 2, 297, 295, 3, 2, 2, 2, 297, 298, 3, 2, 2, 2, 298, 299, 3, 2, 2, 2, 299, 301, 7, 48, 2, 2, 300, 302, 9, 2, 2, 2, 301, 300, 3, 2, 2, 2, 302, 303, 3, 2, 2, 2, 303, 301, 3, 2, 2, 2, 303, 304, 3, 2, 2, 2, 304, 305, 3, 2, 2, 2, 305, 307, 7, 48, 2, 2, 306, 308, 9, 2, 2, 2, 307, 306, 3, 2, 2, 2, 308, 309, 3, 2, 2, 2, 309, 307, 3, 2, 2, 2, 309, 310, 3, 2, 2, 2, 310, 90, 3, 2, 2, 2, 311, 312, 7, 118, 2, 2, 312, 313, 7, 116, 2, 2, 313, 314, 7, 119, 2, 2, 314, 321, 7, 103, 2, 2, 315, 316, 7, 104, 2, 2, 316, 317, 7, 99, 2, 2, 317, 318, 7, 110, 2, 2, 318, 319, 7, 117, 2, 2, 319, 321, 7, 103, 2, 2, 320, 311, 3, 2, 2, 2, 320, 315, 3, 2, 2, 2, 321, 92, 3, 2, 2, 2, 322, 323, 7, 117, 2, 2, 323, 324, 7, 99, 2, 2, 324, 325, 7, 118, 2, 2, 325, 326, 7, 113, 2, 2, 326, 327, 7, 117, 2, 2, 327, 328, 7, 106, 2, 2, 328, 329, 7, 107, 2, 2, 329, 380, 7, 117, 2, 2, 330, 331, 7, 117, 2, 2, 331, 332, 7, 99, 2, 2, 332, 333, 7, 118, 2, 2, 333, 380, 7, 117, 2, 2, 334, 335, 7, 104, 2, 2, 335, 336, 7, 107, 2, 2, 336, 337, 7, 112, 2, 2, 337, 338, 7, 112, 2, 2, 338, 339, 7, 103, 2, 2, 339, 380, 7, 123, 2, 2, 340, 341, 7, 100, 2, 2, 341, 342, 7, 107, 2, 2, 342, 343, 7, 118, 2, 2, 343, 380, 7, 117, 2, 2, 344, 345, 7, 100, 2, 2, 345, 346, 7, 107, 2, 2, 346, 347, 7, 118, 2, 2, 347, 348, 7, 101, 2, 2, 348, 349, 7, 113, 2, 2, 349, 350, 7, 107, 2, 2, 350, 380, 7, 112, 2, 2, 351, 352, 7, 117, 2, 2, 352, 353, 7, 103, 2, 2, 353, 354, 7, 101, 2, 2, 354, 355, 7, 113, 2, 2, 355, 356, 7, 112, 2, 2, 356, 357, 7, 102, 2, 2, 357, 380, 7, 117, 2, 2, 358, 359, 7, 111, 2, 2, 359, 360, 7, 107, 2, 2, 360, 361, 7, 112, 2, 2, 361, 362, 7, 119, 2, 2, 362, 363, 7, 118, 2, 2, 363, 364, 7, 103, 2, 2, 364, 380, 7, 117, 2, 2, 365, 366, 7, 106, 2, 2, 366, 367, 7, 113, 2, 2, 367, 368, 7, 119, 2, 2, 368, 369, 7, 116, 2, 2, 369, 380, 7, 117, 2, 2, 370, 371, 7, 102, 2, 2, 371, 372, 7, 99, 2, 2, 372, 373, 7, 123, 2, 2, 373, 380, 7, 117, 2, 2, 374, 375, 7, 121, 2, 2, 375, 376, 7, 103, 2, 2, 376, 377, 7, 103, 2, 2, 377, 378, 7, 109, 2, 2, 378, 380, 7, 117, 2, 2, 379, 322, 3, 2, 2, 2, 379, 330, 3, 2, 2, 2, 379, 334, 3, 2, 2, 2, 379, 340, 3, 2, 2, 2, 379, 344, 3, 2, 2, 2, 379, 351, 3, 2, 2, 2, 379, 358, 3, 2, 2, 2, 379, 365, 3, 2, 2, 2, 379, 370, 3, 2, 2, 2, 379, 374, 3, 2, 2, 2, 380, 94, 3, 2, 2, 2, 381, 383, 9, 3, 2, 2, 382, 381, 3, 2, 2, 2, 382, 383, 3, 2, 2, 2, 383, 385, 3, 2, 2, 2, 384, 386, 9, 2, 2, 2, 385, 384, 3, 2, 2, 2, 386, 387, 3, 2, 2, 2, 387, 385, 3, 2, 2, 2, 387, 388, 3, 2, 2, 2, 388, 395, 3, 2, 2, 2, 389, 391, 9, 4, 2, 2, 390, 392, 9, 2, 2, 2, 391, 390, 3, 2, 2, 2, 392, 393, 3, 2, 2, 2, 393, 391, 3, 2, 2, 2, 393, 394, 3, 2, 2, 2, 394, 396, 3, 2, 2, 2, 395, 389, 3, 2, 2, 2, 395, 396, 3, 2, 2, 2, 396, 96, 3, 2, 2, 2, 397, 398, 7, 100, 2, 2, 398, 399, 7, 123, 2, 2, 399, 400, 7, 118, 2, 2, 400, 401, 7, 103, 2, 2, 401, 402, 7, 117, 2, 2, 402, 404, 3, 2, 2, 2, 403, 405, 5, 99, 50, 2, 404, 403, 3, 2, 2, 2, 404, 405, 3, 2, 2, 2, 405, 98, 3, 2, 2, 2, 406, 410, 9, 5, 2, 2, 407, 409, 9, 2, 2, 2, 408, 407, 3, 2, 2, 2, 409, 412, 3, 2, 2, 2, 410, 408, 3, 2, 2, 2, 410, 411, 3, 2, 2, 2, 411, 100, 3, 2, 2, 2, 412, 410, 3, 2, 2, 2, 413, 419, 7, 36, 2, 2, 414, 415, 7, 94, 2, 2, 415, 418, 7, 36, 2, 2, 416, 418, 10, 6, 2, 2, 417, 414, 3, 2, 2, 2, 417, 416, 3, 2, 2, 2, 418, 421, 3, 2, 2, 2, 419, 420, 3, 2, 2, 2, 419, 417, 3, 2, 2, 2, 420, 422, 3, 2, 2, 2, 421, 419, 3, 2, 2, 2, 422, 434, 7, 36, 2, 2, 423, 429, 7, 41, 2, 2, 424, 425, 7, 94, 2, 2, 425, 428, 7, 41, 2, 2, 426, 428, 10, 7, 2, 2, 427, 424, 3, 2, 2, 2, 427, 426, 3, 2, 2, 2, 428, 431, 3, 2, 2, 2, 429, 430, 3, 2, 2, 2, 429, 427, 3, 2, 2, 2, 430, 432, 3, 2, 2, 2, 431, 429, 3, 2, 2, 2, 432, 434, 7, 41, 2, 2, 433, 413, 3, 2, 2, 2, 433, 423, 3, 2, 2, 2, 434, 102, 3, 2, 2, 2, 435, 436, 7, 102, 2, 2, 436, 437, 7, 99, 2, 2, 437, 438, 7, 118, 2, 2, 438, 439, 7, 103, 2, 2, 439, 440, 7, 42, 2, 2, 440, 441, 3, 2, 2, 2, 441, 442, 5, 101, 51, 2, 442, 443, 7, 43, 2, 2, 443, 104, 3, 2, 2, 2, 444, 445, 7, 50, 2, 2, 445, 449, 9, 8, 2, 2, 446, 448, 9, 9, 2, 2, 447, 446, 3, 2, 2, 2, 448, 451, 3, 2, 2, 2, 449, 447, 3, 2, 2, 2, 449, 450, 3, 2, 2, 2, 450, 106, 3, 2, 2, 2, 451, 449, 3, 2, 2, 2, 452, 453, 7, 118, 2, 2, 453, 454, 7, 122, 2, 2, 454, 455, 7, 48, 2, 2, 455, 456, 7, 99, 2, 2, 456, 457, 7, 105, 2, 2, 457, 466, 7, 103, 2, 2, 458, 459, 7, 118, 2, 2, 459, 460, 7, 122, 2, 2, 460, 461, 7, 48, 2, 2, 461, 462, 7, 118, 2, 2, 462, 463, 7, 107, 2, 2, 463, 464, 7, 111, 2, 2, 464, 466, 7, 103, 2, 2, 465, 452, 3, 2, 2, 2, 465, 458, 3, 2, 2, 2, 466, 108, 3, 2, 2, 2, 467, 468, 7, 118, 2, 2, 468, 469, 7, 122, 2, 2, 469, 470, 7, 48, 2, 2, 470, 471, 7, 120, 2, 2, 471, 472, 7, 103, 2, 2, 472, 473, 7, 116, 2, 2, 473, 474, 7, 117, 2, 2, 474, 475, 7, 107, 2, 2, 475, 476, 7, 113, 2, 2, 476, 596, 7, 112, 2, 2, 477, 478, 7, 118, 2, 2, 478, 479, 7, 122, 2, 2, 479, 480, 7, 48, 2, 2, 480, 481, 7, 106, 2, 2, 481, 482, 7, 99, 2, 2, 482, 483, 7, 117, 2, 2, 483, 484, 7, 106, 2, 2, 484, 485, 7, 82, 2, 2, 485, 486, 7, 116, 2, 2, 486, 487, 7, 103, 2, 2, 487, 488, 7, 120, 2, 2, 488, 489, 7, 113, 2, 2, 489, 490, 7, 119, 2, 2, 490, 491, 7, 118, 2, 2, 491, 596, 7, 117, 2, 2, 492, 493, 7, 118, 2, 2, 493, 494, 7, 122, 2, 2, 494, 495, 7, 48, 2, 2, 495, 496, 7, 106, 2, 2, 496, 497, 7, 99, 2, 2, 497, 498, 7, 117, 2, 2, 498, 499, 7, 106, 2, 2, 499, 500, 7, 85, 2, 2, 500, 501, 7, 103, 2, 2, 501, 502, 7, 115, 2, 2, 502, 503, 7, 119, 2, 2, 503, 504, 7, 103, 2, 2, 504, 505, 7, 112, 2, 2, 505, 506, 7, 101, 2, 2, 506, 596, 7, 103, 2, 2, 507, 508, 7, 118, 2, 2, 508, 509, 7, 122, 2, 2, 509, 510, 7, 48, 2, 2, 510, 511, 7, 113, 2, 2, 511, 512, 7, 119, 2, 2, 512, 513, 7, 118, 2, 2, 513, 514, 7, 114, 2, 2, 514, 515, 7, 113, 2, 2, 515, 516, 7, 107, 2, 2, 516, 517, 7, 112, 2, 2, 517, 596, 7, 118, 2, 2, 518, 519, 7, 118, 2, 2, 519, 520, 7, 122, 2, 2, 520, 521, 7, 48, 2, 2, 521, 522, 7, 100, 2, 2, 522, 523, 7, 123, 2, 2, 523, 524, 7, 118, 2, 2, 524, 525, 7, 103, 2, 2, 525, 526, 7, 101, 2, 2, 526, 527, 7, 113, 2, 2, 527, 528, 7, 102, 2, 2, 528, 596, 7, 103, 2, 2, 529, 530, 7, 118, 2, 2, 530, 531, 7, 122, 2, 2, 531, 532, 7, 48, 2, 2, 532, 533, 7, 120, 2, 2, 533, 534, 7, 99, 2, 2, 534, 535, 7, 110, 2, 2, 535, 536, 7, 119, 2, 2, 536, 596, 7, 103, 2, 2, 537, 538, 7, 118, 2, 2, 538, 539, 7, 122, 2, 2, 539, 540, 7, 48, 2, 2, 540, 541, 7, 117, 2, 2, 541, 542, 7, 103, 2, 2, 542, 543, 7, 115, 2, 2, 543, 544, 7, 119, 2, 2, 544, 545, 7, 103, 2, 2, 545, 546, 7, 112, 2, 2, 546, 547, 7, 101, 2, 2, 547, 596, 7, 103, 2, 2, 548, 549, 7, 118, 2, 2, 549, 550, 7, 122, 2, 2, 550, 551, 7, 48, 2, 2, 551, 552, 7, 106, 2, 2, 552, 553, 7, 99, 2, 2, 553, 554, 7, 117, 2, 2, 554, 555, 7, 106, 2, 2, 555, 556, 7, 81, 2, 2, 556, 557, 7, 119, 2, 2, 557, 558, 7, 118, 2, 2, 558, 559, 7, 114, 2, 2, 559, 560, 7, 119, 2, 2, 560, 561, 7, 118, 2, 2, 561, 596, 7, 117, 2, 2, 562, 563, 7, 118, 2, 2, 563, 564, 7, 122, 2, 2, 564, 565, 7, 48, 2, 2, 565, 566, 7, 110, 2, 2, 566, 567, 7, 113, 2, 2, 567, 568, 7, 101, 2, 2, 568, 569, 7, 109, 2, 2, 569, 570, 7, 118, 2, 2, 570, 571, 7, 107, 2, 2, 571, 572, 7, 111, 2, 2, 572, 596, 7, 103, 2, 2, 573, 574, 7, 118, 2, 2, 574, 575, 7, 122, 2, 2, 575, 576, 7, 48, 2, 2, 576, 577, 7, 106, 2, 2, 577, 578, 7, 99, 2, 2, 578, 579, 7, 117, 2, 2, 579, 580, 7, 106, 2, 2, 580, 581, 7, 118, 2, 2, 581, 582, 7, 123, 2, 2, 582, 583, 7, 114, 2, 2, 583, 596, 7, 103, 2, 2, 584, 585, 7, 118, 2, 2, 585, 586, 7, 122, 2, 2, 586, 587, 7, 48, 2, 2, 587, 588, 7, 114, 2, 2, 588, 589, 7, 116, 2, 2, 589, 590, 7, 103, 2, 2, 590, 591, 7, 107, 2, 2, 591, 592, 7, 111, 2, 2, 592, 593, 7, 99, 2, 2, 593, 594, 7, 105, 2, 2, 594, 596, 7, 103, 2, 2, 595, 467, 3, 2, 2, 2, 595, 477, 3, 2, 2, 2, 595, 492, 3, 2, 2, 2, 595, 507, 3, 2, 2, 2, 595, 518, 3, 2, 2, 2, 595, 529, 3, 2, 2, 2, 595, 537, 3, 2, 2, 2, 595, 548, 3, 2, 2, 2, 595, 562, 3, 2, 2, 2, 595, 573, 3, 2, 2, 2, 595, 584, 3, 2, 2, 2, 596, 110, 3, 2, 2, 2, 597, 601, 9, 10, 2, 2, 598, 600, 9, 11, 2, 2, 599, 598, 3, 2, 2, 2, 600, 603, 3, 2, 2, 2, 601, 599, 3, 2, 2, 2, 601, 602, 3, 2, 2, 2, 602, 112, 3, 2, 2, 2, 603, 601, 3, 2, 2, 2, 604, 606, 9, 12, 2, 2, 605, 604, 3, 2, 2, 2, 606, 607, 3, 2, 2, 2, 607, 605, 3, 2, 2, 2, 607, 608, 3, 2, 2, 2, 608, 609, 3, 2, 2, 2, 609, 610, 8, 57, 2, 2, 610, 114, 3, 2, 2, 2, 611, 612, 7, 49, 2, 2, 612, 613, 7, 44, 2, 2, 613, 617, 3, 2, 2, 2, 614, 616, 11, 2, 2, 2, 615, 614, 3, 2, 2, 2, 616, 619, 3, 2, 2, 2, 617, 618, 3, 2, 2, 2, 617, 615, 3, 2, 2, 2, 618, 620, 3, 2, 2, 2, 619, 617, 3, 2, 2, 2, 620, 621, 7, 44, 2, 2, 621, 622, 7, 49, 2, 2, 622, 623, 3, 2, 2, 2, 623, 624, 8, 58, 3, 2, 624, 116, 3, 2, 2, 2, 625, 626, 7, 49, 2, 2, 626, 627, 7, 49, 2, 2, 627, 631, 3, 2, 2, 2, 628, 630, 10, 13, 2, 2, 629, 628, 3, 2, 2, 2, 630, 633, 3, 2, 2, 2, 631, 629, 3, 2, 2, 2, 631, 632, 3, 2, 2, 2, 632, 634, 3, 2, 2, 2, 633, 631, 3, 2, 2, 2, 634, 635, 8, 59, 3, 2, 635, 118, 3, 2, 2, 2, 26, 2, 297, 303, 309, 320, 379, 382, 387, 393, 395, 404, 410, 417, 419, 427, 429, 433, 449, 465, 595, 601, 607, 617, 631, 4, 8, 2, 2, 2, 3, 2] \ No newline at end of file diff --git a/vscode-cashscript/src/CashscriptLinter/grammar/CashScriptLexer.tokens b/vscode-cashscript/src/CashscriptLinter/grammar/CashScriptLexer.tokens deleted file mode 100644 index 4e7b5bb..0000000 --- a/vscode-cashscript/src/CashscriptLinter/grammar/CashScriptLexer.tokens +++ /dev/null @@ -1,101 +0,0 @@ -T__0=1 -T__1=2 -T__2=3 -T__3=4 -T__4=5 -T__5=6 -T__6=7 -T__7=8 -T__8=9 -T__9=10 -T__10=11 -T__11=12 -T__12=13 -T__13=14 -T__14=15 -T__15=16 -T__16=17 -T__17=18 -T__18=19 -T__19=20 -T__20=21 -T__21=22 -T__22=23 -T__23=24 -T__24=25 -T__25=26 -T__26=27 -T__27=28 -T__28=29 -T__29=30 -T__30=31 -T__31=32 -T__32=33 -T__33=34 -T__34=35 -T__35=36 -T__36=37 -T__37=38 -T__38=39 -T__39=40 -T__40=41 -T__41=42 -T__42=43 -VersionLiteral=44 -BooleanLiteral=45 -NumberUnit=46 -NumberLiteral=47 -Bytes=48 -Bound=49 -StringLiteral=50 -DateLiteral=51 -HexLiteral=52 -TxVar=53 -PreimageField=54 -Identifier=55 -WHITESPACE=56 -COMMENT=57 -LINE_COMMENT=58 -'pragma'=1 -';'=2 -'cashscript'=3 -'^'=4 -'~'=5 -'>='=6 -'>'=7 -'<'=8 -'<='=9 -'='=10 -'contract'=11 -'{'=12 -'}'=13 -'function'=14 -'('=15 -','=16 -')'=17 -'require'=18 -'if'=19 -'else'=20 -'new'=21 -'['=22 -']'=23 -'.reverse()'=24 -'.length'=25 -'!'=26 -'-'=27 -'.split'=28 -'/'=29 -'%'=30 -'+'=31 -'=='=32 -'!='=33 -'&'=34 -'|'=35 -'&&'=36 -'||'=37 -'int'=38 -'bool'=39 -'string'=40 -'pubkey'=41 -'sig'=42 -'datasig'=43 diff --git a/vscode-cashscript/src/CashscriptLinter/grammar/CashScriptLexer.ts b/vscode-cashscript/src/CashscriptLinter/grammar/CashScriptLexer.ts deleted file mode 100644 index d1ee595..0000000 --- a/vscode-cashscript/src/CashscriptLinter/grammar/CashScriptLexer.ts +++ /dev/null @@ -1,463 +0,0 @@ -// Generated from grammar/CashScript.g4 by ANTLR 4.9.0-SNAPSHOT - - -import { ATN } from "antlr4ts/atn/ATN"; -import { ATNDeserializer } from "antlr4ts/atn/ATNDeserializer"; -import { CharStream } from "antlr4ts/CharStream"; -import { Lexer } from "antlr4ts/Lexer"; -import { LexerATNSimulator } from "antlr4ts/atn/LexerATNSimulator"; -import { NotNull } from "antlr4ts/Decorators"; -import { Override } from "antlr4ts/Decorators"; -import { RuleContext } from "antlr4ts/RuleContext"; -import { Vocabulary } from "antlr4ts/Vocabulary"; -import { VocabularyImpl } from "antlr4ts/VocabularyImpl"; - -import * as Utils from "antlr4ts/misc/Utils"; - - -export class CashScriptLexer extends Lexer { - public static readonly T__0 = 1; - public static readonly T__1 = 2; - public static readonly T__2 = 3; - public static readonly T__3 = 4; - public static readonly T__4 = 5; - public static readonly T__5 = 6; - public static readonly T__6 = 7; - public static readonly T__7 = 8; - public static readonly T__8 = 9; - public static readonly T__9 = 10; - public static readonly T__10 = 11; - public static readonly T__11 = 12; - public static readonly T__12 = 13; - public static readonly T__13 = 14; - public static readonly T__14 = 15; - public static readonly T__15 = 16; - public static readonly T__16 = 17; - public static readonly T__17 = 18; - public static readonly T__18 = 19; - public static readonly T__19 = 20; - public static readonly T__20 = 21; - public static readonly T__21 = 22; - public static readonly T__22 = 23; - public static readonly T__23 = 24; - public static readonly T__24 = 25; - public static readonly T__25 = 26; - public static readonly T__26 = 27; - public static readonly T__27 = 28; - public static readonly T__28 = 29; - public static readonly T__29 = 30; - public static readonly T__30 = 31; - public static readonly T__31 = 32; - public static readonly T__32 = 33; - public static readonly T__33 = 34; - public static readonly T__34 = 35; - public static readonly T__35 = 36; - public static readonly T__36 = 37; - public static readonly T__37 = 38; - public static readonly T__38 = 39; - public static readonly T__39 = 40; - public static readonly T__40 = 41; - public static readonly T__41 = 42; - public static readonly T__42 = 43; - public static readonly VersionLiteral = 44; - public static readonly BooleanLiteral = 45; - public static readonly NumberUnit = 46; - public static readonly NumberLiteral = 47; - public static readonly Bytes = 48; - public static readonly Bound = 49; - public static readonly StringLiteral = 50; - public static readonly DateLiteral = 51; - public static readonly HexLiteral = 52; - public static readonly TxVar = 53; - public static readonly PreimageField = 54; - public static readonly Identifier = 55; - public static readonly WHITESPACE = 56; - public static readonly COMMENT = 57; - public static readonly LINE_COMMENT = 58; - - // tslint:disable:no-trailing-whitespace - public static readonly channelNames: string[] = [ - "DEFAULT_TOKEN_CHANNEL", "HIDDEN", - ]; - - // tslint:disable:no-trailing-whitespace - public static readonly modeNames: string[] = [ - "DEFAULT_MODE", - ]; - - public static readonly ruleNames: string[] = [ - "T__0", "T__1", "T__2", "T__3", "T__4", "T__5", "T__6", "T__7", "T__8", - "T__9", "T__10", "T__11", "T__12", "T__13", "T__14", "T__15", "T__16", - "T__17", "T__18", "T__19", "T__20", "T__21", "T__22", "T__23", "T__24", - "T__25", "T__26", "T__27", "T__28", "T__29", "T__30", "T__31", "T__32", - "T__33", "T__34", "T__35", "T__36", "T__37", "T__38", "T__39", "T__40", - "T__41", "T__42", "VersionLiteral", "BooleanLiteral", "NumberUnit", "NumberLiteral", - "Bytes", "Bound", "StringLiteral", "DateLiteral", "HexLiteral", "TxVar", - "PreimageField", "Identifier", "WHITESPACE", "COMMENT", "LINE_COMMENT", - ]; - - private static readonly _LITERAL_NAMES: Array = [ - undefined, "'pragma'", "';'", "'cashscript'", "'^'", "'~'", "'>='", "'>'", - "'<'", "'<='", "'='", "'contract'", "'{'", "'}'", "'function'", "'('", - "','", "')'", "'require'", "'if'", "'else'", "'new'", "'['", "']'", "'.reverse()'", - "'.length'", "'!'", "'-'", "'.split'", "'/'", "'%'", "'+'", "'=='", "'!='", - "'&'", "'|'", "'&&'", "'||'", "'int'", "'bool'", "'string'", "'pubkey'", - "'sig'", "'datasig'", - ]; - private static readonly _SYMBOLIC_NAMES: Array = [ - undefined, undefined, undefined, undefined, undefined, undefined, undefined, - undefined, undefined, undefined, undefined, undefined, undefined, undefined, - undefined, undefined, undefined, undefined, undefined, undefined, undefined, - undefined, undefined, undefined, undefined, undefined, undefined, undefined, - undefined, undefined, undefined, undefined, undefined, undefined, undefined, - undefined, undefined, undefined, undefined, undefined, undefined, undefined, - undefined, undefined, "VersionLiteral", "BooleanLiteral", "NumberUnit", - "NumberLiteral", "Bytes", "Bound", "StringLiteral", "DateLiteral", "HexLiteral", - "TxVar", "PreimageField", "Identifier", "WHITESPACE", "COMMENT", "LINE_COMMENT", - ]; - public static readonly VOCABULARY: Vocabulary = new VocabularyImpl(CashScriptLexer._LITERAL_NAMES, CashScriptLexer._SYMBOLIC_NAMES, []); - - // @Override - // @NotNull - public get vocabulary(): Vocabulary { - return CashScriptLexer.VOCABULARY; - } - // tslint:enable:no-trailing-whitespace - - - constructor(input: CharStream) { - super(input); - this._interp = new LexerATNSimulator(CashScriptLexer._ATN, this); - } - - // @Override - public get grammarFileName(): string { return "CashScript.g4"; } - - // @Override - public get ruleNames(): string[] { return CashScriptLexer.ruleNames; } - - // @Override - public get serializedATN(): string { return CashScriptLexer._serializedATN; } - - // @Override - public get channelNames(): string[] { return CashScriptLexer.channelNames; } - - // @Override - public get modeNames(): string[] { return CashScriptLexer.modeNames; } - - private static readonly _serializedATNSegments: number = 2; - private static readonly _serializedATNSegment0: string = - "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x02<\u027C\b\x01" + - "\x04\x02\t\x02\x04\x03\t\x03\x04\x04\t\x04\x04\x05\t\x05\x04\x06\t\x06" + - "\x04\x07\t\x07\x04\b\t\b\x04\t\t\t\x04\n\t\n\x04\v\t\v\x04\f\t\f\x04\r" + - "\t\r\x04\x0E\t\x0E\x04\x0F\t\x0F\x04\x10\t\x10\x04\x11\t\x11\x04\x12\t" + - "\x12\x04\x13\t\x13\x04\x14\t\x14\x04\x15\t\x15\x04\x16\t\x16\x04\x17\t" + - "\x17\x04\x18\t\x18\x04\x19\t\x19\x04\x1A\t\x1A\x04\x1B\t\x1B\x04\x1C\t" + - "\x1C\x04\x1D\t\x1D\x04\x1E\t\x1E\x04\x1F\t\x1F\x04 \t \x04!\t!\x04\"\t" + - "\"\x04#\t#\x04$\t$\x04%\t%\x04&\t&\x04\'\t\'\x04(\t(\x04)\t)\x04*\t*\x04" + - "+\t+\x04,\t,\x04-\t-\x04.\t.\x04/\t/\x040\t0\x041\t1\x042\t2\x043\t3\x04" + - "4\t4\x045\t5\x046\t6\x047\t7\x048\t8\x049\t9\x04:\t:\x04;\t;\x03\x02\x03" + - "\x02\x03\x02\x03\x02\x03\x02\x03\x02\x03\x02\x03\x03\x03\x03\x03\x04\x03" + - "\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03\x04\x03" + - "\x04\x03\x05\x03\x05\x03\x06\x03\x06\x03\x07\x03\x07\x03\x07\x03\b\x03" + - "\b\x03\t\x03\t\x03\n\x03\n\x03\n\x03\v\x03\v\x03\f\x03\f\x03\f\x03\f\x03" + - "\f\x03\f\x03\f\x03\f\x03\f\x03\r\x03\r\x03\x0E\x03\x0E\x03\x0F\x03\x0F" + - "\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x0F\x03\x10\x03\x10" + - "\x03\x11\x03\x11\x03\x12\x03\x12\x03\x13\x03\x13\x03\x13\x03\x13\x03\x13" + - "\x03\x13\x03\x13\x03\x13\x03\x14\x03\x14\x03\x14\x03\x15\x03\x15\x03\x15" + - "\x03\x15\x03\x15\x03\x16\x03\x16\x03\x16\x03\x16\x03\x17\x03\x17\x03\x18" + - "\x03\x18\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19\x03\x19" + - "\x03\x19\x03\x19\x03\x19\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A\x03\x1A" + - "\x03\x1A\x03\x1A\x03\x1B\x03\x1B\x03\x1C\x03\x1C\x03\x1D\x03\x1D\x03\x1D" + - "\x03\x1D\x03\x1D\x03\x1D\x03\x1D\x03\x1E\x03\x1E\x03\x1F\x03\x1F\x03 " + - "\x03 \x03!\x03!\x03!\x03\"\x03\"\x03\"\x03#\x03#\x03$\x03$\x03%\x03%\x03" + - "%\x03&\x03&\x03&\x03\'\x03\'\x03\'\x03\'\x03(\x03(\x03(\x03(\x03(\x03" + - ")\x03)\x03)\x03)\x03)\x03)\x03)\x03*\x03*\x03*\x03*\x03*\x03*\x03*\x03" + - "+\x03+\x03+\x03+\x03,\x03,\x03,\x03,\x03,\x03,\x03,\x03,\x03-\x06-\u0128" + - "\n-\r-\x0E-\u0129\x03-\x03-\x06-\u012E\n-\r-\x0E-\u012F\x03-\x03-\x06" + - "-\u0134\n-\r-\x0E-\u0135\x03.\x03.\x03.\x03.\x03.\x03.\x03.\x03.\x03." + - "\x05.\u0141\n.\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/" + - "\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03" + - "/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03" + - "/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03/\x03" + - "/\x03/\x03/\x03/\x03/\x05/\u017C\n/\x030\x050\u017F\n0\x030\x060\u0182" + - "\n0\r0\x0E0\u0183\x030\x030\x060\u0188\n0\r0\x0E0\u0189\x050\u018C\n0" + - "\x031\x031\x031\x031\x031\x031\x031\x051\u0195\n1\x032\x032\x072\u0199" + - "\n2\f2\x0E2\u019C\v2\x033\x033\x033\x033\x073\u01A2\n3\f3\x0E3\u01A5\v" + - "3\x033\x033\x033\x033\x033\x073\u01AC\n3\f3\x0E3\u01AF\v3\x033\x053\u01B2" + - "\n3\x034\x034\x034\x034\x034\x034\x034\x034\x034\x035\x035\x035\x075\u01C0" + - "\n5\f5\x0E5\u01C3\v5\x036\x036\x036\x036\x036\x036\x036\x036\x036\x03" + - "6\x036\x036\x036\x056\u01D2\n6\x037\x037\x037\x037\x037\x037\x037\x03" + - "7\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x03" + - "7\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x03" + - "7\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x03" + - "7\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x03" + - "7\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x03" + - "7\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x03" + - "7\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x03" + - "7\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x037\x03" + - "7\x037\x037\x037\x037\x037\x037\x037\x037\x057\u0254\n7\x038\x038\x07" + - "8\u0258\n8\f8\x0E8\u025B\v8\x039\x069\u025E\n9\r9\x0E9\u025F\x039\x03" + - "9\x03:\x03:\x03:\x03:\x07:\u0268\n:\f:\x0E:\u026B\v:\x03:\x03:\x03:\x03" + - ":\x03:\x03;\x03;\x03;\x03;\x07;\u0276\n;\f;\x0E;\u0279\v;\x03;\x03;\x05" + - "\u01A3\u01AD\u0269\x02\x02<\x03\x02\x03\x05\x02\x04\x07\x02\x05\t\x02" + - "\x06\v\x02\x07\r\x02\b\x0F\x02\t\x11\x02\n\x13\x02\v\x15\x02\f\x17\x02" + - "\r\x19\x02\x0E\x1B\x02\x0F\x1D\x02\x10\x1F\x02\x11!\x02\x12#\x02\x13%" + - "\x02\x14\'\x02\x15)\x02\x16+\x02\x17-\x02\x18/\x02\x191\x02\x1A3\x02\x1B" + - "5\x02\x1C7\x02\x1D9\x02\x1E;\x02\x1F=\x02 ?\x02!A\x02\"C\x02#E\x02$G\x02" + - "%I\x02&K\x02\'M\x02(O\x02)Q\x02*S\x02+U\x02,W\x02-Y\x02.[\x02/]\x020_" + - "\x021a\x022c\x023e\x024g\x025i\x026k\x027m\x028o\x029q\x02:s\x02;u\x02" + - "<\x03\x02\x0E\x03\x022;\x03\x02//\x04\x02GGgg\x03\x023;\x05\x02\f\f\x0F" + - "\x0F$$\x05\x02\f\f\x0F\x0F))\x04\x02ZZzz\x05\x022;CHch\x04\x02C\\c|\x06" + - "\x022;C\\aac|\x05\x02\v\f\x0E\x0F\"\"\x04\x02\f\f\x0F\x0F\x02\u02A3\x02" + - "\x03\x03\x02\x02\x02\x02\x05\x03\x02\x02\x02\x02\x07\x03\x02\x02\x02\x02" + - "\t\x03\x02\x02\x02\x02\v\x03\x02\x02\x02\x02\r\x03\x02\x02\x02\x02\x0F" + - "\x03\x02\x02\x02\x02\x11\x03\x02\x02\x02\x02\x13\x03\x02\x02\x02\x02\x15" + - "\x03\x02\x02\x02\x02\x17\x03\x02\x02\x02\x02\x19\x03\x02\x02\x02\x02\x1B" + - "\x03\x02\x02\x02\x02\x1D\x03\x02\x02\x02\x02\x1F\x03\x02\x02\x02\x02!" + - "\x03\x02\x02\x02\x02#\x03\x02\x02\x02\x02%\x03\x02\x02\x02\x02\'\x03\x02" + - "\x02\x02\x02)\x03\x02\x02\x02\x02+\x03\x02\x02\x02\x02-\x03\x02\x02\x02" + - "\x02/\x03\x02\x02\x02\x021\x03\x02\x02\x02\x023\x03\x02\x02\x02\x025\x03" + - "\x02\x02\x02\x027\x03\x02\x02\x02\x029\x03\x02\x02\x02\x02;\x03\x02\x02" + - "\x02\x02=\x03\x02\x02\x02\x02?\x03\x02\x02\x02\x02A\x03\x02\x02\x02\x02" + - "C\x03\x02\x02\x02\x02E\x03\x02\x02\x02\x02G\x03\x02\x02\x02\x02I\x03\x02" + - "\x02\x02\x02K\x03\x02\x02\x02\x02M\x03\x02\x02\x02\x02O\x03\x02\x02\x02" + - "\x02Q\x03\x02\x02\x02\x02S\x03\x02\x02\x02\x02U\x03\x02\x02\x02\x02W\x03" + - "\x02\x02\x02\x02Y\x03\x02\x02\x02\x02[\x03\x02\x02\x02\x02]\x03\x02\x02" + - "\x02\x02_\x03\x02\x02\x02\x02a\x03\x02\x02\x02\x02c\x03\x02\x02\x02\x02" + - "e\x03\x02\x02\x02\x02g\x03\x02\x02\x02\x02i\x03\x02\x02\x02\x02k\x03\x02" + - "\x02\x02\x02m\x03\x02\x02\x02\x02o\x03\x02\x02\x02\x02q\x03\x02\x02\x02" + - "\x02s\x03\x02\x02\x02\x02u\x03\x02\x02\x02\x03w\x03\x02\x02\x02\x05~\x03" + - "\x02\x02\x02\x07\x80\x03\x02\x02\x02\t\x8B\x03\x02\x02\x02\v\x8D\x03\x02" + - "\x02\x02\r\x8F\x03\x02\x02\x02\x0F\x92\x03\x02\x02\x02\x11\x94\x03\x02" + - "\x02\x02\x13\x96\x03\x02\x02\x02\x15\x99\x03\x02\x02\x02\x17\x9B\x03\x02" + - "\x02\x02\x19\xA4\x03\x02\x02\x02\x1B\xA6\x03\x02\x02\x02\x1D\xA8\x03\x02" + - "\x02\x02\x1F\xB1\x03\x02\x02\x02!\xB3\x03\x02\x02\x02#\xB5\x03\x02\x02" + - "\x02%\xB7\x03\x02\x02\x02\'\xBF\x03\x02\x02\x02)\xC2\x03\x02\x02\x02+" + - "\xC7\x03\x02\x02\x02-\xCB\x03\x02\x02\x02/\xCD\x03\x02\x02\x021\xCF\x03" + - "\x02\x02\x023\xDA\x03\x02\x02\x025\xE2\x03\x02\x02\x027\xE4\x03\x02\x02" + - "\x029\xE6\x03\x02\x02\x02;\xED\x03\x02\x02\x02=\xEF\x03\x02\x02\x02?\xF1" + - "\x03\x02\x02\x02A\xF3\x03\x02\x02\x02C\xF6\x03\x02\x02\x02E\xF9\x03\x02" + - "\x02\x02G\xFB\x03\x02\x02\x02I\xFD\x03\x02\x02\x02K\u0100\x03\x02\x02" + - "\x02M\u0103\x03\x02\x02\x02O\u0107\x03\x02\x02\x02Q\u010C\x03\x02\x02" + - "\x02S\u0113\x03\x02\x02\x02U\u011A\x03\x02\x02\x02W\u011E\x03\x02\x02" + - "\x02Y\u0127\x03\x02\x02\x02[\u0140\x03\x02\x02\x02]\u017B\x03\x02\x02" + - "\x02_\u017E\x03\x02\x02\x02a\u018D\x03\x02\x02\x02c\u0196\x03\x02\x02" + - "\x02e\u01B1\x03\x02\x02\x02g\u01B3\x03\x02\x02\x02i\u01BC\x03\x02\x02" + - "\x02k\u01D1\x03\x02\x02\x02m\u0253\x03\x02\x02\x02o\u0255\x03\x02\x02" + - "\x02q\u025D\x03\x02\x02\x02s\u0263\x03\x02\x02\x02u\u0271\x03\x02\x02" + - "\x02wx\x07r\x02\x02xy\x07t\x02\x02yz\x07c\x02\x02z{\x07i\x02\x02{|\x07" + - "o\x02\x02|}\x07c\x02\x02}\x04\x03\x02\x02\x02~\x7F\x07=\x02\x02\x7F\x06" + - "\x03\x02\x02\x02\x80\x81\x07e\x02\x02\x81\x82\x07c\x02\x02\x82\x83\x07" + - "u\x02\x02\x83\x84\x07j\x02\x02\x84\x85\x07u\x02\x02\x85\x86\x07e\x02\x02" + - "\x86\x87\x07t\x02\x02\x87\x88\x07k\x02\x02\x88\x89\x07r\x02\x02\x89\x8A" + - "\x07v\x02\x02\x8A\b\x03\x02\x02\x02\x8B\x8C\x07`\x02\x02\x8C\n\x03\x02" + - "\x02\x02\x8D\x8E\x07\x80\x02\x02\x8E\f\x03\x02\x02\x02\x8F\x90\x07@\x02" + - "\x02\x90\x91\x07?\x02\x02\x91\x0E\x03\x02\x02\x02\x92\x93\x07@\x02\x02" + - "\x93\x10\x03\x02\x02\x02\x94\x95\x07>\x02\x02\x95\x12\x03\x02\x02\x02" + - "\x96\x97\x07>\x02\x02\x97\x98\x07?\x02\x02\x98\x14\x03\x02\x02\x02\x99" + - "\x9A\x07?\x02\x02\x9A\x16\x03\x02\x02\x02\x9B\x9C\x07e\x02\x02\x9C\x9D" + - "\x07q\x02\x02\x9D\x9E\x07p\x02\x02\x9E\x9F\x07v\x02\x02\x9F\xA0\x07t\x02" + - "\x02\xA0\xA1\x07c\x02\x02\xA1\xA2\x07e\x02\x02\xA2\xA3\x07v\x02\x02\xA3" + - "\x18\x03\x02\x02\x02\xA4\xA5\x07}\x02\x02\xA5\x1A\x03\x02\x02\x02\xA6" + - "\xA7\x07\x7F\x02\x02\xA7\x1C\x03\x02\x02\x02\xA8\xA9\x07h\x02\x02\xA9" + - "\xAA\x07w\x02\x02\xAA\xAB\x07p\x02\x02\xAB\xAC\x07e\x02\x02\xAC\xAD\x07" + - "v\x02\x02\xAD\xAE\x07k\x02\x02\xAE\xAF\x07q\x02\x02\xAF\xB0\x07p\x02\x02" + - "\xB0\x1E\x03\x02\x02\x02\xB1\xB2\x07*\x02\x02\xB2 \x03\x02\x02\x02\xB3" + - "\xB4\x07.\x02\x02\xB4\"\x03\x02\x02\x02\xB5\xB6\x07+\x02\x02\xB6$\x03" + - "\x02\x02\x02\xB7\xB8\x07t\x02\x02\xB8\xB9\x07g\x02\x02\xB9\xBA\x07s\x02" + - "\x02\xBA\xBB\x07w\x02\x02\xBB\xBC\x07k\x02\x02\xBC\xBD\x07t\x02\x02\xBD" + - "\xBE\x07g\x02\x02\xBE&\x03\x02\x02\x02\xBF\xC0\x07k\x02\x02\xC0\xC1\x07" + - "h\x02\x02\xC1(\x03\x02\x02\x02\xC2\xC3\x07g\x02\x02\xC3\xC4\x07n\x02\x02" + - "\xC4\xC5\x07u\x02\x02\xC5\xC6\x07g\x02\x02\xC6*\x03\x02\x02\x02\xC7\xC8" + - "\x07p\x02\x02\xC8\xC9\x07g\x02\x02\xC9\xCA\x07y\x02\x02\xCA,\x03\x02\x02" + - "\x02\xCB\xCC\x07]\x02\x02\xCC.\x03\x02\x02\x02\xCD\xCE\x07_\x02\x02\xCE" + - "0\x03\x02\x02\x02\xCF\xD0\x070\x02\x02\xD0\xD1\x07t\x02\x02\xD1\xD2\x07" + - "g\x02\x02\xD2\xD3\x07x\x02\x02\xD3\xD4\x07g\x02\x02\xD4\xD5\x07t\x02\x02" + - "\xD5\xD6\x07u\x02\x02\xD6\xD7\x07g\x02\x02\xD7\xD8\x07*\x02\x02\xD8\xD9" + - "\x07+\x02\x02\xD92\x03\x02\x02\x02\xDA\xDB\x070\x02\x02\xDB\xDC\x07n\x02" + - "\x02\xDC\xDD\x07g\x02\x02\xDD\xDE\x07p\x02\x02\xDE\xDF\x07i\x02\x02\xDF" + - "\xE0\x07v\x02\x02\xE0\xE1\x07j\x02\x02\xE14\x03\x02\x02\x02\xE2\xE3\x07" + - "#\x02\x02\xE36\x03\x02\x02\x02\xE4\xE5\x07/\x02\x02\xE58\x03\x02\x02\x02" + - "\xE6\xE7\x070\x02\x02\xE7\xE8\x07u\x02\x02\xE8\xE9\x07r\x02\x02\xE9\xEA" + - "\x07n\x02\x02\xEA\xEB\x07k\x02\x02\xEB\xEC\x07v\x02\x02\xEC:\x03\x02\x02" + - "\x02\xED\xEE\x071\x02\x02\xEE<\x03\x02\x02\x02\xEF\xF0\x07\'\x02\x02\xF0" + - ">\x03\x02\x02\x02\xF1\xF2\x07-\x02\x02\xF2@\x03\x02\x02\x02\xF3\xF4\x07" + - "?\x02\x02\xF4\xF5\x07?\x02\x02\xF5B\x03\x02\x02\x02\xF6\xF7\x07#\x02\x02" + - "\xF7\xF8\x07?\x02\x02\xF8D\x03\x02\x02\x02\xF9\xFA\x07(\x02\x02\xFAF\x03" + - "\x02\x02\x02\xFB\xFC\x07~\x02\x02\xFCH\x03\x02\x02\x02\xFD\xFE\x07(\x02" + - "\x02\xFE\xFF\x07(\x02\x02\xFFJ\x03\x02\x02\x02\u0100\u0101\x07~\x02\x02" + - "\u0101\u0102\x07~\x02\x02\u0102L\x03\x02\x02\x02\u0103\u0104\x07k\x02" + - "\x02\u0104\u0105\x07p\x02\x02\u0105\u0106\x07v\x02\x02\u0106N\x03\x02" + - "\x02\x02\u0107\u0108\x07d\x02\x02\u0108\u0109\x07q\x02\x02\u0109\u010A" + - "\x07q\x02\x02\u010A\u010B\x07n\x02\x02\u010BP\x03\x02\x02\x02\u010C\u010D" + - "\x07u\x02\x02\u010D\u010E\x07v\x02\x02\u010E\u010F\x07t\x02\x02\u010F" + - "\u0110\x07k\x02\x02\u0110\u0111\x07p\x02\x02\u0111\u0112\x07i\x02\x02" + - "\u0112R\x03\x02\x02\x02\u0113\u0114\x07r\x02\x02\u0114\u0115\x07w\x02" + - "\x02\u0115\u0116\x07d\x02\x02\u0116\u0117\x07m\x02\x02\u0117\u0118\x07" + - "g\x02\x02\u0118\u0119\x07{\x02\x02\u0119T\x03\x02\x02\x02\u011A\u011B" + - "\x07u\x02\x02\u011B\u011C\x07k\x02\x02\u011C\u011D\x07i\x02\x02\u011D" + - "V\x03\x02\x02\x02\u011E\u011F\x07f\x02\x02\u011F\u0120\x07c\x02\x02\u0120" + - "\u0121\x07v\x02\x02\u0121\u0122\x07c\x02\x02\u0122\u0123\x07u\x02\x02" + - "\u0123\u0124\x07k\x02\x02\u0124\u0125\x07i\x02\x02\u0125X\x03\x02\x02" + - "\x02\u0126\u0128\t\x02\x02\x02\u0127\u0126\x03\x02\x02\x02\u0128\u0129" + - "\x03\x02\x02\x02\u0129\u0127\x03\x02\x02\x02\u0129\u012A\x03\x02\x02\x02" + - "\u012A\u012B\x03\x02\x02\x02\u012B\u012D\x070\x02\x02\u012C\u012E\t\x02" + - "\x02\x02\u012D\u012C\x03\x02\x02\x02\u012E\u012F\x03\x02\x02\x02\u012F" + - "\u012D\x03\x02\x02\x02\u012F\u0130\x03\x02\x02\x02\u0130\u0131\x03\x02" + - "\x02\x02\u0131\u0133\x070\x02\x02\u0132\u0134\t\x02\x02\x02\u0133\u0132" + - "\x03\x02\x02\x02\u0134\u0135\x03\x02\x02\x02\u0135\u0133\x03\x02\x02\x02" + - "\u0135\u0136\x03\x02\x02\x02\u0136Z\x03\x02\x02\x02\u0137\u0138\x07v\x02" + - "\x02\u0138\u0139\x07t\x02\x02\u0139\u013A\x07w\x02\x02\u013A\u0141\x07" + - "g\x02\x02\u013B\u013C\x07h\x02\x02\u013C\u013D\x07c\x02\x02\u013D\u013E" + - "\x07n\x02\x02\u013E\u013F\x07u\x02\x02\u013F\u0141\x07g\x02\x02\u0140" + - "\u0137\x03\x02\x02\x02\u0140\u013B\x03\x02\x02\x02\u0141\\\x03\x02\x02" + - "\x02\u0142\u0143\x07u\x02\x02\u0143\u0144\x07c\x02\x02\u0144\u0145\x07" + - "v\x02\x02\u0145\u0146\x07q\x02\x02\u0146\u0147\x07u\x02\x02\u0147\u0148" + - "\x07j\x02\x02\u0148\u0149\x07k\x02\x02\u0149\u017C\x07u\x02\x02\u014A" + - "\u014B\x07u\x02\x02\u014B\u014C\x07c\x02\x02\u014C\u014D\x07v\x02\x02" + - "\u014D\u017C\x07u\x02\x02\u014E\u014F\x07h\x02\x02\u014F\u0150\x07k\x02" + - "\x02\u0150\u0151\x07p\x02\x02\u0151\u0152\x07p\x02\x02\u0152\u0153\x07" + - "g\x02\x02\u0153\u017C\x07{\x02\x02\u0154\u0155\x07d\x02\x02\u0155\u0156" + - "\x07k\x02\x02\u0156\u0157\x07v\x02\x02\u0157\u017C\x07u\x02\x02\u0158" + - "\u0159\x07d\x02\x02\u0159\u015A\x07k\x02\x02\u015A\u015B\x07v\x02\x02" + - "\u015B\u015C\x07e\x02\x02\u015C\u015D\x07q\x02\x02\u015D\u015E\x07k\x02" + - "\x02\u015E\u017C\x07p\x02\x02\u015F\u0160\x07u\x02\x02\u0160\u0161\x07" + - "g\x02\x02\u0161\u0162\x07e\x02\x02\u0162\u0163\x07q\x02\x02\u0163\u0164" + - "\x07p\x02\x02\u0164\u0165\x07f\x02\x02\u0165\u017C\x07u\x02\x02\u0166" + - "\u0167\x07o\x02\x02\u0167\u0168\x07k\x02\x02\u0168\u0169\x07p\x02\x02" + - "\u0169\u016A\x07w\x02\x02\u016A\u016B\x07v\x02\x02\u016B\u016C\x07g\x02" + - "\x02\u016C\u017C\x07u\x02\x02\u016D\u016E\x07j\x02\x02\u016E\u016F\x07" + - "q\x02\x02\u016F\u0170\x07w\x02\x02\u0170\u0171\x07t\x02\x02\u0171\u017C" + - "\x07u\x02\x02\u0172\u0173\x07f\x02\x02\u0173\u0174\x07c\x02\x02\u0174" + - "\u0175\x07{\x02\x02\u0175\u017C\x07u\x02\x02\u0176\u0177\x07y\x02\x02" + - "\u0177\u0178\x07g\x02\x02\u0178\u0179\x07g\x02\x02\u0179\u017A\x07m\x02" + - "\x02\u017A\u017C\x07u\x02\x02\u017B\u0142\x03\x02\x02\x02\u017B\u014A" + - "\x03\x02\x02\x02\u017B\u014E\x03\x02\x02\x02\u017B\u0154\x03\x02\x02\x02" + - "\u017B\u0158\x03\x02\x02\x02\u017B\u015F\x03\x02\x02\x02\u017B\u0166\x03" + - "\x02\x02\x02\u017B\u016D\x03\x02\x02\x02\u017B\u0172\x03\x02\x02\x02\u017B" + - "\u0176\x03\x02\x02\x02\u017C^\x03\x02\x02\x02\u017D\u017F\t\x03\x02\x02" + - "\u017E\u017D\x03\x02\x02\x02\u017E\u017F\x03\x02\x02\x02\u017F\u0181\x03" + - "\x02\x02\x02\u0180\u0182\t\x02\x02\x02\u0181\u0180\x03\x02\x02\x02\u0182" + - "\u0183\x03\x02\x02\x02\u0183\u0181\x03\x02\x02\x02\u0183\u0184\x03\x02" + - "\x02\x02\u0184\u018B\x03\x02\x02\x02\u0185\u0187\t\x04\x02\x02\u0186\u0188" + - "\t\x02\x02\x02\u0187\u0186\x03\x02\x02\x02\u0188\u0189\x03\x02\x02\x02" + - "\u0189\u0187\x03\x02\x02\x02\u0189\u018A\x03\x02\x02\x02\u018A\u018C\x03" + - "\x02\x02\x02\u018B\u0185\x03\x02\x02\x02\u018B\u018C\x03\x02\x02\x02\u018C" + - "`\x03\x02\x02\x02\u018D\u018E\x07d\x02\x02\u018E\u018F\x07{\x02\x02\u018F" + - "\u0190\x07v\x02\x02\u0190\u0191\x07g\x02\x02\u0191\u0192\x07u\x02\x02" + - "\u0192\u0194\x03\x02\x02\x02\u0193\u0195\x05c2\x02\u0194\u0193\x03\x02" + - "\x02\x02\u0194\u0195\x03\x02\x02\x02\u0195b\x03\x02\x02\x02\u0196\u019A" + - "\t\x05\x02\x02\u0197\u0199\t\x02\x02\x02\u0198\u0197\x03\x02\x02\x02\u0199" + - "\u019C\x03\x02\x02\x02\u019A\u0198\x03\x02\x02\x02\u019A\u019B\x03\x02" + - "\x02\x02\u019Bd\x03\x02\x02\x02\u019C\u019A\x03\x02\x02\x02\u019D\u01A3" + - "\x07$\x02\x02\u019E\u019F\x07^\x02\x02\u019F\u01A2\x07$\x02\x02\u01A0" + - "\u01A2\n\x06\x02\x02\u01A1\u019E\x03\x02\x02\x02\u01A1\u01A0\x03\x02\x02" + - "\x02\u01A2\u01A5\x03\x02\x02\x02\u01A3\u01A4\x03\x02\x02\x02\u01A3\u01A1" + - "\x03\x02\x02\x02\u01A4\u01A6\x03\x02\x02\x02\u01A5\u01A3\x03\x02\x02\x02" + - "\u01A6\u01B2\x07$\x02\x02\u01A7\u01AD\x07)\x02\x02\u01A8\u01A9\x07^\x02" + - "\x02\u01A9\u01AC\x07)\x02\x02\u01AA\u01AC\n\x07\x02\x02\u01AB\u01A8\x03" + - "\x02\x02\x02\u01AB\u01AA\x03\x02\x02\x02\u01AC\u01AF\x03\x02\x02\x02\u01AD" + - "\u01AE\x03\x02\x02\x02\u01AD\u01AB\x03\x02\x02\x02\u01AE\u01B0\x03\x02" + - "\x02\x02\u01AF\u01AD\x03\x02\x02\x02\u01B0\u01B2\x07)\x02\x02\u01B1\u019D" + - "\x03\x02\x02\x02\u01B1\u01A7\x03\x02\x02\x02\u01B2f\x03\x02\x02\x02\u01B3" + - "\u01B4\x07f\x02\x02\u01B4\u01B5\x07c\x02\x02\u01B5\u01B6\x07v\x02\x02" + - "\u01B6\u01B7\x07g\x02\x02\u01B7\u01B8\x07*\x02\x02\u01B8\u01B9\x03\x02" + - "\x02\x02\u01B9\u01BA\x05e3\x02\u01BA\u01BB\x07+\x02\x02\u01BBh\x03\x02" + - "\x02\x02\u01BC\u01BD\x072\x02\x02\u01BD\u01C1\t\b\x02\x02\u01BE\u01C0" + - "\t\t\x02\x02\u01BF\u01BE\x03\x02\x02\x02\u01C0\u01C3\x03\x02\x02\x02\u01C1" + - "\u01BF\x03\x02\x02\x02\u01C1\u01C2\x03\x02\x02\x02\u01C2j\x03\x02\x02" + - "\x02\u01C3\u01C1\x03\x02\x02\x02\u01C4\u01C5\x07v\x02\x02\u01C5\u01C6" + - "\x07z\x02\x02\u01C6\u01C7\x070\x02\x02\u01C7\u01C8\x07c\x02\x02\u01C8" + - "\u01C9\x07i\x02\x02\u01C9\u01D2\x07g\x02\x02\u01CA\u01CB\x07v\x02\x02" + - "\u01CB\u01CC\x07z\x02\x02\u01CC\u01CD\x070\x02\x02\u01CD\u01CE\x07v\x02" + - "\x02\u01CE\u01CF\x07k\x02\x02\u01CF\u01D0\x07o\x02\x02\u01D0\u01D2\x07" + - "g\x02\x02\u01D1\u01C4\x03\x02\x02\x02\u01D1\u01CA\x03\x02\x02\x02\u01D2" + - "l\x03\x02\x02\x02\u01D3\u01D4\x07v\x02\x02\u01D4\u01D5\x07z\x02\x02\u01D5" + - "\u01D6\x070\x02\x02\u01D6\u01D7\x07x\x02\x02\u01D7\u01D8\x07g\x02\x02" + - "\u01D8\u01D9\x07t\x02\x02\u01D9\u01DA\x07u\x02\x02\u01DA\u01DB\x07k\x02" + - "\x02\u01DB\u01DC\x07q\x02\x02\u01DC\u0254\x07p\x02\x02\u01DD\u01DE\x07" + - "v\x02\x02\u01DE\u01DF\x07z\x02\x02\u01DF\u01E0\x070\x02\x02\u01E0\u01E1" + - "\x07j\x02\x02\u01E1\u01E2\x07c\x02\x02\u01E2\u01E3\x07u\x02\x02\u01E3" + - "\u01E4\x07j\x02\x02\u01E4\u01E5\x07R\x02\x02\u01E5\u01E6\x07t\x02\x02" + - "\u01E6\u01E7\x07g\x02\x02\u01E7\u01E8\x07x\x02\x02\u01E8\u01E9\x07q\x02" + - "\x02\u01E9\u01EA\x07w\x02\x02\u01EA\u01EB\x07v\x02\x02\u01EB\u0254\x07" + - "u\x02\x02\u01EC\u01ED\x07v\x02\x02\u01ED\u01EE\x07z\x02\x02\u01EE\u01EF" + - "\x070\x02\x02\u01EF\u01F0\x07j\x02\x02\u01F0\u01F1\x07c\x02\x02\u01F1" + - "\u01F2\x07u\x02\x02\u01F2\u01F3\x07j\x02\x02\u01F3\u01F4\x07U\x02\x02" + - "\u01F4\u01F5\x07g\x02\x02\u01F5\u01F6\x07s\x02\x02\u01F6\u01F7\x07w\x02" + - "\x02\u01F7\u01F8\x07g\x02\x02\u01F8\u01F9\x07p\x02\x02\u01F9\u01FA\x07" + - "e\x02\x02\u01FA\u0254\x07g\x02\x02\u01FB\u01FC\x07v\x02\x02\u01FC\u01FD" + - "\x07z\x02\x02\u01FD\u01FE\x070\x02\x02\u01FE\u01FF\x07q\x02\x02\u01FF" + - "\u0200\x07w\x02\x02\u0200\u0201\x07v\x02\x02\u0201\u0202\x07r\x02\x02" + - "\u0202\u0203\x07q\x02\x02\u0203\u0204\x07k\x02\x02\u0204\u0205\x07p\x02" + - "\x02\u0205\u0254\x07v\x02\x02\u0206\u0207\x07v\x02\x02\u0207\u0208\x07" + - "z\x02\x02\u0208\u0209\x070\x02\x02\u0209\u020A\x07d\x02\x02\u020A\u020B" + - "\x07{\x02\x02\u020B\u020C\x07v\x02\x02\u020C\u020D\x07g\x02\x02\u020D" + - "\u020E\x07e\x02\x02\u020E\u020F\x07q\x02\x02\u020F\u0210\x07f\x02\x02" + - "\u0210\u0254\x07g\x02\x02\u0211\u0212\x07v\x02\x02\u0212\u0213\x07z\x02" + - "\x02\u0213\u0214\x070\x02\x02\u0214\u0215\x07x\x02\x02\u0215\u0216\x07" + - "c\x02\x02\u0216\u0217\x07n\x02\x02\u0217\u0218\x07w\x02\x02\u0218\u0254" + - "\x07g\x02\x02\u0219\u021A\x07v\x02\x02\u021A\u021B\x07z\x02\x02\u021B" + - "\u021C\x070\x02\x02\u021C\u021D\x07u\x02\x02\u021D\u021E\x07g\x02\x02" + - "\u021E\u021F\x07s\x02\x02\u021F\u0220\x07w\x02\x02\u0220\u0221\x07g\x02" + - "\x02\u0221\u0222\x07p\x02\x02\u0222\u0223\x07e\x02\x02\u0223\u0254"; - private static readonly _serializedATNSegment1: string = - "\x07g\x02\x02\u0224\u0225\x07v\x02\x02\u0225\u0226\x07z\x02\x02\u0226" + - "\u0227\x070\x02\x02\u0227\u0228\x07j\x02\x02\u0228\u0229\x07c\x02\x02" + - "\u0229\u022A\x07u\x02\x02\u022A\u022B\x07j\x02\x02\u022B\u022C\x07Q\x02" + - "\x02\u022C\u022D\x07w\x02\x02\u022D\u022E\x07v\x02\x02\u022E\u022F\x07" + - "r\x02\x02\u022F\u0230\x07w\x02\x02\u0230\u0231\x07v\x02\x02\u0231\u0254" + - "\x07u\x02\x02\u0232\u0233\x07v\x02\x02\u0233\u0234\x07z\x02\x02\u0234" + - "\u0235\x070\x02\x02\u0235\u0236\x07n\x02\x02\u0236\u0237\x07q\x02\x02" + - "\u0237\u0238\x07e\x02\x02\u0238\u0239\x07m\x02\x02\u0239\u023A\x07v\x02" + - "\x02\u023A\u023B\x07k\x02\x02\u023B\u023C\x07o\x02\x02\u023C\u0254\x07" + - "g\x02\x02\u023D\u023E\x07v\x02\x02\u023E\u023F\x07z\x02\x02\u023F\u0240" + - "\x070\x02\x02\u0240\u0241\x07j\x02\x02\u0241\u0242\x07c\x02\x02\u0242" + - "\u0243\x07u\x02\x02\u0243\u0244\x07j\x02\x02\u0244\u0245\x07v\x02\x02" + - "\u0245\u0246\x07{\x02\x02\u0246\u0247\x07r\x02\x02\u0247\u0254\x07g\x02" + - "\x02\u0248\u0249\x07v\x02\x02\u0249\u024A\x07z\x02\x02\u024A\u024B\x07" + - "0\x02\x02\u024B\u024C\x07r\x02\x02\u024C\u024D\x07t\x02\x02\u024D\u024E" + - "\x07g\x02\x02\u024E\u024F\x07k\x02\x02\u024F\u0250\x07o\x02\x02\u0250" + - "\u0251\x07c\x02\x02\u0251\u0252\x07i\x02\x02\u0252\u0254\x07g\x02\x02" + - "\u0253\u01D3\x03\x02\x02\x02\u0253\u01DD\x03\x02\x02\x02\u0253\u01EC\x03" + - "\x02\x02\x02\u0253\u01FB\x03\x02\x02\x02\u0253\u0206\x03\x02\x02\x02\u0253" + - "\u0211\x03\x02\x02\x02\u0253\u0219\x03\x02\x02\x02\u0253\u0224\x03\x02" + - "\x02\x02\u0253\u0232\x03\x02\x02\x02\u0253\u023D\x03\x02\x02\x02\u0253" + - "\u0248\x03\x02\x02\x02\u0254n\x03\x02\x02\x02\u0255\u0259\t\n\x02\x02" + - "\u0256\u0258\t\v\x02\x02\u0257\u0256\x03\x02\x02\x02\u0258\u025B\x03\x02" + - "\x02\x02\u0259\u0257\x03\x02\x02\x02\u0259\u025A\x03\x02\x02\x02\u025A" + - "p\x03\x02\x02\x02\u025B\u0259\x03\x02\x02\x02\u025C\u025E\t\f\x02\x02" + - "\u025D\u025C\x03\x02\x02\x02\u025E\u025F\x03\x02\x02\x02\u025F\u025D\x03" + - "\x02\x02\x02\u025F\u0260\x03\x02\x02\x02\u0260\u0261\x03\x02\x02\x02\u0261" + - "\u0262\b9\x02\x02\u0262r\x03\x02\x02\x02\u0263\u0264\x071\x02\x02\u0264" + - "\u0265\x07,\x02\x02\u0265\u0269\x03\x02\x02\x02\u0266\u0268\v\x02\x02" + - "\x02\u0267\u0266\x03\x02\x02\x02\u0268\u026B\x03\x02\x02\x02\u0269\u026A" + - "\x03\x02\x02\x02\u0269\u0267\x03\x02\x02\x02\u026A\u026C\x03\x02\x02\x02" + - "\u026B\u0269\x03\x02\x02\x02\u026C\u026D\x07,\x02\x02\u026D\u026E\x07" + - "1\x02\x02\u026E\u026F\x03\x02\x02\x02\u026F\u0270\b:\x03\x02\u0270t\x03" + - "\x02\x02\x02\u0271\u0272\x071\x02\x02\u0272\u0273\x071\x02\x02\u0273\u0277" + - "\x03\x02\x02\x02\u0274\u0276\n\r\x02\x02\u0275\u0274\x03\x02\x02\x02\u0276" + - "\u0279\x03\x02\x02\x02\u0277\u0275\x03\x02\x02\x02\u0277\u0278\x03\x02" + - "\x02\x02\u0278\u027A\x03\x02\x02\x02\u0279\u0277\x03\x02\x02\x02\u027A" + - "\u027B\b;\x03\x02\u027Bv\x03\x02\x02\x02\x1A\x02\u0129\u012F\u0135\u0140" + - "\u017B\u017E\u0183\u0189\u018B\u0194\u019A\u01A1\u01A3\u01AB\u01AD\u01B1" + - "\u01C1\u01D1\u0253\u0259\u025F\u0269\u0277\x04\b\x02\x02\x02\x03\x02"; - public static readonly _serializedATN: string = Utils.join( - [ - CashScriptLexer._serializedATNSegment0, - CashScriptLexer._serializedATNSegment1, - ], - "", - ); - public static __ATN: ATN; - public static get _ATN(): ATN { - if (!CashScriptLexer.__ATN) { - CashScriptLexer.__ATN = new ATNDeserializer().deserialize(Utils.toCharArray(CashScriptLexer._serializedATN)); - } - - return CashScriptLexer.__ATN; - } - -} - diff --git a/vscode-cashscript/src/CashscriptLinter/grammar/CashScriptListener.ts b/vscode-cashscript/src/CashscriptLinter/grammar/CashScriptListener.ts deleted file mode 100644 index 767505a..0000000 --- a/vscode-cashscript/src/CashscriptLinter/grammar/CashScriptListener.ts +++ /dev/null @@ -1,443 +0,0 @@ -// Generated from grammar/CashScript.g4 by ANTLR 4.9.0-SNAPSHOT - - -import { ParseTreeListener } from "antlr4ts/tree/ParseTreeListener"; - -import { ParenthesisedContext } from "./CashScriptParser"; -import { CastContext } from "./CashScriptParser"; -import { FunctionCallExpressionContext } from "./CashScriptParser"; -import { InstantiationContext } from "./CashScriptParser"; -import { TupleIndexOpContext } from "./CashScriptParser"; -import { UnaryOpContext } from "./CashScriptParser"; -import { BinaryOpContext } from "./CashScriptParser"; -import { ArrayContext } from "./CashScriptParser"; -import { PreimageFieldContext } from "./CashScriptParser"; -import { IdentifierContext } from "./CashScriptParser"; -import { LiteralExpressionContext } from "./CashScriptParser"; -import { SourceFileContext } from "./CashScriptParser"; -import { PragmaDirectiveContext } from "./CashScriptParser"; -import { PragmaNameContext } from "./CashScriptParser"; -import { PragmaValueContext } from "./CashScriptParser"; -import { VersionConstraintContext } from "./CashScriptParser"; -import { VersionOperatorContext } from "./CashScriptParser"; -import { ContractDefinitionContext } from "./CashScriptParser"; -import { FunctionDefinitionContext } from "./CashScriptParser"; -import { ParameterListContext } from "./CashScriptParser"; -import { ParameterContext } from "./CashScriptParser"; -import { BlockContext } from "./CashScriptParser"; -import { StatementContext } from "./CashScriptParser"; -import { VariableDefinitionContext } from "./CashScriptParser"; -import { AssignStatementContext } from "./CashScriptParser"; -import { TimeOpStatementContext } from "./CashScriptParser"; -import { RequireStatementContext } from "./CashScriptParser"; -import { IfStatementContext } from "./CashScriptParser"; -import { FunctionCallContext } from "./CashScriptParser"; -import { ExpressionListContext } from "./CashScriptParser"; -import { ExpressionContext } from "./CashScriptParser"; -import { LiteralContext } from "./CashScriptParser"; -import { NumberLiteralContext } from "./CashScriptParser"; -import { TypeNameContext } from "./CashScriptParser"; - - -/** - * This interface defines a complete listener for a parse tree produced by - * `CashScriptParser`. - */ -export interface CashScriptListener extends ParseTreeListener { - /** - * Enter a parse tree produced by the `Parenthesised` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - */ - enterParenthesised?: (ctx: ParenthesisedContext) => void; - /** - * Exit a parse tree produced by the `Parenthesised` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - */ - exitParenthesised?: (ctx: ParenthesisedContext) => void; - - /** - * Enter a parse tree produced by the `Cast` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - */ - enterCast?: (ctx: CastContext) => void; - /** - * Exit a parse tree produced by the `Cast` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - */ - exitCast?: (ctx: CastContext) => void; - - /** - * Enter a parse tree produced by the `FunctionCallExpression` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - */ - enterFunctionCallExpression?: (ctx: FunctionCallExpressionContext) => void; - /** - * Exit a parse tree produced by the `FunctionCallExpression` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - */ - exitFunctionCallExpression?: (ctx: FunctionCallExpressionContext) => void; - - /** - * Enter a parse tree produced by the `Instantiation` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - */ - enterInstantiation?: (ctx: InstantiationContext) => void; - /** - * Exit a parse tree produced by the `Instantiation` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - */ - exitInstantiation?: (ctx: InstantiationContext) => void; - - /** - * Enter a parse tree produced by the `TupleIndexOp` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - */ - enterTupleIndexOp?: (ctx: TupleIndexOpContext) => void; - /** - * Exit a parse tree produced by the `TupleIndexOp` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - */ - exitTupleIndexOp?: (ctx: TupleIndexOpContext) => void; - - /** - * Enter a parse tree produced by the `UnaryOp` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - */ - enterUnaryOp?: (ctx: UnaryOpContext) => void; - /** - * Exit a parse tree produced by the `UnaryOp` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - */ - exitUnaryOp?: (ctx: UnaryOpContext) => void; - - /** - * Enter a parse tree produced by the `BinaryOp` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - */ - enterBinaryOp?: (ctx: BinaryOpContext) => void; - /** - * Exit a parse tree produced by the `BinaryOp` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - */ - exitBinaryOp?: (ctx: BinaryOpContext) => void; - - /** - * Enter a parse tree produced by the `Array` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - */ - enterArray?: (ctx: ArrayContext) => void; - /** - * Exit a parse tree produced by the `Array` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - */ - exitArray?: (ctx: ArrayContext) => void; - - /** - * Enter a parse tree produced by the `PreimageField` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - */ - enterPreimageField?: (ctx: PreimageFieldContext) => void; - /** - * Exit a parse tree produced by the `PreimageField` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - */ - exitPreimageField?: (ctx: PreimageFieldContext) => void; - - /** - * Enter a parse tree produced by the `Identifier` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - */ - enterIdentifier?: (ctx: IdentifierContext) => void; - /** - * Exit a parse tree produced by the `Identifier` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - */ - exitIdentifier?: (ctx: IdentifierContext) => void; - - /** - * Enter a parse tree produced by the `LiteralExpression` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - */ - enterLiteralExpression?: (ctx: LiteralExpressionContext) => void; - /** - * Exit a parse tree produced by the `LiteralExpression` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - */ - exitLiteralExpression?: (ctx: LiteralExpressionContext) => void; - - /** - * Enter a parse tree produced by `CashScriptParser.sourceFile`. - * @param ctx the parse tree - */ - enterSourceFile?: (ctx: SourceFileContext) => void; - /** - * Exit a parse tree produced by `CashScriptParser.sourceFile`. - * @param ctx the parse tree - */ - exitSourceFile?: (ctx: SourceFileContext) => void; - - /** - * Enter a parse tree produced by `CashScriptParser.pragmaDirective`. - * @param ctx the parse tree - */ - enterPragmaDirective?: (ctx: PragmaDirectiveContext) => void; - /** - * Exit a parse tree produced by `CashScriptParser.pragmaDirective`. - * @param ctx the parse tree - */ - exitPragmaDirective?: (ctx: PragmaDirectiveContext) => void; - - /** - * Enter a parse tree produced by `CashScriptParser.pragmaName`. - * @param ctx the parse tree - */ - enterPragmaName?: (ctx: PragmaNameContext) => void; - /** - * Exit a parse tree produced by `CashScriptParser.pragmaName`. - * @param ctx the parse tree - */ - exitPragmaName?: (ctx: PragmaNameContext) => void; - - /** - * Enter a parse tree produced by `CashScriptParser.pragmaValue`. - * @param ctx the parse tree - */ - enterPragmaValue?: (ctx: PragmaValueContext) => void; - /** - * Exit a parse tree produced by `CashScriptParser.pragmaValue`. - * @param ctx the parse tree - */ - exitPragmaValue?: (ctx: PragmaValueContext) => void; - - /** - * Enter a parse tree produced by `CashScriptParser.versionConstraint`. - * @param ctx the parse tree - */ - enterVersionConstraint?: (ctx: VersionConstraintContext) => void; - /** - * Exit a parse tree produced by `CashScriptParser.versionConstraint`. - * @param ctx the parse tree - */ - exitVersionConstraint?: (ctx: VersionConstraintContext) => void; - - /** - * Enter a parse tree produced by `CashScriptParser.versionOperator`. - * @param ctx the parse tree - */ - enterVersionOperator?: (ctx: VersionOperatorContext) => void; - /** - * Exit a parse tree produced by `CashScriptParser.versionOperator`. - * @param ctx the parse tree - */ - exitVersionOperator?: (ctx: VersionOperatorContext) => void; - - /** - * Enter a parse tree produced by `CashScriptParser.contractDefinition`. - * @param ctx the parse tree - */ - enterContractDefinition?: (ctx: ContractDefinitionContext) => void; - /** - * Exit a parse tree produced by `CashScriptParser.contractDefinition`. - * @param ctx the parse tree - */ - exitContractDefinition?: (ctx: ContractDefinitionContext) => void; - - /** - * Enter a parse tree produced by `CashScriptParser.functionDefinition`. - * @param ctx the parse tree - */ - enterFunctionDefinition?: (ctx: FunctionDefinitionContext) => void; - /** - * Exit a parse tree produced by `CashScriptParser.functionDefinition`. - * @param ctx the parse tree - */ - exitFunctionDefinition?: (ctx: FunctionDefinitionContext) => void; - - /** - * Enter a parse tree produced by `CashScriptParser.parameterList`. - * @param ctx the parse tree - */ - enterParameterList?: (ctx: ParameterListContext) => void; - /** - * Exit a parse tree produced by `CashScriptParser.parameterList`. - * @param ctx the parse tree - */ - exitParameterList?: (ctx: ParameterListContext) => void; - - /** - * Enter a parse tree produced by `CashScriptParser.parameter`. - * @param ctx the parse tree - */ - enterParameter?: (ctx: ParameterContext) => void; - /** - * Exit a parse tree produced by `CashScriptParser.parameter`. - * @param ctx the parse tree - */ - exitParameter?: (ctx: ParameterContext) => void; - - /** - * Enter a parse tree produced by `CashScriptParser.block`. - * @param ctx the parse tree - */ - enterBlock?: (ctx: BlockContext) => void; - /** - * Exit a parse tree produced by `CashScriptParser.block`. - * @param ctx the parse tree - */ - exitBlock?: (ctx: BlockContext) => void; - - /** - * Enter a parse tree produced by `CashScriptParser.statement`. - * @param ctx the parse tree - */ - enterStatement?: (ctx: StatementContext) => void; - /** - * Exit a parse tree produced by `CashScriptParser.statement`. - * @param ctx the parse tree - */ - exitStatement?: (ctx: StatementContext) => void; - - /** - * Enter a parse tree produced by `CashScriptParser.variableDefinition`. - * @param ctx the parse tree - */ - enterVariableDefinition?: (ctx: VariableDefinitionContext) => void; - /** - * Exit a parse tree produced by `CashScriptParser.variableDefinition`. - * @param ctx the parse tree - */ - exitVariableDefinition?: (ctx: VariableDefinitionContext) => void; - - /** - * Enter a parse tree produced by `CashScriptParser.assignStatement`. - * @param ctx the parse tree - */ - enterAssignStatement?: (ctx: AssignStatementContext) => void; - /** - * Exit a parse tree produced by `CashScriptParser.assignStatement`. - * @param ctx the parse tree - */ - exitAssignStatement?: (ctx: AssignStatementContext) => void; - - /** - * Enter a parse tree produced by `CashScriptParser.timeOpStatement`. - * @param ctx the parse tree - */ - enterTimeOpStatement?: (ctx: TimeOpStatementContext) => void; - /** - * Exit a parse tree produced by `CashScriptParser.timeOpStatement`. - * @param ctx the parse tree - */ - exitTimeOpStatement?: (ctx: TimeOpStatementContext) => void; - - /** - * Enter a parse tree produced by `CashScriptParser.requireStatement`. - * @param ctx the parse tree - */ - enterRequireStatement?: (ctx: RequireStatementContext) => void; - /** - * Exit a parse tree produced by `CashScriptParser.requireStatement`. - * @param ctx the parse tree - */ - exitRequireStatement?: (ctx: RequireStatementContext) => void; - - /** - * Enter a parse tree produced by `CashScriptParser.ifStatement`. - * @param ctx the parse tree - */ - enterIfStatement?: (ctx: IfStatementContext) => void; - /** - * Exit a parse tree produced by `CashScriptParser.ifStatement`. - * @param ctx the parse tree - */ - exitIfStatement?: (ctx: IfStatementContext) => void; - - /** - * Enter a parse tree produced by `CashScriptParser.functionCall`. - * @param ctx the parse tree - */ - enterFunctionCall?: (ctx: FunctionCallContext) => void; - /** - * Exit a parse tree produced by `CashScriptParser.functionCall`. - * @param ctx the parse tree - */ - exitFunctionCall?: (ctx: FunctionCallContext) => void; - - /** - * Enter a parse tree produced by `CashScriptParser.expressionList`. - * @param ctx the parse tree - */ - enterExpressionList?: (ctx: ExpressionListContext) => void; - /** - * Exit a parse tree produced by `CashScriptParser.expressionList`. - * @param ctx the parse tree - */ - exitExpressionList?: (ctx: ExpressionListContext) => void; - - /** - * Enter a parse tree produced by `CashScriptParser.expression`. - * @param ctx the parse tree - */ - enterExpression?: (ctx: ExpressionContext) => void; - /** - * Exit a parse tree produced by `CashScriptParser.expression`. - * @param ctx the parse tree - */ - exitExpression?: (ctx: ExpressionContext) => void; - - /** - * Enter a parse tree produced by `CashScriptParser.literal`. - * @param ctx the parse tree - */ - enterLiteral?: (ctx: LiteralContext) => void; - /** - * Exit a parse tree produced by `CashScriptParser.literal`. - * @param ctx the parse tree - */ - exitLiteral?: (ctx: LiteralContext) => void; - - /** - * Enter a parse tree produced by `CashScriptParser.numberLiteral`. - * @param ctx the parse tree - */ - enterNumberLiteral?: (ctx: NumberLiteralContext) => void; - /** - * Exit a parse tree produced by `CashScriptParser.numberLiteral`. - * @param ctx the parse tree - */ - exitNumberLiteral?: (ctx: NumberLiteralContext) => void; - - /** - * Enter a parse tree produced by `CashScriptParser.typeName`. - * @param ctx the parse tree - */ - enterTypeName?: (ctx: TypeNameContext) => void; - /** - * Exit a parse tree produced by `CashScriptParser.typeName`. - * @param ctx the parse tree - */ - exitTypeName?: (ctx: TypeNameContext) => void; -} - diff --git a/vscode-cashscript/src/CashscriptLinter/grammar/CashScriptParser.ts b/vscode-cashscript/src/CashscriptLinter/grammar/CashScriptParser.ts deleted file mode 100644 index 6f5b889..0000000 --- a/vscode-cashscript/src/CashscriptLinter/grammar/CashScriptParser.ts +++ /dev/null @@ -1,2922 +0,0 @@ -// Generated from grammar/CashScript.g4 by ANTLR 4.9.0-SNAPSHOT - - -import { ATN } from "antlr4ts/atn/ATN"; -import { ATNDeserializer } from "antlr4ts/atn/ATNDeserializer"; -import { FailedPredicateException } from "antlr4ts/FailedPredicateException"; -import { NotNull } from "antlr4ts/Decorators"; -import { NoViableAltException } from "antlr4ts/NoViableAltException"; -import { Override } from "antlr4ts/Decorators"; -import { Parser } from "antlr4ts/Parser"; -import { ParserRuleContext } from "antlr4ts/ParserRuleContext"; -import { ParserATNSimulator } from "antlr4ts/atn/ParserATNSimulator"; -import { ParseTreeListener } from "antlr4ts/tree/ParseTreeListener"; -import { ParseTreeVisitor } from "antlr4ts/tree/ParseTreeVisitor"; -import { RecognitionException } from "antlr4ts/RecognitionException"; -import { RuleContext } from "antlr4ts/RuleContext"; -//import { RuleVersion } from "antlr4ts/RuleVersion"; -import { TerminalNode } from "antlr4ts/tree/TerminalNode"; -import { Token } from "antlr4ts/Token"; -import { TokenStream } from "antlr4ts/TokenStream"; -import { Vocabulary } from "antlr4ts/Vocabulary"; -import { VocabularyImpl } from "antlr4ts/VocabularyImpl"; - -import * as Utils from "antlr4ts/misc/Utils"; - -import { CashScriptListener } from "./CashScriptListener"; -import { CashScriptVisitor } from "./CashScriptVisitor"; - - -export class CashScriptParser extends Parser { - public static readonly T__0 = 1; - public static readonly T__1 = 2; - public static readonly T__2 = 3; - public static readonly T__3 = 4; - public static readonly T__4 = 5; - public static readonly T__5 = 6; - public static readonly T__6 = 7; - public static readonly T__7 = 8; - public static readonly T__8 = 9; - public static readonly T__9 = 10; - public static readonly T__10 = 11; - public static readonly T__11 = 12; - public static readonly T__12 = 13; - public static readonly T__13 = 14; - public static readonly T__14 = 15; - public static readonly T__15 = 16; - public static readonly T__16 = 17; - public static readonly T__17 = 18; - public static readonly T__18 = 19; - public static readonly T__19 = 20; - public static readonly T__20 = 21; - public static readonly T__21 = 22; - public static readonly T__22 = 23; - public static readonly T__23 = 24; - public static readonly T__24 = 25; - public static readonly T__25 = 26; - public static readonly T__26 = 27; - public static readonly T__27 = 28; - public static readonly T__28 = 29; - public static readonly T__29 = 30; - public static readonly T__30 = 31; - public static readonly T__31 = 32; - public static readonly T__32 = 33; - public static readonly T__33 = 34; - public static readonly T__34 = 35; - public static readonly T__35 = 36; - public static readonly T__36 = 37; - public static readonly T__37 = 38; - public static readonly T__38 = 39; - public static readonly T__39 = 40; - public static readonly T__40 = 41; - public static readonly T__41 = 42; - public static readonly T__42 = 43; - public static readonly VersionLiteral = 44; - public static readonly BooleanLiteral = 45; - public static readonly NumberUnit = 46; - public static readonly NumberLiteral = 47; - public static readonly Bytes = 48; - public static readonly Bound = 49; - public static readonly StringLiteral = 50; - public static readonly DateLiteral = 51; - public static readonly HexLiteral = 52; - public static readonly TxVar = 53; - public static readonly PreimageField = 54; - public static readonly Identifier = 55; - public static readonly WHITESPACE = 56; - public static readonly COMMENT = 57; - public static readonly LINE_COMMENT = 58; - public static readonly RULE_sourceFile = 0; - public static readonly RULE_pragmaDirective = 1; - public static readonly RULE_pragmaName = 2; - public static readonly RULE_pragmaValue = 3; - public static readonly RULE_versionConstraint = 4; - public static readonly RULE_versionOperator = 5; - public static readonly RULE_contractDefinition = 6; - public static readonly RULE_functionDefinition = 7; - public static readonly RULE_parameterList = 8; - public static readonly RULE_parameter = 9; - public static readonly RULE_block = 10; - public static readonly RULE_statement = 11; - public static readonly RULE_variableDefinition = 12; - public static readonly RULE_assignStatement = 13; - public static readonly RULE_timeOpStatement = 14; - public static readonly RULE_requireStatement = 15; - public static readonly RULE_ifStatement = 16; - public static readonly RULE_functionCall = 17; - public static readonly RULE_expressionList = 18; - public static readonly RULE_expression = 19; - public static readonly RULE_literal = 20; - public static readonly RULE_numberLiteral = 21; - public static readonly RULE_typeName = 22; - // tslint:disable:no-trailing-whitespace - public static readonly ruleNames: string[] = [ - "sourceFile", "pragmaDirective", "pragmaName", "pragmaValue", "versionConstraint", - "versionOperator", "contractDefinition", "functionDefinition", "parameterList", - "parameter", "block", "statement", "variableDefinition", "assignStatement", - "timeOpStatement", "requireStatement", "ifStatement", "functionCall", - "expressionList", "expression", "literal", "numberLiteral", "typeName", - ]; - - private static readonly _LITERAL_NAMES: Array = [ - undefined, "'pragma'", "';'", "'cashscript'", "'^'", "'~'", "'>='", "'>'", - "'<'", "'<='", "'='", "'contract'", "'{'", "'}'", "'function'", "'('", - "','", "')'", "'require'", "'if'", "'else'", "'new'", "'['", "']'", "'.reverse()'", - "'.length'", "'!'", "'-'", "'.split'", "'/'", "'%'", "'+'", "'=='", "'!='", - "'&'", "'|'", "'&&'", "'||'", "'int'", "'bool'", "'string'", "'pubkey'", - "'sig'", "'datasig'", - ]; - private static readonly _SYMBOLIC_NAMES: Array = [ - undefined, undefined, undefined, undefined, undefined, undefined, undefined, - undefined, undefined, undefined, undefined, undefined, undefined, undefined, - undefined, undefined, undefined, undefined, undefined, undefined, undefined, - undefined, undefined, undefined, undefined, undefined, undefined, undefined, - undefined, undefined, undefined, undefined, undefined, undefined, undefined, - undefined, undefined, undefined, undefined, undefined, undefined, undefined, - undefined, undefined, "VersionLiteral", "BooleanLiteral", "NumberUnit", - "NumberLiteral", "Bytes", "Bound", "StringLiteral", "DateLiteral", "HexLiteral", - "TxVar", "PreimageField", "Identifier", "WHITESPACE", "COMMENT", "LINE_COMMENT", - ]; - public static readonly VOCABULARY: Vocabulary = new VocabularyImpl(CashScriptParser._LITERAL_NAMES, CashScriptParser._SYMBOLIC_NAMES, []); - - // @Override - // @NotNull - public get vocabulary(): Vocabulary { - return CashScriptParser.VOCABULARY; - } - // tslint:enable:no-trailing-whitespace - - // @Override - public get grammarFileName(): string { return "CashScript.g4"; } - - // @Override - public get ruleNames(): string[] { return CashScriptParser.ruleNames; } - - // @Override - public get serializedATN(): string { return CashScriptParser._serializedATN; } - - protected createFailedPredicateException(predicate?: string, message?: string): FailedPredicateException { - return new FailedPredicateException(this, predicate, message); - } - - constructor(input: TokenStream) { - super(input); - this._interp = new ParserATNSimulator(CashScriptParser._ATN, this); - } - // @RuleVersion(0) - public sourceFile(): SourceFileContext { - let _localctx: SourceFileContext = new SourceFileContext(this._ctx, this.state); - this.enterRule(_localctx, 0, CashScriptParser.RULE_sourceFile); - let _la: number; - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 49; - this._errHandler.sync(this); - _la = this._input.LA(1); - while (_la === CashScriptParser.T__0) { - { - { - this.state = 46; - this.pragmaDirective(); - } - } - this.state = 51; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - this.state = 52; - this.contractDefinition(); - this.state = 53; - this.match(CashScriptParser.EOF); - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public pragmaDirective(): PragmaDirectiveContext { - let _localctx: PragmaDirectiveContext = new PragmaDirectiveContext(this._ctx, this.state); - this.enterRule(_localctx, 2, CashScriptParser.RULE_pragmaDirective); - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 55; - this.match(CashScriptParser.T__0); - this.state = 56; - this.pragmaName(); - this.state = 57; - this.pragmaValue(); - this.state = 58; - this.match(CashScriptParser.T__1); - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public pragmaName(): PragmaNameContext { - let _localctx: PragmaNameContext = new PragmaNameContext(this._ctx, this.state); - this.enterRule(_localctx, 4, CashScriptParser.RULE_pragmaName); - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 60; - this.match(CashScriptParser.T__2); - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public pragmaValue(): PragmaValueContext { - let _localctx: PragmaValueContext = new PragmaValueContext(this._ctx, this.state); - this.enterRule(_localctx, 6, CashScriptParser.RULE_pragmaValue); - let _la: number; - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 62; - this.versionConstraint(); - this.state = 64; - this._errHandler.sync(this); - _la = this._input.LA(1); - if ((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << CashScriptParser.T__3) | (1 << CashScriptParser.T__4) | (1 << CashScriptParser.T__5) | (1 << CashScriptParser.T__6) | (1 << CashScriptParser.T__7) | (1 << CashScriptParser.T__8) | (1 << CashScriptParser.T__9))) !== 0) || _la === CashScriptParser.VersionLiteral) { - { - this.state = 63; - this.versionConstraint(); - } - } - - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public versionConstraint(): VersionConstraintContext { - let _localctx: VersionConstraintContext = new VersionConstraintContext(this._ctx, this.state); - this.enterRule(_localctx, 8, CashScriptParser.RULE_versionConstraint); - let _la: number; - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 67; - this._errHandler.sync(this); - _la = this._input.LA(1); - if ((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << CashScriptParser.T__3) | (1 << CashScriptParser.T__4) | (1 << CashScriptParser.T__5) | (1 << CashScriptParser.T__6) | (1 << CashScriptParser.T__7) | (1 << CashScriptParser.T__8) | (1 << CashScriptParser.T__9))) !== 0)) { - { - this.state = 66; - this.versionOperator(); - } - } - - this.state = 69; - this.match(CashScriptParser.VersionLiteral); - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public versionOperator(): VersionOperatorContext { - let _localctx: VersionOperatorContext = new VersionOperatorContext(this._ctx, this.state); - this.enterRule(_localctx, 10, CashScriptParser.RULE_versionOperator); - let _la: number; - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 71; - _la = this._input.LA(1); - if (!((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << CashScriptParser.T__3) | (1 << CashScriptParser.T__4) | (1 << CashScriptParser.T__5) | (1 << CashScriptParser.T__6) | (1 << CashScriptParser.T__7) | (1 << CashScriptParser.T__8) | (1 << CashScriptParser.T__9))) !== 0))) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); - } - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public contractDefinition(): ContractDefinitionContext { - let _localctx: ContractDefinitionContext = new ContractDefinitionContext(this._ctx, this.state); - this.enterRule(_localctx, 12, CashScriptParser.RULE_contractDefinition); - let _la: number; - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 73; - this.match(CashScriptParser.T__10); - this.state = 74; - this.match(CashScriptParser.Identifier); - this.state = 75; - this.parameterList(); - this.state = 76; - this.match(CashScriptParser.T__11); - this.state = 80; - this._errHandler.sync(this); - _la = this._input.LA(1); - while (_la === CashScriptParser.T__13) { - { - { - this.state = 77; - this.functionDefinition(); - } - } - this.state = 82; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - this.state = 83; - this.match(CashScriptParser.T__12); - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public functionDefinition(): FunctionDefinitionContext { - let _localctx: FunctionDefinitionContext = new FunctionDefinitionContext(this._ctx, this.state); - this.enterRule(_localctx, 14, CashScriptParser.RULE_functionDefinition); - let _la: number; - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 85; - this.match(CashScriptParser.T__13); - this.state = 86; - this.match(CashScriptParser.Identifier); - this.state = 87; - this.parameterList(); - this.state = 88; - this.match(CashScriptParser.T__11); - this.state = 92; - this._errHandler.sync(this); - _la = this._input.LA(1); - while (_la === CashScriptParser.T__17 || _la === CashScriptParser.T__18 || ((((_la - 38)) & ~0x1F) === 0 && ((1 << (_la - 38)) & ((1 << (CashScriptParser.T__37 - 38)) | (1 << (CashScriptParser.T__38 - 38)) | (1 << (CashScriptParser.T__39 - 38)) | (1 << (CashScriptParser.T__40 - 38)) | (1 << (CashScriptParser.T__41 - 38)) | (1 << (CashScriptParser.T__42 - 38)) | (1 << (CashScriptParser.Bytes - 38)) | (1 << (CashScriptParser.Identifier - 38)))) !== 0)) { - { - { - this.state = 89; - this.statement(); - } - } - this.state = 94; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - this.state = 95; - this.match(CashScriptParser.T__12); - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public parameterList(): ParameterListContext { - let _localctx: ParameterListContext = new ParameterListContext(this._ctx, this.state); - this.enterRule(_localctx, 16, CashScriptParser.RULE_parameterList); - let _la: number; - try { - let _alt: number; - this.enterOuterAlt(_localctx, 1); - { - this.state = 97; - this.match(CashScriptParser.T__14); - this.state = 109; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (((((_la - 38)) & ~0x1F) === 0 && ((1 << (_la - 38)) & ((1 << (CashScriptParser.T__37 - 38)) | (1 << (CashScriptParser.T__38 - 38)) | (1 << (CashScriptParser.T__39 - 38)) | (1 << (CashScriptParser.T__40 - 38)) | (1 << (CashScriptParser.T__41 - 38)) | (1 << (CashScriptParser.T__42 - 38)) | (1 << (CashScriptParser.Bytes - 38)))) !== 0)) { - { - this.state = 98; - this.parameter(); - this.state = 103; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 5, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - { - { - this.state = 99; - this.match(CashScriptParser.T__15); - this.state = 100; - this.parameter(); - } - } - } - this.state = 105; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 5, this._ctx); - } - this.state = 107; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === CashScriptParser.T__15) { - { - this.state = 106; - this.match(CashScriptParser.T__15); - } - } - - } - } - - this.state = 111; - this.match(CashScriptParser.T__16); - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public parameter(): ParameterContext { - let _localctx: ParameterContext = new ParameterContext(this._ctx, this.state); - this.enterRule(_localctx, 18, CashScriptParser.RULE_parameter); - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 113; - this.typeName(); - this.state = 114; - this.match(CashScriptParser.Identifier); - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public block(): BlockContext { - let _localctx: BlockContext = new BlockContext(this._ctx, this.state); - this.enterRule(_localctx, 20, CashScriptParser.RULE_block); - let _la: number; - try { - this.state = 125; - this._errHandler.sync(this); - switch (this._input.LA(1)) { - case CashScriptParser.T__11: - this.enterOuterAlt(_localctx, 1); - { - this.state = 116; - this.match(CashScriptParser.T__11); - this.state = 120; - this._errHandler.sync(this); - _la = this._input.LA(1); - while (_la === CashScriptParser.T__17 || _la === CashScriptParser.T__18 || ((((_la - 38)) & ~0x1F) === 0 && ((1 << (_la - 38)) & ((1 << (CashScriptParser.T__37 - 38)) | (1 << (CashScriptParser.T__38 - 38)) | (1 << (CashScriptParser.T__39 - 38)) | (1 << (CashScriptParser.T__40 - 38)) | (1 << (CashScriptParser.T__41 - 38)) | (1 << (CashScriptParser.T__42 - 38)) | (1 << (CashScriptParser.Bytes - 38)) | (1 << (CashScriptParser.Identifier - 38)))) !== 0)) { - { - { - this.state = 117; - this.statement(); - } - } - this.state = 122; - this._errHandler.sync(this); - _la = this._input.LA(1); - } - this.state = 123; - this.match(CashScriptParser.T__12); - } - break; - case CashScriptParser.T__17: - case CashScriptParser.T__18: - case CashScriptParser.T__37: - case CashScriptParser.T__38: - case CashScriptParser.T__39: - case CashScriptParser.T__40: - case CashScriptParser.T__41: - case CashScriptParser.T__42: - case CashScriptParser.Bytes: - case CashScriptParser.Identifier: - this.enterOuterAlt(_localctx, 2); - { - this.state = 124; - this.statement(); - } - break; - default: - throw new NoViableAltException(this); - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public statement(): StatementContext { - let _localctx: StatementContext = new StatementContext(this._ctx, this.state); - this.enterRule(_localctx, 22, CashScriptParser.RULE_statement); - try { - this.state = 132; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 10, this._ctx) ) { - case 1: - this.enterOuterAlt(_localctx, 1); - { - this.state = 127; - this.variableDefinition(); - } - break; - - case 2: - this.enterOuterAlt(_localctx, 2); - { - this.state = 128; - this.assignStatement(); - } - break; - - case 3: - this.enterOuterAlt(_localctx, 3); - { - this.state = 129; - this.timeOpStatement(); - } - break; - - case 4: - this.enterOuterAlt(_localctx, 4); - { - this.state = 130; - this.requireStatement(); - } - break; - - case 5: - this.enterOuterAlt(_localctx, 5); - { - this.state = 131; - this.ifStatement(); - } - break; - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public variableDefinition(): VariableDefinitionContext { - let _localctx: VariableDefinitionContext = new VariableDefinitionContext(this._ctx, this.state); - this.enterRule(_localctx, 24, CashScriptParser.RULE_variableDefinition); - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 134; - this.typeName(); - this.state = 135; - this.match(CashScriptParser.Identifier); - this.state = 136; - this.match(CashScriptParser.T__9); - this.state = 137; - this.expression(0); - this.state = 138; - this.match(CashScriptParser.T__1); - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public assignStatement(): AssignStatementContext { - let _localctx: AssignStatementContext = new AssignStatementContext(this._ctx, this.state); - this.enterRule(_localctx, 26, CashScriptParser.RULE_assignStatement); - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 140; - this.match(CashScriptParser.Identifier); - this.state = 141; - this.match(CashScriptParser.T__9); - this.state = 142; - this.expression(0); - this.state = 143; - this.match(CashScriptParser.T__1); - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public timeOpStatement(): TimeOpStatementContext { - let _localctx: TimeOpStatementContext = new TimeOpStatementContext(this._ctx, this.state); - this.enterRule(_localctx, 28, CashScriptParser.RULE_timeOpStatement); - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 145; - this.match(CashScriptParser.T__17); - this.state = 146; - this.match(CashScriptParser.T__14); - this.state = 147; - this.match(CashScriptParser.TxVar); - this.state = 148; - this.match(CashScriptParser.T__5); - this.state = 149; - this.expression(0); - this.state = 150; - this.match(CashScriptParser.T__16); - this.state = 151; - this.match(CashScriptParser.T__1); - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public requireStatement(): RequireStatementContext { - let _localctx: RequireStatementContext = new RequireStatementContext(this._ctx, this.state); - this.enterRule(_localctx, 30, CashScriptParser.RULE_requireStatement); - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 153; - this.match(CashScriptParser.T__17); - this.state = 154; - this.match(CashScriptParser.T__14); - this.state = 155; - this.expression(0); - this.state = 156; - this.match(CashScriptParser.T__16); - this.state = 157; - this.match(CashScriptParser.T__1); - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public ifStatement(): IfStatementContext { - let _localctx: IfStatementContext = new IfStatementContext(this._ctx, this.state); - this.enterRule(_localctx, 32, CashScriptParser.RULE_ifStatement); - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 159; - this.match(CashScriptParser.T__18); - this.state = 160; - this.match(CashScriptParser.T__14); - this.state = 161; - this.expression(0); - this.state = 162; - this.match(CashScriptParser.T__16); - this.state = 163; - _localctx._ifBlock = this.block(); - this.state = 166; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 11, this._ctx) ) { - case 1: - { - this.state = 164; - this.match(CashScriptParser.T__19); - this.state = 165; - _localctx._elseBlock = this.block(); - } - break; - } - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public functionCall(): FunctionCallContext { - let _localctx: FunctionCallContext = new FunctionCallContext(this._ctx, this.state); - this.enterRule(_localctx, 34, CashScriptParser.RULE_functionCall); - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 168; - this.match(CashScriptParser.Identifier); - this.state = 169; - this.expressionList(); - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public expressionList(): ExpressionListContext { - let _localctx: ExpressionListContext = new ExpressionListContext(this._ctx, this.state); - this.enterRule(_localctx, 36, CashScriptParser.RULE_expressionList); - let _la: number; - try { - let _alt: number; - this.enterOuterAlt(_localctx, 1); - { - this.state = 171; - this.match(CashScriptParser.T__14); - this.state = 183; - this._errHandler.sync(this); - _la = this._input.LA(1); - if ((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << CashScriptParser.T__14) | (1 << CashScriptParser.T__20) | (1 << CashScriptParser.T__21) | (1 << CashScriptParser.T__25) | (1 << CashScriptParser.T__26))) !== 0) || ((((_la - 38)) & ~0x1F) === 0 && ((1 << (_la - 38)) & ((1 << (CashScriptParser.T__37 - 38)) | (1 << (CashScriptParser.T__38 - 38)) | (1 << (CashScriptParser.T__39 - 38)) | (1 << (CashScriptParser.T__40 - 38)) | (1 << (CashScriptParser.T__41 - 38)) | (1 << (CashScriptParser.T__42 - 38)) | (1 << (CashScriptParser.BooleanLiteral - 38)) | (1 << (CashScriptParser.NumberLiteral - 38)) | (1 << (CashScriptParser.Bytes - 38)) | (1 << (CashScriptParser.StringLiteral - 38)) | (1 << (CashScriptParser.DateLiteral - 38)) | (1 << (CashScriptParser.HexLiteral - 38)) | (1 << (CashScriptParser.PreimageField - 38)) | (1 << (CashScriptParser.Identifier - 38)))) !== 0)) { - { - this.state = 172; - this.expression(0); - this.state = 177; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 12, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - { - { - this.state = 173; - this.match(CashScriptParser.T__15); - this.state = 174; - this.expression(0); - } - } - } - this.state = 179; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 12, this._ctx); - } - this.state = 181; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === CashScriptParser.T__15) { - { - this.state = 180; - this.match(CashScriptParser.T__15); - } - } - - } - } - - this.state = 185; - this.match(CashScriptParser.T__16); - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - - public expression(): ExpressionContext; - public expression(_p: number): ExpressionContext; - // @RuleVersion(0) - public expression(_p?: number): ExpressionContext { - if (_p === undefined) { - _p = 0; - } - - let _parentctx: ParserRuleContext = this._ctx; - let _parentState: number = this.state; - let _localctx: ExpressionContext = new ExpressionContext(this._ctx, _parentState); - let _prevctx: ExpressionContext = _localctx; - let _startState: number = 38; - this.enterRecursionRule(_localctx, 38, CashScriptParser.RULE_expression, _p); - let _la: number; - try { - let _alt: number; - this.enterOuterAlt(_localctx, 1); - { - this.state = 228; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 20, this._ctx) ) { - case 1: - { - _localctx = new ParenthesisedContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - - this.state = 188; - this.match(CashScriptParser.T__14); - this.state = 189; - this.expression(0); - this.state = 190; - this.match(CashScriptParser.T__16); - } - break; - - case 2: - { - _localctx = new CastContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - this.state = 192; - this.typeName(); - this.state = 193; - this.match(CashScriptParser.T__14); - this.state = 194; - (_localctx as CastContext)._castable = this.expression(0); - this.state = 197; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 15, this._ctx) ) { - case 1: - { - this.state = 195; - this.match(CashScriptParser.T__15); - this.state = 196; - (_localctx as CastContext)._size = this.expression(0); - } - break; - } - this.state = 200; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === CashScriptParser.T__15) { - { - this.state = 199; - this.match(CashScriptParser.T__15); - } - } - - this.state = 202; - this.match(CashScriptParser.T__16); - } - break; - - case 3: - { - _localctx = new FunctionCallExpressionContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - this.state = 204; - this.functionCall(); - } - break; - - case 4: - { - _localctx = new InstantiationContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - this.state = 205; - this.match(CashScriptParser.T__20); - this.state = 206; - this.match(CashScriptParser.Identifier); - this.state = 207; - this.expressionList(); - } - break; - - case 5: - { - _localctx = new UnaryOpContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - this.state = 208; - (_localctx as UnaryOpContext)._op = this._input.LT(1); - _la = this._input.LA(1); - if (!(_la === CashScriptParser.T__25 || _la === CashScriptParser.T__26)) { - (_localctx as UnaryOpContext)._op = this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 209; - this.expression(15); - } - break; - - case 6: - { - _localctx = new ArrayContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - this.state = 210; - this.match(CashScriptParser.T__21); - this.state = 222; - this._errHandler.sync(this); - _la = this._input.LA(1); - if ((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << CashScriptParser.T__14) | (1 << CashScriptParser.T__20) | (1 << CashScriptParser.T__21) | (1 << CashScriptParser.T__25) | (1 << CashScriptParser.T__26))) !== 0) || ((((_la - 38)) & ~0x1F) === 0 && ((1 << (_la - 38)) & ((1 << (CashScriptParser.T__37 - 38)) | (1 << (CashScriptParser.T__38 - 38)) | (1 << (CashScriptParser.T__39 - 38)) | (1 << (CashScriptParser.T__40 - 38)) | (1 << (CashScriptParser.T__41 - 38)) | (1 << (CashScriptParser.T__42 - 38)) | (1 << (CashScriptParser.BooleanLiteral - 38)) | (1 << (CashScriptParser.NumberLiteral - 38)) | (1 << (CashScriptParser.Bytes - 38)) | (1 << (CashScriptParser.StringLiteral - 38)) | (1 << (CashScriptParser.DateLiteral - 38)) | (1 << (CashScriptParser.HexLiteral - 38)) | (1 << (CashScriptParser.PreimageField - 38)) | (1 << (CashScriptParser.Identifier - 38)))) !== 0)) { - { - this.state = 211; - this.expression(0); - this.state = 216; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 17, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - { - { - this.state = 212; - this.match(CashScriptParser.T__15); - this.state = 213; - this.expression(0); - } - } - } - this.state = 218; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 17, this._ctx); - } - this.state = 220; - this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la === CashScriptParser.T__15) { - { - this.state = 219; - this.match(CashScriptParser.T__15); - } - } - - } - } - - this.state = 224; - this.match(CashScriptParser.T__22); - } - break; - - case 7: - { - _localctx = new PreimageFieldContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - this.state = 225; - this.match(CashScriptParser.PreimageField); - } - break; - - case 8: - { - _localctx = new IdentifierContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - this.state = 226; - this.match(CashScriptParser.Identifier); - } - break; - - case 9: - { - _localctx = new LiteralExpressionContext(_localctx); - this._ctx = _localctx; - _prevctx = _localctx; - this.state = 227; - this.literal(); - } - break; - } - this._ctx._stop = this._input.tryLT(-1); - this.state = 271; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 22, this._ctx); - while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { - if (_alt === 1) { - if (this._parseListeners != null) { - this.triggerExitRuleEvent(); - } - _prevctx = _localctx; - { - this.state = 269; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 21, this._ctx) ) { - case 1: - { - _localctx = new BinaryOpContext(new ExpressionContext(_parentctx, _parentState)); - (_localctx as BinaryOpContext)._left = _prevctx; - this.pushNewRecursionContext(_localctx, _startState, CashScriptParser.RULE_expression); - this.state = 230; - if (!(this.precpred(this._ctx, 13))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 13)"); - } - this.state = 231; - (_localctx as BinaryOpContext)._op = this._input.LT(1); - _la = this._input.LA(1); - if (!(_la === CashScriptParser.T__28 || _la === CashScriptParser.T__29)) { - (_localctx as BinaryOpContext)._op = this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 232; - (_localctx as BinaryOpContext)._right = this.expression(14); - } - break; - - case 2: - { - _localctx = new BinaryOpContext(new ExpressionContext(_parentctx, _parentState)); - (_localctx as BinaryOpContext)._left = _prevctx; - this.pushNewRecursionContext(_localctx, _startState, CashScriptParser.RULE_expression); - this.state = 233; - if (!(this.precpred(this._ctx, 12))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 12)"); - } - this.state = 234; - (_localctx as BinaryOpContext)._op = this._input.LT(1); - _la = this._input.LA(1); - if (!(_la === CashScriptParser.T__26 || _la === CashScriptParser.T__30)) { - (_localctx as BinaryOpContext)._op = this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 235; - (_localctx as BinaryOpContext)._right = this.expression(13); - } - break; - - case 3: - { - _localctx = new BinaryOpContext(new ExpressionContext(_parentctx, _parentState)); - (_localctx as BinaryOpContext)._left = _prevctx; - this.pushNewRecursionContext(_localctx, _startState, CashScriptParser.RULE_expression); - this.state = 236; - if (!(this.precpred(this._ctx, 11))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 11)"); - } - this.state = 237; - (_localctx as BinaryOpContext)._op = this._input.LT(1); - _la = this._input.LA(1); - if (!((((_la) & ~0x1F) === 0 && ((1 << _la) & ((1 << CashScriptParser.T__5) | (1 << CashScriptParser.T__6) | (1 << CashScriptParser.T__7) | (1 << CashScriptParser.T__8))) !== 0))) { - (_localctx as BinaryOpContext)._op = this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 238; - (_localctx as BinaryOpContext)._right = this.expression(12); - } - break; - - case 4: - { - _localctx = new BinaryOpContext(new ExpressionContext(_parentctx, _parentState)); - (_localctx as BinaryOpContext)._left = _prevctx; - this.pushNewRecursionContext(_localctx, _startState, CashScriptParser.RULE_expression); - this.state = 239; - if (!(this.precpred(this._ctx, 10))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 10)"); - } - this.state = 240; - (_localctx as BinaryOpContext)._op = this._input.LT(1); - _la = this._input.LA(1); - if (!(_la === CashScriptParser.T__31 || _la === CashScriptParser.T__32)) { - (_localctx as BinaryOpContext)._op = this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); - } - this.state = 241; - (_localctx as BinaryOpContext)._right = this.expression(11); - } - break; - - case 5: - { - _localctx = new BinaryOpContext(new ExpressionContext(_parentctx, _parentState)); - (_localctx as BinaryOpContext)._left = _prevctx; - this.pushNewRecursionContext(_localctx, _startState, CashScriptParser.RULE_expression); - this.state = 242; - if (!(this.precpred(this._ctx, 9))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 9)"); - } - this.state = 243; - (_localctx as BinaryOpContext)._op = this.match(CashScriptParser.T__33); - this.state = 244; - (_localctx as BinaryOpContext)._right = this.expression(10); - } - break; - - case 6: - { - _localctx = new BinaryOpContext(new ExpressionContext(_parentctx, _parentState)); - (_localctx as BinaryOpContext)._left = _prevctx; - this.pushNewRecursionContext(_localctx, _startState, CashScriptParser.RULE_expression); - this.state = 245; - if (!(this.precpred(this._ctx, 8))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 8)"); - } - this.state = 246; - (_localctx as BinaryOpContext)._op = this.match(CashScriptParser.T__3); - this.state = 247; - (_localctx as BinaryOpContext)._right = this.expression(9); - } - break; - - case 7: - { - _localctx = new BinaryOpContext(new ExpressionContext(_parentctx, _parentState)); - (_localctx as BinaryOpContext)._left = _prevctx; - this.pushNewRecursionContext(_localctx, _startState, CashScriptParser.RULE_expression); - this.state = 248; - if (!(this.precpred(this._ctx, 7))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 7)"); - } - this.state = 249; - (_localctx as BinaryOpContext)._op = this.match(CashScriptParser.T__34); - this.state = 250; - (_localctx as BinaryOpContext)._right = this.expression(8); - } - break; - - case 8: - { - _localctx = new BinaryOpContext(new ExpressionContext(_parentctx, _parentState)); - (_localctx as BinaryOpContext)._left = _prevctx; - this.pushNewRecursionContext(_localctx, _startState, CashScriptParser.RULE_expression); - this.state = 251; - if (!(this.precpred(this._ctx, 6))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 6)"); - } - this.state = 252; - (_localctx as BinaryOpContext)._op = this.match(CashScriptParser.T__35); - this.state = 253; - (_localctx as BinaryOpContext)._right = this.expression(7); - } - break; - - case 9: - { - _localctx = new BinaryOpContext(new ExpressionContext(_parentctx, _parentState)); - (_localctx as BinaryOpContext)._left = _prevctx; - this.pushNewRecursionContext(_localctx, _startState, CashScriptParser.RULE_expression); - this.state = 254; - if (!(this.precpred(this._ctx, 5))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 5)"); - } - this.state = 255; - (_localctx as BinaryOpContext)._op = this.match(CashScriptParser.T__36); - this.state = 256; - (_localctx as BinaryOpContext)._right = this.expression(6); - } - break; - - case 10: - { - _localctx = new TupleIndexOpContext(new ExpressionContext(_parentctx, _parentState)); - this.pushNewRecursionContext(_localctx, _startState, CashScriptParser.RULE_expression); - this.state = 257; - if (!(this.precpred(this._ctx, 17))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 17)"); - } - this.state = 258; - this.match(CashScriptParser.T__21); - this.state = 259; - (_localctx as TupleIndexOpContext)._index = this.match(CashScriptParser.NumberLiteral); - this.state = 260; - this.match(CashScriptParser.T__22); - } - break; - - case 11: - { - _localctx = new UnaryOpContext(new ExpressionContext(_parentctx, _parentState)); - this.pushNewRecursionContext(_localctx, _startState, CashScriptParser.RULE_expression); - this.state = 261; - if (!(this.precpred(this._ctx, 16))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 16)"); - } - this.state = 262; - (_localctx as UnaryOpContext)._op = this._input.LT(1); - _la = this._input.LA(1); - if (!(_la === CashScriptParser.T__23 || _la === CashScriptParser.T__24)) { - (_localctx as UnaryOpContext)._op = this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); - } - } - break; - - case 12: - { - _localctx = new BinaryOpContext(new ExpressionContext(_parentctx, _parentState)); - (_localctx as BinaryOpContext)._left = _prevctx; - this.pushNewRecursionContext(_localctx, _startState, CashScriptParser.RULE_expression); - this.state = 263; - if (!(this.precpred(this._ctx, 14))) { - throw this.createFailedPredicateException("this.precpred(this._ctx, 14)"); - } - this.state = 264; - (_localctx as BinaryOpContext)._op = this.match(CashScriptParser.T__27); - this.state = 265; - this.match(CashScriptParser.T__14); - this.state = 266; - (_localctx as BinaryOpContext)._right = this.expression(0); - this.state = 267; - this.match(CashScriptParser.T__16); - } - break; - } - } - } - this.state = 273; - this._errHandler.sync(this); - _alt = this.interpreter.adaptivePredict(this._input, 22, this._ctx); - } - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.unrollRecursionContexts(_parentctx); - } - return _localctx; - } - // @RuleVersion(0) - public literal(): LiteralContext { - let _localctx: LiteralContext = new LiteralContext(this._ctx, this.state); - this.enterRule(_localctx, 40, CashScriptParser.RULE_literal); - try { - this.state = 279; - this._errHandler.sync(this); - switch (this._input.LA(1)) { - case CashScriptParser.BooleanLiteral: - this.enterOuterAlt(_localctx, 1); - { - this.state = 274; - this.match(CashScriptParser.BooleanLiteral); - } - break; - case CashScriptParser.NumberLiteral: - this.enterOuterAlt(_localctx, 2); - { - this.state = 275; - this.numberLiteral(); - } - break; - case CashScriptParser.StringLiteral: - this.enterOuterAlt(_localctx, 3); - { - this.state = 276; - this.match(CashScriptParser.StringLiteral); - } - break; - case CashScriptParser.DateLiteral: - this.enterOuterAlt(_localctx, 4); - { - this.state = 277; - this.match(CashScriptParser.DateLiteral); - } - break; - case CashScriptParser.HexLiteral: - this.enterOuterAlt(_localctx, 5); - { - this.state = 278; - this.match(CashScriptParser.HexLiteral); - } - break; - default: - throw new NoViableAltException(this); - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public numberLiteral(): NumberLiteralContext { - let _localctx: NumberLiteralContext = new NumberLiteralContext(this._ctx, this.state); - this.enterRule(_localctx, 42, CashScriptParser.RULE_numberLiteral); - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 281; - this.match(CashScriptParser.NumberLiteral); - this.state = 283; - this._errHandler.sync(this); - switch ( this.interpreter.adaptivePredict(this._input, 24, this._ctx) ) { - case 1: - { - this.state = 282; - this.match(CashScriptParser.NumberUnit); - } - break; - } - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - // @RuleVersion(0) - public typeName(): TypeNameContext { - let _localctx: TypeNameContext = new TypeNameContext(this._ctx, this.state); - this.enterRule(_localctx, 44, CashScriptParser.RULE_typeName); - let _la: number; - try { - this.enterOuterAlt(_localctx, 1); - { - this.state = 285; - _la = this._input.LA(1); - if (!(((((_la - 38)) & ~0x1F) === 0 && ((1 << (_la - 38)) & ((1 << (CashScriptParser.T__37 - 38)) | (1 << (CashScriptParser.T__38 - 38)) | (1 << (CashScriptParser.T__39 - 38)) | (1 << (CashScriptParser.T__40 - 38)) | (1 << (CashScriptParser.T__41 - 38)) | (1 << (CashScriptParser.T__42 - 38)) | (1 << (CashScriptParser.Bytes - 38)))) !== 0))) { - this._errHandler.recoverInline(this); - } else { - if (this._input.LA(1) === Token.EOF) { - this.matchedEOF = true; - } - - this._errHandler.reportMatch(this); - this.consume(); - } - } - } - catch (re) { - if (re instanceof RecognitionException) { - _localctx.exception = re; - this._errHandler.reportError(this, re); - this._errHandler.recover(this, re); - } else { - throw re; - } - } - finally { - this.exitRule(); - } - return _localctx; - } - - public sempred(_localctx: RuleContext, ruleIndex: number, predIndex: number): boolean { - switch (ruleIndex) { - case 19: - return this.expression_sempred(_localctx as ExpressionContext, predIndex); - } - return true; - } - private expression_sempred(_localctx: ExpressionContext, predIndex: number): boolean { - switch (predIndex) { - case 0: - return this.precpred(this._ctx, 13); - - case 1: - return this.precpred(this._ctx, 12); - - case 2: - return this.precpred(this._ctx, 11); - - case 3: - return this.precpred(this._ctx, 10); - - case 4: - return this.precpred(this._ctx, 9); - - case 5: - return this.precpred(this._ctx, 8); - - case 6: - return this.precpred(this._ctx, 7); - - case 7: - return this.precpred(this._ctx, 6); - - case 8: - return this.precpred(this._ctx, 5); - - case 9: - return this.precpred(this._ctx, 17); - - case 10: - return this.precpred(this._ctx, 16); - - case 11: - return this.precpred(this._ctx, 14); - } - return true; - } - - public static readonly _serializedATN: string = - "\x03\uC91D\uCABA\u058D\uAFBA\u4F53\u0607\uEA8B\uC241\x03<\u0122\x04\x02" + - "\t\x02\x04\x03\t\x03\x04\x04\t\x04\x04\x05\t\x05\x04\x06\t\x06\x04\x07" + - "\t\x07\x04\b\t\b\x04\t\t\t\x04\n\t\n\x04\v\t\v\x04\f\t\f\x04\r\t\r\x04" + - "\x0E\t\x0E\x04\x0F\t\x0F\x04\x10\t\x10\x04\x11\t\x11\x04\x12\t\x12\x04" + - "\x13\t\x13\x04\x14\t\x14\x04\x15\t\x15\x04\x16\t\x16\x04\x17\t\x17\x04" + - "\x18\t\x18\x03\x02\x07\x022\n\x02\f\x02\x0E\x025\v\x02\x03\x02\x03\x02" + - "\x03\x02\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x04\x03\x04\x03\x05" + - "\x03\x05\x05\x05C\n\x05\x03\x06\x05\x06F\n\x06\x03\x06\x03\x06\x03\x07" + - "\x03\x07\x03\b\x03\b\x03\b\x03\b\x03\b\x07\bQ\n\b\f\b\x0E\bT\v\b\x03\b" + - "\x03\b\x03\t\x03\t\x03\t\x03\t\x03\t\x07\t]\n\t\f\t\x0E\t`\v\t\x03\t\x03" + - "\t\x03\n\x03\n\x03\n\x03\n\x07\nh\n\n\f\n\x0E\nk\v\n\x03\n\x05\nn\n\n" + - "\x05\np\n\n\x03\n\x03\n\x03\v\x03\v\x03\v\x03\f\x03\f\x07\fy\n\f\f\f\x0E" + - "\f|\v\f\x03\f\x03\f\x05\f\x80\n\f\x03\r\x03\r\x03\r\x03\r\x03\r\x05\r" + - "\x87\n\r\x03\x0E\x03\x0E\x03\x0E\x03\x0E\x03\x0E\x03\x0E\x03\x0F\x03\x0F" + - "\x03\x0F\x03\x0F\x03\x0F\x03\x10\x03\x10\x03\x10\x03\x10\x03\x10\x03\x10" + - "\x03\x10\x03\x10\x03\x11\x03\x11\x03\x11\x03\x11\x03\x11\x03\x11\x03\x12" + - "\x03\x12\x03\x12\x03\x12\x03\x12\x03\x12\x03\x12\x05\x12\xA9\n\x12\x03" + - "\x13\x03\x13\x03\x13\x03\x14\x03\x14\x03\x14\x03\x14\x07\x14\xB2\n\x14" + - "\f\x14\x0E\x14\xB5\v\x14\x03\x14\x05\x14\xB8\n\x14\x05\x14\xBA\n\x14\x03" + - "\x14\x03\x14\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03" + - "\x15\x03\x15\x03\x15\x05\x15\xC8\n\x15\x03\x15\x05\x15\xCB\n\x15\x03\x15" + - "\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15" + - "\x03\x15\x03\x15\x07\x15\xD9\n\x15\f\x15\x0E\x15\xDC\v\x15\x03\x15\x05" + - "\x15\xDF\n\x15\x05\x15\xE1\n\x15\x03\x15\x03\x15\x03\x15\x03\x15\x05\x15" + - "\xE7\n\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03" + - "\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03" + - "\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03" + - "\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03\x15\x03" + - "\x15\x03\x15\x03\x15\x03\x15\x03\x15\x07\x15\u0110\n\x15\f\x15\x0E\x15" + - "\u0113\v\x15\x03\x16\x03\x16\x03\x16\x03\x16\x03\x16\x05\x16\u011A\n\x16" + - "\x03\x17\x03\x17\x05\x17\u011E\n\x17\x03\x18\x03\x18\x03\x18\x02\x02\x03" + - "(\x19\x02\x02\x04\x02\x06\x02\b\x02\n\x02\f\x02\x0E\x02\x10\x02\x12\x02" + - "\x14\x02\x16\x02\x18\x02\x1A\x02\x1C\x02\x1E\x02 \x02\"\x02$\x02&\x02" + - "(\x02*\x02,\x02.\x02\x02\n\x03\x02\x06\f\x03\x02\x1C\x1D\x03\x02\x1F " + - "\x04\x02\x1D\x1D!!\x03\x02\b\v\x03\x02\"#\x03\x02\x1A\x1B\x04\x02(-22" + - "\x02\u013A\x023\x03\x02\x02\x02\x049\x03\x02\x02\x02\x06>\x03\x02\x02" + - "\x02\b@\x03\x02\x02\x02\nE\x03\x02\x02\x02\fI\x03\x02\x02\x02\x0EK\x03" + - "\x02\x02\x02\x10W\x03\x02\x02\x02\x12c\x03\x02\x02\x02\x14s\x03\x02\x02" + - "\x02\x16\x7F\x03\x02\x02\x02\x18\x86\x03\x02\x02\x02\x1A\x88\x03\x02\x02" + - "\x02\x1C\x8E\x03\x02\x02\x02\x1E\x93\x03\x02\x02\x02 \x9B\x03\x02\x02" + - "\x02\"\xA1\x03\x02\x02\x02$\xAA\x03\x02\x02\x02&\xAD\x03\x02\x02\x02(" + - "\xE6\x03\x02\x02\x02*\u0119\x03\x02\x02\x02,\u011B\x03\x02\x02\x02.\u011F" + - "\x03\x02\x02\x0202\x05\x04\x03\x0210\x03\x02\x02\x0225\x03\x02\x02\x02" + - "31\x03\x02\x02\x0234\x03\x02\x02\x0246\x03\x02\x02\x0253\x03\x02\x02\x02" + - "67\x05\x0E\b\x0278\x07\x02\x02\x038\x03\x03\x02\x02\x029:\x07\x03\x02" + - "\x02:;\x05\x06\x04\x02;<\x05\b\x05\x02<=\x07\x04\x02\x02=\x05\x03\x02" + - "\x02\x02>?\x07\x05\x02\x02?\x07\x03\x02\x02\x02@B\x05\n\x06\x02AC\x05" + - "\n\x06\x02BA\x03\x02\x02\x02BC\x03\x02\x02\x02C\t\x03\x02\x02\x02DF\x05" + - "\f\x07\x02ED\x03\x02\x02\x02EF\x03\x02\x02\x02FG\x03\x02\x02\x02GH\x07" + - ".\x02\x02H\v\x03\x02\x02\x02IJ\t\x02\x02\x02J\r\x03\x02\x02\x02KL\x07" + - "\r\x02\x02LM\x079\x02\x02MN\x05\x12\n\x02NR\x07\x0E\x02\x02OQ\x05\x10" + - "\t\x02PO\x03\x02\x02\x02QT\x03\x02\x02\x02RP\x03\x02\x02\x02RS\x03\x02" + - "\x02\x02SU\x03\x02\x02\x02TR\x03\x02\x02\x02UV\x07\x0F\x02\x02V\x0F\x03" + - "\x02\x02\x02WX\x07\x10\x02\x02XY\x079\x02\x02YZ\x05\x12\n\x02Z^\x07\x0E" + - "\x02\x02[]\x05\x18\r\x02\\[\x03\x02\x02\x02]`\x03\x02\x02\x02^\\\x03\x02" + - "\x02\x02^_\x03\x02\x02\x02_a\x03\x02\x02\x02`^\x03\x02\x02\x02ab\x07\x0F" + - "\x02\x02b\x11\x03\x02\x02\x02co\x07\x11\x02\x02di\x05\x14\v\x02ef\x07" + - "\x12\x02\x02fh\x05\x14\v\x02ge\x03\x02\x02\x02hk\x03\x02\x02\x02ig\x03" + - "\x02\x02\x02ij\x03\x02\x02\x02jm\x03\x02\x02\x02ki\x03\x02\x02\x02ln\x07" + - "\x12\x02\x02ml\x03\x02\x02\x02mn\x03\x02\x02\x02np\x03\x02\x02\x02od\x03" + - "\x02\x02\x02op\x03\x02\x02\x02pq\x03\x02\x02\x02qr\x07\x13\x02\x02r\x13" + - "\x03\x02\x02\x02st\x05.\x18\x02tu\x079\x02\x02u\x15\x03\x02\x02\x02vz" + - "\x07\x0E\x02\x02wy\x05\x18\r\x02xw\x03\x02\x02\x02y|\x03\x02\x02\x02z" + - "x\x03\x02\x02\x02z{\x03\x02\x02\x02{}\x03\x02\x02\x02|z\x03\x02\x02\x02" + - "}\x80\x07\x0F\x02\x02~\x80\x05\x18\r\x02\x7Fv\x03\x02\x02\x02\x7F~\x03" + - "\x02\x02\x02\x80\x17\x03\x02\x02\x02\x81\x87\x05\x1A\x0E\x02\x82\x87\x05" + - "\x1C\x0F\x02\x83\x87\x05\x1E\x10\x02\x84\x87\x05 \x11\x02\x85\x87\x05" + - "\"\x12\x02\x86\x81\x03\x02\x02\x02\x86\x82\x03\x02\x02\x02\x86\x83\x03" + - "\x02\x02\x02\x86\x84\x03\x02\x02\x02\x86\x85\x03\x02\x02\x02\x87\x19\x03" + - "\x02\x02\x02\x88\x89\x05.\x18\x02\x89\x8A\x079\x02\x02\x8A\x8B\x07\f\x02" + - "\x02\x8B\x8C\x05(\x15\x02\x8C\x8D\x07\x04\x02\x02\x8D\x1B\x03\x02\x02" + - "\x02\x8E\x8F\x079\x02\x02\x8F\x90\x07\f\x02\x02\x90\x91\x05(\x15\x02\x91" + - "\x92\x07\x04\x02\x02\x92\x1D\x03\x02\x02\x02\x93\x94\x07\x14\x02\x02\x94" + - "\x95\x07\x11\x02\x02\x95\x96\x077\x02\x02\x96\x97\x07\b\x02\x02\x97\x98" + - "\x05(\x15\x02\x98\x99\x07\x13\x02\x02\x99\x9A\x07\x04\x02\x02\x9A\x1F" + - "\x03\x02\x02\x02\x9B\x9C\x07\x14\x02\x02\x9C\x9D\x07\x11\x02\x02\x9D\x9E" + - "\x05(\x15\x02\x9E\x9F\x07\x13\x02\x02\x9F\xA0\x07\x04\x02\x02\xA0!\x03" + - "\x02\x02\x02\xA1\xA2\x07\x15\x02\x02\xA2\xA3\x07\x11\x02\x02\xA3\xA4\x05" + - "(\x15\x02\xA4\xA5\x07\x13\x02\x02\xA5\xA8\x05\x16\f\x02\xA6\xA7\x07\x16" + - "\x02\x02\xA7\xA9\x05\x16\f\x02\xA8\xA6\x03\x02\x02\x02\xA8\xA9\x03\x02" + - "\x02\x02\xA9#\x03\x02\x02\x02\xAA\xAB\x079\x02\x02\xAB\xAC\x05&\x14\x02" + - "\xAC%\x03\x02\x02\x02\xAD\xB9\x07\x11\x02\x02\xAE\xB3\x05(\x15\x02\xAF" + - "\xB0\x07\x12\x02\x02\xB0\xB2\x05(\x15\x02\xB1\xAF\x03\x02\x02\x02\xB2" + - "\xB5\x03\x02\x02\x02\xB3\xB1\x03\x02\x02\x02\xB3\xB4\x03\x02\x02\x02\xB4" + - "\xB7\x03\x02\x02\x02\xB5\xB3\x03\x02\x02\x02\xB6\xB8\x07\x12\x02\x02\xB7" + - "\xB6\x03\x02\x02\x02\xB7\xB8\x03\x02\x02\x02\xB8\xBA\x03\x02\x02\x02\xB9" + - "\xAE\x03\x02\x02\x02\xB9\xBA\x03\x02\x02\x02\xBA\xBB\x03\x02\x02\x02\xBB" + - "\xBC\x07\x13\x02\x02\xBC\'\x03\x02\x02\x02\xBD\xBE\b\x15\x01\x02\xBE\xBF" + - "\x07\x11\x02\x02\xBF\xC0\x05(\x15\x02\xC0\xC1\x07\x13\x02\x02\xC1\xE7" + - "\x03\x02\x02\x02\xC2\xC3\x05.\x18\x02\xC3\xC4\x07\x11\x02\x02\xC4\xC7" + - "\x05(\x15\x02\xC5\xC6\x07\x12\x02\x02\xC6\xC8\x05(\x15\x02\xC7\xC5\x03" + - "\x02\x02\x02\xC7\xC8\x03\x02\x02\x02\xC8\xCA\x03\x02\x02\x02\xC9\xCB\x07" + - "\x12\x02\x02\xCA\xC9\x03\x02\x02\x02\xCA\xCB\x03\x02\x02\x02\xCB\xCC\x03" + - "\x02\x02\x02\xCC\xCD\x07\x13\x02\x02\xCD\xE7\x03\x02\x02\x02\xCE\xE7\x05" + - "$\x13\x02\xCF\xD0\x07\x17\x02\x02\xD0\xD1\x079\x02\x02\xD1\xE7\x05&\x14" + - "\x02\xD2\xD3\t\x03\x02\x02\xD3\xE7\x05(\x15\x11\xD4\xE0\x07\x18\x02\x02" + - "\xD5\xDA\x05(\x15\x02\xD6\xD7\x07\x12\x02\x02\xD7\xD9\x05(\x15\x02\xD8" + - "\xD6\x03\x02\x02\x02\xD9\xDC\x03\x02\x02\x02\xDA\xD8\x03\x02\x02\x02\xDA" + - "\xDB\x03\x02\x02\x02\xDB\xDE\x03\x02\x02\x02\xDC\xDA\x03\x02\x02\x02\xDD" + - "\xDF\x07\x12\x02\x02\xDE\xDD\x03\x02\x02\x02\xDE\xDF\x03\x02\x02\x02\xDF" + - "\xE1\x03\x02\x02\x02\xE0\xD5\x03\x02\x02\x02\xE0\xE1\x03\x02\x02\x02\xE1" + - "\xE2\x03\x02\x02\x02\xE2\xE7\x07\x19\x02\x02\xE3\xE7\x078\x02\x02\xE4" + - "\xE7\x079\x02\x02\xE5\xE7\x05*\x16\x02\xE6\xBD\x03\x02\x02\x02\xE6\xC2" + - "\x03\x02\x02\x02\xE6\xCE\x03\x02\x02\x02\xE6\xCF\x03\x02\x02\x02\xE6\xD2" + - "\x03\x02\x02\x02\xE6\xD4\x03\x02\x02\x02\xE6\xE3\x03\x02\x02\x02\xE6\xE4" + - "\x03\x02\x02\x02\xE6\xE5\x03\x02\x02\x02\xE7\u0111\x03\x02\x02\x02\xE8" + - "\xE9\f\x0F\x02\x02\xE9\xEA\t\x04\x02\x02\xEA\u0110\x05(\x15\x10\xEB\xEC" + - "\f\x0E\x02\x02\xEC\xED\t\x05\x02\x02\xED\u0110\x05(\x15\x0F\xEE\xEF\f" + - "\r\x02\x02\xEF\xF0\t\x06\x02\x02\xF0\u0110\x05(\x15\x0E\xF1\xF2\f\f\x02" + - "\x02\xF2\xF3\t\x07\x02\x02\xF3\u0110\x05(\x15\r\xF4\xF5\f\v\x02\x02\xF5" + - "\xF6\x07$\x02\x02\xF6\u0110\x05(\x15\f\xF7\xF8\f\n\x02\x02\xF8\xF9\x07" + - "\x06\x02\x02\xF9\u0110\x05(\x15\v\xFA\xFB\f\t\x02\x02\xFB\xFC\x07%\x02" + - "\x02\xFC\u0110\x05(\x15\n\xFD\xFE\f\b\x02\x02\xFE\xFF\x07&\x02\x02\xFF" + - "\u0110\x05(\x15\t\u0100\u0101\f\x07\x02\x02\u0101\u0102\x07\'\x02\x02" + - "\u0102\u0110\x05(\x15\b\u0103\u0104\f\x13\x02\x02\u0104\u0105\x07\x18" + - "\x02\x02\u0105\u0106\x071\x02\x02\u0106\u0110\x07\x19\x02\x02\u0107\u0108" + - "\f\x12\x02\x02\u0108\u0110\t\b\x02\x02\u0109\u010A\f\x10\x02\x02\u010A" + - "\u010B\x07\x1E\x02\x02\u010B\u010C\x07\x11\x02\x02\u010C\u010D\x05(\x15" + - "\x02\u010D\u010E\x07\x13\x02\x02\u010E\u0110\x03\x02\x02\x02\u010F\xE8" + - "\x03\x02\x02\x02\u010F\xEB\x03\x02\x02\x02\u010F\xEE\x03\x02\x02\x02\u010F" + - "\xF1\x03\x02\x02\x02\u010F\xF4\x03\x02\x02\x02\u010F\xF7\x03\x02\x02\x02" + - "\u010F\xFA\x03\x02\x02\x02\u010F\xFD\x03\x02\x02\x02\u010F\u0100\x03\x02" + - "\x02\x02\u010F\u0103\x03\x02\x02\x02\u010F\u0107\x03\x02\x02\x02\u010F" + - "\u0109\x03\x02\x02\x02\u0110\u0113\x03\x02\x02\x02\u0111\u010F\x03\x02" + - "\x02\x02\u0111\u0112\x03\x02\x02\x02\u0112)\x03\x02\x02\x02\u0113\u0111" + - "\x03\x02\x02\x02\u0114\u011A\x07/\x02\x02\u0115\u011A\x05,\x17\x02\u0116" + - "\u011A\x074\x02\x02\u0117\u011A\x075\x02\x02\u0118\u011A\x076\x02\x02" + - "\u0119\u0114\x03\x02\x02\x02\u0119\u0115\x03\x02\x02\x02\u0119\u0116\x03" + - "\x02\x02\x02\u0119\u0117\x03\x02\x02\x02\u0119\u0118\x03\x02\x02\x02\u011A" + - "+\x03\x02\x02\x02\u011B\u011D\x071\x02\x02\u011C\u011E\x070\x02\x02\u011D" + - "\u011C\x03\x02\x02\x02\u011D\u011E\x03\x02\x02\x02\u011E-\x03\x02\x02" + - "\x02\u011F\u0120\t\t\x02\x02\u0120/\x03\x02\x02\x02\x1B3BER^imoz\x7F\x86" + - "\xA8\xB3\xB7\xB9\xC7\xCA\xDA\xDE\xE0\xE6\u010F\u0111\u0119\u011D"; - public static __ATN: ATN; - public static get _ATN(): ATN { - if (!CashScriptParser.__ATN) { - CashScriptParser.__ATN = new ATNDeserializer().deserialize(Utils.toCharArray(CashScriptParser._serializedATN)); - } - - return CashScriptParser.__ATN; - } - -} - -export class SourceFileContext extends ParserRuleContext { - public contractDefinition(): ContractDefinitionContext { - return this.getRuleContext(0, ContractDefinitionContext); - } - public EOF(): TerminalNode { return this.getToken(CashScriptParser.EOF, 0); } - public pragmaDirective(): PragmaDirectiveContext[]; - public pragmaDirective(i: number): PragmaDirectiveContext; - public pragmaDirective(i?: number): PragmaDirectiveContext | PragmaDirectiveContext[] { - if (i === undefined) { - return this.getRuleContexts(PragmaDirectiveContext); - } else { - return this.getRuleContext(i, PragmaDirectiveContext); - } - } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return CashScriptParser.RULE_sourceFile; } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterSourceFile) { - listener.enterSourceFile(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitSourceFile) { - listener.exitSourceFile(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitSourceFile) { - return visitor.visitSourceFile(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class PragmaDirectiveContext extends ParserRuleContext { - public pragmaName(): PragmaNameContext { - return this.getRuleContext(0, PragmaNameContext); - } - public pragmaValue(): PragmaValueContext { - return this.getRuleContext(0, PragmaValueContext); - } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return CashScriptParser.RULE_pragmaDirective; } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterPragmaDirective) { - listener.enterPragmaDirective(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitPragmaDirective) { - listener.exitPragmaDirective(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitPragmaDirective) { - return visitor.visitPragmaDirective(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class PragmaNameContext extends ParserRuleContext { - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return CashScriptParser.RULE_pragmaName; } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterPragmaName) { - listener.enterPragmaName(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitPragmaName) { - listener.exitPragmaName(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitPragmaName) { - return visitor.visitPragmaName(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class PragmaValueContext extends ParserRuleContext { - public versionConstraint(): VersionConstraintContext[]; - public versionConstraint(i: number): VersionConstraintContext; - public versionConstraint(i?: number): VersionConstraintContext | VersionConstraintContext[] { - if (i === undefined) { - return this.getRuleContexts(VersionConstraintContext); - } else { - return this.getRuleContext(i, VersionConstraintContext); - } - } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return CashScriptParser.RULE_pragmaValue; } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterPragmaValue) { - listener.enterPragmaValue(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitPragmaValue) { - listener.exitPragmaValue(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitPragmaValue) { - return visitor.visitPragmaValue(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class VersionConstraintContext extends ParserRuleContext { - public VersionLiteral(): TerminalNode { return this.getToken(CashScriptParser.VersionLiteral, 0); } - public versionOperator(): VersionOperatorContext | undefined { - return this.tryGetRuleContext(0, VersionOperatorContext); - } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return CashScriptParser.RULE_versionConstraint; } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterVersionConstraint) { - listener.enterVersionConstraint(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitVersionConstraint) { - listener.exitVersionConstraint(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitVersionConstraint) { - return visitor.visitVersionConstraint(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class VersionOperatorContext extends ParserRuleContext { - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return CashScriptParser.RULE_versionOperator; } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterVersionOperator) { - listener.enterVersionOperator(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitVersionOperator) { - listener.exitVersionOperator(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitVersionOperator) { - return visitor.visitVersionOperator(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class ContractDefinitionContext extends ParserRuleContext { - public Identifier(): TerminalNode { return this.getToken(CashScriptParser.Identifier, 0); } - public parameterList(): ParameterListContext { - return this.getRuleContext(0, ParameterListContext); - } - public functionDefinition(): FunctionDefinitionContext[]; - public functionDefinition(i: number): FunctionDefinitionContext; - public functionDefinition(i?: number): FunctionDefinitionContext | FunctionDefinitionContext[] { - if (i === undefined) { - return this.getRuleContexts(FunctionDefinitionContext); - } else { - return this.getRuleContext(i, FunctionDefinitionContext); - } - } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return CashScriptParser.RULE_contractDefinition; } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterContractDefinition) { - listener.enterContractDefinition(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitContractDefinition) { - listener.exitContractDefinition(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitContractDefinition) { - return visitor.visitContractDefinition(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class FunctionDefinitionContext extends ParserRuleContext { - public Identifier(): TerminalNode { return this.getToken(CashScriptParser.Identifier, 0); } - public parameterList(): ParameterListContext { - return this.getRuleContext(0, ParameterListContext); - } - public statement(): StatementContext[]; - public statement(i: number): StatementContext; - public statement(i?: number): StatementContext | StatementContext[] { - if (i === undefined) { - return this.getRuleContexts(StatementContext); - } else { - return this.getRuleContext(i, StatementContext); - } - } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return CashScriptParser.RULE_functionDefinition; } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterFunctionDefinition) { - listener.enterFunctionDefinition(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitFunctionDefinition) { - listener.exitFunctionDefinition(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitFunctionDefinition) { - return visitor.visitFunctionDefinition(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class ParameterListContext extends ParserRuleContext { - public parameter(): ParameterContext[]; - public parameter(i: number): ParameterContext; - public parameter(i?: number): ParameterContext | ParameterContext[] { - if (i === undefined) { - return this.getRuleContexts(ParameterContext); - } else { - return this.getRuleContext(i, ParameterContext); - } - } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return CashScriptParser.RULE_parameterList; } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterParameterList) { - listener.enterParameterList(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitParameterList) { - listener.exitParameterList(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitParameterList) { - return visitor.visitParameterList(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class ParameterContext extends ParserRuleContext { - public typeName(): TypeNameContext { - return this.getRuleContext(0, TypeNameContext); - } - public Identifier(): TerminalNode { return this.getToken(CashScriptParser.Identifier, 0); } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return CashScriptParser.RULE_parameter; } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterParameter) { - listener.enterParameter(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitParameter) { - listener.exitParameter(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitParameter) { - return visitor.visitParameter(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class BlockContext extends ParserRuleContext { - public statement(): StatementContext[]; - public statement(i: number): StatementContext; - public statement(i?: number): StatementContext | StatementContext[] { - if (i === undefined) { - return this.getRuleContexts(StatementContext); - } else { - return this.getRuleContext(i, StatementContext); - } - } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return CashScriptParser.RULE_block; } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterBlock) { - listener.enterBlock(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitBlock) { - listener.exitBlock(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitBlock) { - return visitor.visitBlock(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class StatementContext extends ParserRuleContext { - public variableDefinition(): VariableDefinitionContext | undefined { - return this.tryGetRuleContext(0, VariableDefinitionContext); - } - public assignStatement(): AssignStatementContext | undefined { - return this.tryGetRuleContext(0, AssignStatementContext); - } - public timeOpStatement(): TimeOpStatementContext | undefined { - return this.tryGetRuleContext(0, TimeOpStatementContext); - } - public requireStatement(): RequireStatementContext | undefined { - return this.tryGetRuleContext(0, RequireStatementContext); - } - public ifStatement(): IfStatementContext | undefined { - return this.tryGetRuleContext(0, IfStatementContext); - } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return CashScriptParser.RULE_statement; } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterStatement) { - listener.enterStatement(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitStatement) { - listener.exitStatement(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitStatement) { - return visitor.visitStatement(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class VariableDefinitionContext extends ParserRuleContext { - public typeName(): TypeNameContext { - return this.getRuleContext(0, TypeNameContext); - } - public Identifier(): TerminalNode { return this.getToken(CashScriptParser.Identifier, 0); } - public expression(): ExpressionContext { - return this.getRuleContext(0, ExpressionContext); - } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return CashScriptParser.RULE_variableDefinition; } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterVariableDefinition) { - listener.enterVariableDefinition(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitVariableDefinition) { - listener.exitVariableDefinition(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitVariableDefinition) { - return visitor.visitVariableDefinition(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class AssignStatementContext extends ParserRuleContext { - public Identifier(): TerminalNode { return this.getToken(CashScriptParser.Identifier, 0); } - public expression(): ExpressionContext { - return this.getRuleContext(0, ExpressionContext); - } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return CashScriptParser.RULE_assignStatement; } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterAssignStatement) { - listener.enterAssignStatement(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitAssignStatement) { - listener.exitAssignStatement(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitAssignStatement) { - return visitor.visitAssignStatement(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class TimeOpStatementContext extends ParserRuleContext { - public TxVar(): TerminalNode { return this.getToken(CashScriptParser.TxVar, 0); } - public expression(): ExpressionContext { - return this.getRuleContext(0, ExpressionContext); - } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return CashScriptParser.RULE_timeOpStatement; } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterTimeOpStatement) { - listener.enterTimeOpStatement(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitTimeOpStatement) { - listener.exitTimeOpStatement(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitTimeOpStatement) { - return visitor.visitTimeOpStatement(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class RequireStatementContext extends ParserRuleContext { - public expression(): ExpressionContext { - return this.getRuleContext(0, ExpressionContext); - } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return CashScriptParser.RULE_requireStatement; } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterRequireStatement) { - listener.enterRequireStatement(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitRequireStatement) { - listener.exitRequireStatement(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitRequireStatement) { - return visitor.visitRequireStatement(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class IfStatementContext extends ParserRuleContext { - public _ifBlock!: BlockContext; - public _elseBlock!: BlockContext; - public expression(): ExpressionContext { - return this.getRuleContext(0, ExpressionContext); - } - public block(): BlockContext[]; - public block(i: number): BlockContext; - public block(i?: number): BlockContext | BlockContext[] { - if (i === undefined) { - return this.getRuleContexts(BlockContext); - } else { - return this.getRuleContext(i, BlockContext); - } - } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return CashScriptParser.RULE_ifStatement; } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterIfStatement) { - listener.enterIfStatement(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitIfStatement) { - listener.exitIfStatement(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitIfStatement) { - return visitor.visitIfStatement(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class FunctionCallContext extends ParserRuleContext { - public Identifier(): TerminalNode { return this.getToken(CashScriptParser.Identifier, 0); } - public expressionList(): ExpressionListContext { - return this.getRuleContext(0, ExpressionListContext); - } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return CashScriptParser.RULE_functionCall; } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterFunctionCall) { - listener.enterFunctionCall(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitFunctionCall) { - listener.exitFunctionCall(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitFunctionCall) { - return visitor.visitFunctionCall(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class ExpressionListContext extends ParserRuleContext { - public expression(): ExpressionContext[]; - public expression(i: number): ExpressionContext; - public expression(i?: number): ExpressionContext | ExpressionContext[] { - if (i === undefined) { - return this.getRuleContexts(ExpressionContext); - } else { - return this.getRuleContext(i, ExpressionContext); - } - } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return CashScriptParser.RULE_expressionList; } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterExpressionList) { - listener.enterExpressionList(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitExpressionList) { - listener.exitExpressionList(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitExpressionList) { - return visitor.visitExpressionList(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class ExpressionContext extends ParserRuleContext { - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return CashScriptParser.RULE_expression; } - public copyFrom(ctx: ExpressionContext): void { - super.copyFrom(ctx); - } -} -export class ParenthesisedContext extends ExpressionContext { - public expression(): ExpressionContext { - return this.getRuleContext(0, ExpressionContext); - } - constructor(ctx: ExpressionContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterParenthesised) { - listener.enterParenthesised(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitParenthesised) { - listener.exitParenthesised(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitParenthesised) { - return visitor.visitParenthesised(this); - } else { - return visitor.visitChildren(this); - } - } -} -export class CastContext extends ExpressionContext { - public _castable!: ExpressionContext; - public _size!: ExpressionContext; - public typeName(): TypeNameContext { - return this.getRuleContext(0, TypeNameContext); - } - public expression(): ExpressionContext[]; - public expression(i: number): ExpressionContext; - public expression(i?: number): ExpressionContext | ExpressionContext[] { - if (i === undefined) { - return this.getRuleContexts(ExpressionContext); - } else { - return this.getRuleContext(i, ExpressionContext); - } - } - constructor(ctx: ExpressionContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterCast) { - listener.enterCast(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitCast) { - listener.exitCast(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitCast) { - return visitor.visitCast(this); - } else { - return visitor.visitChildren(this); - } - } -} -export class FunctionCallExpressionContext extends ExpressionContext { - public functionCall(): FunctionCallContext { - return this.getRuleContext(0, FunctionCallContext); - } - constructor(ctx: ExpressionContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterFunctionCallExpression) { - listener.enterFunctionCallExpression(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitFunctionCallExpression) { - listener.exitFunctionCallExpression(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitFunctionCallExpression) { - return visitor.visitFunctionCallExpression(this); - } else { - return visitor.visitChildren(this); - } - } -} -export class InstantiationContext extends ExpressionContext { - public Identifier(): TerminalNode { return this.getToken(CashScriptParser.Identifier, 0); } - public expressionList(): ExpressionListContext { - return this.getRuleContext(0, ExpressionListContext); - } - constructor(ctx: ExpressionContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterInstantiation) { - listener.enterInstantiation(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitInstantiation) { - listener.exitInstantiation(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitInstantiation) { - return visitor.visitInstantiation(this); - } else { - return visitor.visitChildren(this); - } - } -} -export class TupleIndexOpContext extends ExpressionContext { - public _index!: Token; - public expression(): ExpressionContext { - return this.getRuleContext(0, ExpressionContext); - } - public NumberLiteral(): TerminalNode { return this.getToken(CashScriptParser.NumberLiteral, 0); } - constructor(ctx: ExpressionContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterTupleIndexOp) { - listener.enterTupleIndexOp(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitTupleIndexOp) { - listener.exitTupleIndexOp(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitTupleIndexOp) { - return visitor.visitTupleIndexOp(this); - } else { - return visitor.visitChildren(this); - } - } -} -export class UnaryOpContext extends ExpressionContext { - public _op!: Token; - public expression(): ExpressionContext { - return this.getRuleContext(0, ExpressionContext); - } - constructor(ctx: ExpressionContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterUnaryOp) { - listener.enterUnaryOp(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitUnaryOp) { - listener.exitUnaryOp(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitUnaryOp) { - return visitor.visitUnaryOp(this); - } else { - return visitor.visitChildren(this); - } - } -} -export class BinaryOpContext extends ExpressionContext { - public _left!: ExpressionContext; - public _op!: Token; - public _right!: ExpressionContext; - public expression(): ExpressionContext[]; - public expression(i: number): ExpressionContext; - public expression(i?: number): ExpressionContext | ExpressionContext[] { - if (i === undefined) { - return this.getRuleContexts(ExpressionContext); - } else { - return this.getRuleContext(i, ExpressionContext); - } - } - constructor(ctx: ExpressionContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterBinaryOp) { - listener.enterBinaryOp(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitBinaryOp) { - listener.exitBinaryOp(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitBinaryOp) { - return visitor.visitBinaryOp(this); - } else { - return visitor.visitChildren(this); - } - } -} -export class ArrayContext extends ExpressionContext { - public expression(): ExpressionContext[]; - public expression(i: number): ExpressionContext; - public expression(i?: number): ExpressionContext | ExpressionContext[] { - if (i === undefined) { - return this.getRuleContexts(ExpressionContext); - } else { - return this.getRuleContext(i, ExpressionContext); - } - } - constructor(ctx: ExpressionContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterArray) { - listener.enterArray(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitArray) { - listener.exitArray(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitArray) { - return visitor.visitArray(this); - } else { - return visitor.visitChildren(this); - } - } -} -export class PreimageFieldContext extends ExpressionContext { - public PreimageField(): TerminalNode { return this.getToken(CashScriptParser.PreimageField, 0); } - constructor(ctx: ExpressionContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterPreimageField) { - listener.enterPreimageField(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitPreimageField) { - listener.exitPreimageField(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitPreimageField) { - return visitor.visitPreimageField(this); - } else { - return visitor.visitChildren(this); - } - } -} -export class IdentifierContext extends ExpressionContext { - public Identifier(): TerminalNode { return this.getToken(CashScriptParser.Identifier, 0); } - constructor(ctx: ExpressionContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterIdentifier) { - listener.enterIdentifier(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitIdentifier) { - listener.exitIdentifier(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitIdentifier) { - return visitor.visitIdentifier(this); - } else { - return visitor.visitChildren(this); - } - } -} -export class LiteralExpressionContext extends ExpressionContext { - public literal(): LiteralContext { - return this.getRuleContext(0, LiteralContext); - } - constructor(ctx: ExpressionContext) { - super(ctx.parent, ctx.invokingState); - this.copyFrom(ctx); - } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterLiteralExpression) { - listener.enterLiteralExpression(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitLiteralExpression) { - listener.exitLiteralExpression(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitLiteralExpression) { - return visitor.visitLiteralExpression(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class LiteralContext extends ParserRuleContext { - public BooleanLiteral(): TerminalNode | undefined { return this.tryGetToken(CashScriptParser.BooleanLiteral, 0); } - public numberLiteral(): NumberLiteralContext | undefined { - return this.tryGetRuleContext(0, NumberLiteralContext); - } - public StringLiteral(): TerminalNode | undefined { return this.tryGetToken(CashScriptParser.StringLiteral, 0); } - public DateLiteral(): TerminalNode | undefined { return this.tryGetToken(CashScriptParser.DateLiteral, 0); } - public HexLiteral(): TerminalNode | undefined { return this.tryGetToken(CashScriptParser.HexLiteral, 0); } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return CashScriptParser.RULE_literal; } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterLiteral) { - listener.enterLiteral(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitLiteral) { - listener.exitLiteral(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitLiteral) { - return visitor.visitLiteral(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class NumberLiteralContext extends ParserRuleContext { - public NumberLiteral(): TerminalNode { return this.getToken(CashScriptParser.NumberLiteral, 0); } - public NumberUnit(): TerminalNode | undefined { return this.tryGetToken(CashScriptParser.NumberUnit, 0); } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return CashScriptParser.RULE_numberLiteral; } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterNumberLiteral) { - listener.enterNumberLiteral(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitNumberLiteral) { - listener.exitNumberLiteral(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitNumberLiteral) { - return visitor.visitNumberLiteral(this); - } else { - return visitor.visitChildren(this); - } - } -} - - -export class TypeNameContext extends ParserRuleContext { - public Bytes(): TerminalNode { return this.getToken(CashScriptParser.Bytes, 0); } - constructor(parent: ParserRuleContext | undefined, invokingState: number) { - super(parent, invokingState); - } - // @Override - public get ruleIndex(): number { return CashScriptParser.RULE_typeName; } - // @Override - public enterRule(listener: CashScriptListener): void { - if (listener.enterTypeName) { - listener.enterTypeName(this); - } - } - // @Override - public exitRule(listener: CashScriptListener): void { - if (listener.exitTypeName) { - listener.exitTypeName(this); - } - } - // @Override - public accept(visitor: CashScriptVisitor): Result { - if (visitor.visitTypeName) { - return visitor.visitTypeName(this); - } else { - return visitor.visitChildren(this); - } - } -} - - diff --git a/vscode-cashscript/src/CashscriptLinter/grammar/CashScriptVisitor.ts b/vscode-cashscript/src/CashscriptLinter/grammar/CashScriptVisitor.ts deleted file mode 100644 index ff4c973..0000000 --- a/vscode-cashscript/src/CashscriptLinter/grammar/CashScriptVisitor.ts +++ /dev/null @@ -1,299 +0,0 @@ -// Generated from grammar/CashScript.g4 by ANTLR 4.9.0-SNAPSHOT - - -import { ParseTreeVisitor } from "antlr4ts/tree/ParseTreeVisitor"; - -import { ParenthesisedContext } from "./CashScriptParser"; -import { CastContext } from "./CashScriptParser"; -import { FunctionCallExpressionContext } from "./CashScriptParser"; -import { InstantiationContext } from "./CashScriptParser"; -import { TupleIndexOpContext } from "./CashScriptParser"; -import { UnaryOpContext } from "./CashScriptParser"; -import { BinaryOpContext } from "./CashScriptParser"; -import { ArrayContext } from "./CashScriptParser"; -import { PreimageFieldContext } from "./CashScriptParser"; -import { IdentifierContext } from "./CashScriptParser"; -import { LiteralExpressionContext } from "./CashScriptParser"; -import { SourceFileContext } from "./CashScriptParser"; -import { PragmaDirectiveContext } from "./CashScriptParser"; -import { PragmaNameContext } from "./CashScriptParser"; -import { PragmaValueContext } from "./CashScriptParser"; -import { VersionConstraintContext } from "./CashScriptParser"; -import { VersionOperatorContext } from "./CashScriptParser"; -import { ContractDefinitionContext } from "./CashScriptParser"; -import { FunctionDefinitionContext } from "./CashScriptParser"; -import { ParameterListContext } from "./CashScriptParser"; -import { ParameterContext } from "./CashScriptParser"; -import { BlockContext } from "./CashScriptParser"; -import { StatementContext } from "./CashScriptParser"; -import { VariableDefinitionContext } from "./CashScriptParser"; -import { AssignStatementContext } from "./CashScriptParser"; -import { TimeOpStatementContext } from "./CashScriptParser"; -import { RequireStatementContext } from "./CashScriptParser"; -import { IfStatementContext } from "./CashScriptParser"; -import { FunctionCallContext } from "./CashScriptParser"; -import { ExpressionListContext } from "./CashScriptParser"; -import { ExpressionContext } from "./CashScriptParser"; -import { LiteralContext } from "./CashScriptParser"; -import { NumberLiteralContext } from "./CashScriptParser"; -import { TypeNameContext } from "./CashScriptParser"; - - -/** - * This interface defines a complete generic visitor for a parse tree produced - * by `CashScriptParser`. - * - * @param The return type of the visit operation. Use `void` for - * operations with no return type. - */ -export interface CashScriptVisitor extends ParseTreeVisitor { - /** - * Visit a parse tree produced by the `Parenthesised` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitParenthesised?: (ctx: ParenthesisedContext) => Result; - - /** - * Visit a parse tree produced by the `Cast` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitCast?: (ctx: CastContext) => Result; - - /** - * Visit a parse tree produced by the `FunctionCallExpression` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitFunctionCallExpression?: (ctx: FunctionCallExpressionContext) => Result; - - /** - * Visit a parse tree produced by the `Instantiation` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitInstantiation?: (ctx: InstantiationContext) => Result; - - /** - * Visit a parse tree produced by the `TupleIndexOp` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitTupleIndexOp?: (ctx: TupleIndexOpContext) => Result; - - /** - * Visit a parse tree produced by the `UnaryOp` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitUnaryOp?: (ctx: UnaryOpContext) => Result; - - /** - * Visit a parse tree produced by the `BinaryOp` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitBinaryOp?: (ctx: BinaryOpContext) => Result; - - /** - * Visit a parse tree produced by the `Array` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitArray?: (ctx: ArrayContext) => Result; - - /** - * Visit a parse tree produced by the `PreimageField` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitPreimageField?: (ctx: PreimageFieldContext) => Result; - - /** - * Visit a parse tree produced by the `Identifier` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitIdentifier?: (ctx: IdentifierContext) => Result; - - /** - * Visit a parse tree produced by the `LiteralExpression` - * labeled alternative in `CashScriptParser.expression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitLiteralExpression?: (ctx: LiteralExpressionContext) => Result; - - /** - * Visit a parse tree produced by `CashScriptParser.sourceFile`. - * @param ctx the parse tree - * @return the visitor result - */ - visitSourceFile?: (ctx: SourceFileContext) => Result; - - /** - * Visit a parse tree produced by `CashScriptParser.pragmaDirective`. - * @param ctx the parse tree - * @return the visitor result - */ - visitPragmaDirective?: (ctx: PragmaDirectiveContext) => Result; - - /** - * Visit a parse tree produced by `CashScriptParser.pragmaName`. - * @param ctx the parse tree - * @return the visitor result - */ - visitPragmaName?: (ctx: PragmaNameContext) => Result; - - /** - * Visit a parse tree produced by `CashScriptParser.pragmaValue`. - * @param ctx the parse tree - * @return the visitor result - */ - visitPragmaValue?: (ctx: PragmaValueContext) => Result; - - /** - * Visit a parse tree produced by `CashScriptParser.versionConstraint`. - * @param ctx the parse tree - * @return the visitor result - */ - visitVersionConstraint?: (ctx: VersionConstraintContext) => Result; - - /** - * Visit a parse tree produced by `CashScriptParser.versionOperator`. - * @param ctx the parse tree - * @return the visitor result - */ - visitVersionOperator?: (ctx: VersionOperatorContext) => Result; - - /** - * Visit a parse tree produced by `CashScriptParser.contractDefinition`. - * @param ctx the parse tree - * @return the visitor result - */ - visitContractDefinition?: (ctx: ContractDefinitionContext) => Result; - - /** - * Visit a parse tree produced by `CashScriptParser.functionDefinition`. - * @param ctx the parse tree - * @return the visitor result - */ - visitFunctionDefinition?: (ctx: FunctionDefinitionContext) => Result; - - /** - * Visit a parse tree produced by `CashScriptParser.parameterList`. - * @param ctx the parse tree - * @return the visitor result - */ - visitParameterList?: (ctx: ParameterListContext) => Result; - - /** - * Visit a parse tree produced by `CashScriptParser.parameter`. - * @param ctx the parse tree - * @return the visitor result - */ - visitParameter?: (ctx: ParameterContext) => Result; - - /** - * Visit a parse tree produced by `CashScriptParser.block`. - * @param ctx the parse tree - * @return the visitor result - */ - visitBlock?: (ctx: BlockContext) => Result; - - /** - * Visit a parse tree produced by `CashScriptParser.statement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitStatement?: (ctx: StatementContext) => Result; - - /** - * Visit a parse tree produced by `CashScriptParser.variableDefinition`. - * @param ctx the parse tree - * @return the visitor result - */ - visitVariableDefinition?: (ctx: VariableDefinitionContext) => Result; - - /** - * Visit a parse tree produced by `CashScriptParser.assignStatement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitAssignStatement?: (ctx: AssignStatementContext) => Result; - - /** - * Visit a parse tree produced by `CashScriptParser.timeOpStatement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitTimeOpStatement?: (ctx: TimeOpStatementContext) => Result; - - /** - * Visit a parse tree produced by `CashScriptParser.requireStatement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitRequireStatement?: (ctx: RequireStatementContext) => Result; - - /** - * Visit a parse tree produced by `CashScriptParser.ifStatement`. - * @param ctx the parse tree - * @return the visitor result - */ - visitIfStatement?: (ctx: IfStatementContext) => Result; - - /** - * Visit a parse tree produced by `CashScriptParser.functionCall`. - * @param ctx the parse tree - * @return the visitor result - */ - visitFunctionCall?: (ctx: FunctionCallContext) => Result; - - /** - * Visit a parse tree produced by `CashScriptParser.expressionList`. - * @param ctx the parse tree - * @return the visitor result - */ - visitExpressionList?: (ctx: ExpressionListContext) => Result; - - /** - * Visit a parse tree produced by `CashScriptParser.expression`. - * @param ctx the parse tree - * @return the visitor result - */ - visitExpression?: (ctx: ExpressionContext) => Result; - - /** - * Visit a parse tree produced by `CashScriptParser.literal`. - * @param ctx the parse tree - * @return the visitor result - */ - visitLiteral?: (ctx: LiteralContext) => Result; - - /** - * Visit a parse tree produced by `CashScriptParser.numberLiteral`. - * @param ctx the parse tree - * @return the visitor result - */ - visitNumberLiteral?: (ctx: NumberLiteralContext) => Result; - - /** - * Visit a parse tree produced by `CashScriptParser.typeName`. - * @param ctx the parse tree - * @return the visitor result - */ - visitTypeName?: (ctx: TypeNameContext) => Result; -} - diff --git a/vscode-cashscript/src/LanguageDesc.ts b/vscode-cashscript/src/LanguageDesc.ts deleted file mode 100644 index c94574f..0000000 --- a/vscode-cashscript/src/LanguageDesc.ts +++ /dev/null @@ -1,111 +0,0 @@ - -interface Data { - [key:string]:{ - code:string, - codeDesc:string, - } -} - - -// Regex to match: (### (\w+)\(\)\n```solidity\n(.*)\n```\n\n(.*)) -let GLOBAL_FUNCTIONS:Data = { - abs:{ - code:'int abs(int a)', - codeDesc:'Returns the absolute value of argument `a`.', - }, - min:{ - code:'int min(int a, int b)', - codeDesc:'Returns the minimum value of arguments `a` and `b`.', - }, - max:{ - code:'int max(int a, int b)', - codeDesc:'Returns the maximum value of arguments `a` and `b`.', - }, - within:{ - code:'bool within(int x, int lower, int upper)', - codeDesc:'Returns `true` if and only if `x >= lower && x < upper`.', - }, - ripemd160:{ - code:'bytes20 ripemd160(any x)', - codeDesc:'Returns the RIPEMD-160 hash of argument `x`.', - }, - sha1:{ - code:'bytes20 sha1(any x)', - codeDesc:'Returns the SHA-1 hash of argument `x`.', - }, - sha256:{ - code:'bytes32 sha256(any x)', - codeDesc:'Returns the SHA-256 hash of argument `x`.', - }, - hash160:{ - code:'bytes20 hash160(any x)', - codeDesc:'Returns the RIPEMD-160 hash of the SHA-256 hash of argument `x`.', - }, - hash256:{ - code:'bytes32 hash256(any x)', - codeDesc:'Returns the double SHA-256 hash of argument `x`.', - }, - checkSig:{ - code:'bool checkSig(sig s, pubkey pk)', - codeDesc:'Checks that transaction signature `s` is valid for the current transaction and matches with public key `pk`.', - }, - checkMultiSig:{ - code:'bool checkMultiSig(sig[] sigs, pubkey[] pks)', - codeDesc:'Performs a multi-signature check using a list of transaction signatures and public keys.', - }, - checkDataSig:{ - code:'bool checkDataSig(datasig s, bytes msg, pubkey pk)', - codeDesc:'Checks that sig `s` is a valid signature for message `msg` and matches with public key `pk`.', - }, -} - - -let OUTPUT_INSTANTIATION:Data = { - OutputP2PKH:{ - code:'new OutputP2PKH(bytes8 amount, bytes20 pkh): bytes34', - codeDesc:'Creates new P2PKH output serialisation for an output sending `amount` to `pkh`.', - }, - OutputP2SH:{ - code:'new OutputP2SH(bytes8 amount, bytes20 scriptHash): bytes32', - codeDesc:'Creates new P2SH output serialisation for an output sending `amount` to `scriptHash`.', - }, - OutputNullData:{ - code:'new OutputNullData(bytes[] chunks): bytes', - codeDesc:'Creates new OP_RETURN output serialisation for an output containing an OP_RETURN script with `chunks` as its data.', - }, -} - -let STATEMENTS:Data = { - require:{ - code:'null require( exp )', - codeDesc:"Takes a boolean expression, if it evaluates to 'false' the contract fails. Used to ensure requirements" - } -} - -let TYPECASTS:Data = { - int:{ - code:"int int( v )", - codeDesc:"Converts to int" - }, - string:{ - code:"string string( v )", - codeDesc:"Converts to string" - }, - bytes:{ - code:"bytes bytes( v )", - codeDesc:"Converts to bytes" - }, - bool:{ - code:"bool bool( v )", - codeDesc:"Converts to bool" - }, - date:{ - code:"int date(\" YYYY-MM-DDThh:mm:ss \")", - codeDesc:"Converts implicit date to timestamp" - } - -} - -let LANGUAGE:Data = {...GLOBAL_FUNCTIONS, ...OUTPUT_INSTANTIATION, ...STATEMENTS}; - -export { GLOBAL_FUNCTIONS, OUTPUT_INSTANTIATION, TYPECASTS, LANGUAGE }; \ No newline at end of file diff --git a/vscode-cashscript/tsconfig.json b/vscode-cashscript/tsconfig.json deleted file mode 100644 index 4a07459..0000000 --- a/vscode-cashscript/tsconfig.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "compilerOptions": { - "module": "commonjs", - "target": "es2019", - "lib": ["ES2019", "ES2020", "DOM"], - "outDir": "out", - "rootDir": "src", - "sourceMap": true - }, - "include": [ - "src/**/*" - ], - "exclude": [ - "./node_modules", - ".vscode-test" - ] -} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index d4f6b07..0000000 --- a/yarn.lock +++ /dev/null @@ -1,1327 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@babel/code-frame@^7.0.0": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658" - integrity sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g== - dependencies: - "@babel/highlight" "^7.12.13" - -"@babel/helper-validator-identifier@^7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" - integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== - -"@babel/highlight@^7.12.13": - version "7.13.10" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.13.10.tgz#a8b2a66148f5b27d666b15d81774347a731d52d1" - integrity sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg== - dependencies: - "@babel/helper-validator-identifier" "^7.12.11" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@types/eslint-visitor-keys@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" - integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag== - -"@types/json-schema@^7.0.3": - version "7.0.7" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad" - integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA== - -"@types/mocha@^8.0.3": - version "8.2.2" - resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-8.2.2.tgz#91daa226eb8c2ff261e6a8cbf8c7304641e095e0" - integrity sha512-Lwh0lzzqT5Pqh6z61P3c3P5nm6fzQK/MMHl9UKeneAeInVflBSz1O2EkX6gM6xfJd7FBXBY5purtLx7fUiZ7Hw== - -"@types/node@^12.12.0": - version "12.20.10" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.10.tgz#4dcb8a85a8f1211acafb88d72fafc7e3d2685583" - integrity sha512-TxCmnSSppKBBOzYzPR2BR25YlX5Oay8z2XGwFBInuA/Co0V9xJhLlW4kjbxKtgeNo3NOMbQP1A5Rc03y+XecPw== - -"@typescript-eslint/experimental-utils@2.34.0": - version "2.34.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz#d3524b644cdb40eebceca67f8cf3e4cc9c8f980f" - integrity sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA== - dependencies: - "@types/json-schema" "^7.0.3" - "@typescript-eslint/typescript-estree" "2.34.0" - eslint-scope "^5.0.0" - eslint-utils "^2.0.0" - -"@typescript-eslint/parser@^2.3.0": - version "2.34.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.34.0.tgz#50252630ca319685420e9a39ca05fe185a256bc8" - integrity sha512-03ilO0ucSD0EPTw2X4PntSIRFtDPWjrVq7C3/Z3VQHRC7+13YB55rcJI3Jt+YgeHbjUdJPcPa7b23rXCBokuyA== - dependencies: - "@types/eslint-visitor-keys" "^1.0.0" - "@typescript-eslint/experimental-utils" "2.34.0" - "@typescript-eslint/typescript-estree" "2.34.0" - eslint-visitor-keys "^1.1.0" - -"@typescript-eslint/typescript-estree@2.34.0": - version "2.34.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz#14aeb6353b39ef0732cc7f1b8285294937cf37d5" - integrity sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg== - dependencies: - debug "^4.1.1" - eslint-visitor-keys "^1.1.0" - glob "^7.1.6" - is-glob "^4.0.1" - lodash "^4.17.15" - semver "^7.3.2" - tsutils "^3.17.1" - -"@ungap/promise-all-settled@1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" - integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== - -acorn-jsx@^5.2.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" - integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== - -acorn@^7.1.1: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - -ajv@^6.10.0, ajv@^6.10.2: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ansi-colors@4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== - -ansi-escapes@^4.2.1: - version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= - -ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== - -ansi-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" - integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== - -ansi-styles@^3.2.0, ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -anymatch@~3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" - integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -browser-stdout@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" - integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camelcase@^6.0.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" - integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== - -chalk@^2.0.0, chalk@^2.1.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^4.0.0, chalk@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" - integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - -chokidar@3.5.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" - integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== - dependencies: - anymatch "~3.1.1" - braces "~3.0.2" - glob-parent "~5.1.0" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.5.0" - optionalDependencies: - fsevents "~2.3.1" - -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-width@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" - integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== - -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -cross-spawn@^6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - -debug@4.3.1, debug@^4.0.1, debug@^4.1.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" - integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== - dependencies: - ms "2.1.2" - -decamelize@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" - integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== - -deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= - -diff@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" - integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -escape-string-regexp@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - -eslint-scope@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - -eslint-utils@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" - integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== - dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-utils@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" - integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== - dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-visitor-keys@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" - integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== - -eslint@^6.4.0: - version "6.8.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb" - integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig== - dependencies: - "@babel/code-frame" "^7.0.0" - ajv "^6.10.0" - chalk "^2.1.0" - cross-spawn "^6.0.5" - debug "^4.0.1" - doctrine "^3.0.0" - eslint-scope "^5.0.0" - eslint-utils "^1.4.3" - eslint-visitor-keys "^1.1.0" - espree "^6.1.2" - esquery "^1.0.1" - esutils "^2.0.2" - file-entry-cache "^5.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^5.0.0" - globals "^12.1.0" - ignore "^4.0.6" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - inquirer "^7.0.0" - is-glob "^4.0.0" - js-yaml "^3.13.1" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.3.0" - lodash "^4.17.14" - minimatch "^3.0.4" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - optionator "^0.8.3" - progress "^2.0.0" - regexpp "^2.0.1" - semver "^6.1.2" - strip-ansi "^5.2.0" - strip-json-comments "^3.0.1" - table "^5.2.3" - text-table "^0.2.0" - v8-compile-cache "^2.0.3" - -espree@^6.1.2: - version "6.2.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a" - integrity sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw== - dependencies: - acorn "^7.1.1" - acorn-jsx "^5.2.0" - eslint-visitor-keys "^1.1.0" - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esquery@^1.0.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" - integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.1.0, estraverse@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" - integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - -fast-deep-equal@^3.1.1: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= - -figures@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== - dependencies: - escape-string-regexp "^1.0.5" - -file-entry-cache@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" - integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== - dependencies: - flat-cache "^2.0.1" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -find-up@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - -flat-cache@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" - integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== - dependencies: - flatted "^2.0.0" - rimraf "2.6.3" - write "1.0.3" - -flat@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" - integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== - -flatted@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" - integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -fsevents@~2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= - -get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -glob-parent@^5.0.0, glob-parent@~5.1.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob@7.1.6, glob@^7.1.3, glob@^7.1.6: - version "7.1.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -globals@^12.1.0: - version "12.4.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" - integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== - dependencies: - type-fest "^0.8.1" - -growl@1.10.5: - version "1.10.5" - resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" - integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -he@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - -iconv-lite@^0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== - -import-fresh@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -inquirer@^7.0.0: - version "7.3.3" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003" - integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA== - dependencies: - ansi-escapes "^4.2.1" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-width "^3.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.19" - mute-stream "0.0.8" - run-async "^2.4.0" - rxjs "^6.6.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - through "^2.3.6" - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== - dependencies: - is-extglob "^2.1.1" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-plain-obj@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" - integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= - -js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.0.0.tgz#f426bc0ff4b4051926cd588c71113183409a121f" - integrity sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q== - dependencies: - argparse "^2.0.1" - -js-yaml@^3.13.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= - -levn@^0.3.0, levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - -lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -log-symbols@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.0.0.tgz#69b3cc46d20f448eccdb75ea1fa733d9e821c920" - integrity sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA== - dependencies: - chalk "^4.0.0" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -minimatch@3.0.4, minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -minimist@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== - -mkdirp@^0.5.1: - version "0.5.5" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== - dependencies: - minimist "^1.2.5" - -mocha@^8.1.1: - version "8.3.2" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-8.3.2.tgz#53406f195fa86fbdebe71f8b1c6fb23221d69fcc" - integrity sha512-UdmISwr/5w+uXLPKspgoV7/RXZwKRTiTjJ2/AC5ZiEztIoOYdfKb19+9jNmEInzx5pBsCyJQzarAxqIGBNYJhg== - dependencies: - "@ungap/promise-all-settled" "1.1.2" - ansi-colors "4.1.1" - browser-stdout "1.3.1" - chokidar "3.5.1" - debug "4.3.1" - diff "5.0.0" - escape-string-regexp "4.0.0" - find-up "5.0.0" - glob "7.1.6" - growl "1.10.5" - he "1.2.0" - js-yaml "4.0.0" - log-symbols "4.0.0" - minimatch "3.0.4" - ms "2.1.3" - nanoid "3.1.20" - serialize-javascript "5.0.1" - strip-json-comments "3.1.1" - supports-color "8.1.1" - which "2.0.2" - wide-align "1.1.3" - workerpool "6.1.0" - yargs "16.2.0" - yargs-parser "20.2.4" - yargs-unparser "2.0.0" - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@2.1.3: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -mute-stream@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== - -nanoid@3.1.20: - version "3.1.20" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.20.tgz#badc263c6b1dcf14b71efaa85f6ab4c1d6cfc788" - integrity sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw== - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= - -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -once@^1.3.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -onetime@^5.1.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -optionator@^0.8.3: - version "0.8.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" - integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.6" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - word-wrap "~1.2.3" - -os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= - -p-limit@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= - -picomatch@^2.0.4, picomatch@^2.2.1: - version "2.2.3" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.3.tgz#465547f359ccc206d3c48e46a1bcb89bf7ee619d" - integrity sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg== - -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= - -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - -punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -readdirp@~3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" - integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== - dependencies: - picomatch "^2.2.1" - -regexpp@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" - integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - -rimraf@2.6.3: - version "2.6.3" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" - integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== - dependencies: - glob "^7.1.3" - -run-async@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" - integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== - -rxjs@^6.6.0: - version "6.6.7" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" - integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== - dependencies: - tslib "^1.9.0" - -safe-buffer@^5.1.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -"safer-buffer@>= 2.1.2 < 3": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -semver@^5.5.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -semver@^6.1.2: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -semver@^7.3.2: - version "7.3.5" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" - integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== - dependencies: - lru-cache "^6.0.0" - -serialize-javascript@5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" - integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== - dependencies: - randombytes "^2.1.0" - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= - dependencies: - shebang-regex "^1.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= - -signal-exit@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" - integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== - -slice-ansi@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" - integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== - dependencies: - ansi-styles "^3.2.0" - astral-regex "^1.0.0" - is-fullwidth-code-point "^2.0.0" - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - -"string-width@^1.0.2 || 2": - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string-width@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" - -string-width@^4.1.0, string-width@^4.2.0: - version "4.2.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" - integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.0" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= - dependencies: - ansi-regex "^3.0.0" - -strip-ansi@^5.1.0, strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - -strip-ansi@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" - integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== - dependencies: - ansi-regex "^5.0.0" - -strip-json-comments@3.1.1, strip-json-comments@^3.0.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -supports-color@8.1.1: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -table@^5.2.3: - version "5.4.6" - resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" - integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== - dependencies: - ajv "^6.10.2" - lodash "^4.17.14" - slice-ansi "^2.1.0" - string-width "^3.0.0" - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= - -through@^2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -tslib@^1.8.1, tslib@^1.9.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tsutils@^3.17.1: - version "3.21.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.1" - -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= - dependencies: - prelude-ls "~1.1.2" - -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - -type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== - -typescript@^4.0.2: - version "4.2.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.2.4.tgz#8610b59747de028fda898a8aef0e103f156d0961" - integrity sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg== - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -v8-compile-cache@^2.0.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== - -which@2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -which@^1.2.9: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -wide-align@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" - integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== - dependencies: - string-width "^1.0.2 || 2" - -word-wrap@~1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== - -workerpool@6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.1.0.tgz#a8e038b4c94569596852de7a8ea4228eefdeb37b" - integrity sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg== - -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -write@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" - integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== - dependencies: - mkdirp "^0.5.1" - -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yargs-parser@20.2.4: - version "20.2.4" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" - integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== - -yargs-parser@^20.2.2: - version "20.2.7" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.7.tgz#61df85c113edfb5a7a4e36eb8aa60ef423cbc90a" - integrity sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw== - -yargs-unparser@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" - integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== - dependencies: - camelcase "^6.0.0" - decamelize "^4.0.0" - flat "^5.0.2" - is-plain-obj "^2.1.0" - -yargs@16.2.0: - version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From 45c6197d35825d97c1869ea7d2ead97f51a2f6bf Mon Sep 17 00:00:00 2001 From: Nathaniel Cherian Date: Wed, 9 Jun 2021 14:20:57 -0700 Subject: [PATCH 13/14] update --- README.md | 2 +- examples/p2pkh.cash | 8 ++++++++ examples/test.cash | 9 --------- media/p2pkh.gif | Bin 0 -> 2066924 bytes snippets/cashscript.snippets.json | 4 ++-- src/CashscriptCompletionProvider.ts | 7 ++----- 6 files changed, 13 insertions(+), 17 deletions(-) create mode 100644 examples/p2pkh.cash delete mode 100644 examples/test.cash create mode 100644 media/p2pkh.gif diff --git a/README.md b/README.md index 22d268e..382129c 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Vscode-cashscript provides tools that make it easier for developers to write smart contracts with [cashscript](cashscript.org). - +![example of vscode-cashscript](media/p2pkh.gif) ## Features diff --git a/examples/p2pkh.cash b/examples/p2pkh.cash new file mode 100644 index 0000000..8da5674 --- /dev/null +++ b/examples/p2pkh.cash @@ -0,0 +1,8 @@ +pragma cashscript ^0.6.0; + +contract P2PKH(bytes20 pkh) { + function spend(pubkey pk, sig s) { + require(hash160(pk) == pkh); + require(checkSig(s, pk)); + } +} diff --git a/examples/test.cash b/examples/test.cash deleted file mode 100644 index e293401..0000000 --- a/examples/test.cash +++ /dev/null @@ -1,9 +0,0 @@ -pragma cashscript ^0.6.0; - -contract myContract() { - function test(sig s) { - require(checkDataSig(s, msg, pk)); - require(tx.time >= 0); - require(checkSig()); - } -} \ No newline at end of file diff --git a/media/p2pkh.gif b/media/p2pkh.gif new file mode 100644 index 0000000000000000000000000000000000000000..81fdee63befcd2e6a8334b55b5fa6398d6896053 GIT binary patch literal 2066924 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

pVkm zx>Ro_U$?t!Z&IoH?e*4$`(5|>dJ7poNf~#;7`m$id#SurYD_?7T5m*kFG8a`C9SKj z=~Ke%PgSmc9i^YjHF}$^dwcq1Pu4y;xPC0P?rJ^mYvSu4D(%Z?>Yq05otf;LG9F-& z?;lMYSZx|upB&gY9-#70?6Mzs#RvZe4(_K79ySdgPY#|Q4}$pri+37A1Pvk6hv=Gz z7^a4pPKE&fVU`QS|9GdMVXpLHp5|e`sbNeuP15|Z;4eT_0jRF{Xjz1h_o9@ zKp|ID!Sf+omYW`w9^~L5typzL)F~?hDcY?;8)5lzz$6Tkz>WBmGZ$~}(zwY

T5^Ie9M^{tdsd#azf>ul+yUW*WCJE8}z*{{d+_6 zKi;Y3()%PimYER}ac3(N^>&I#Mh zi3ZP!Nl&eMeHGu3XPcgr5tx_LoL8XoPQmjk8S`o_)EQmX^V9QKfdwti1sy8y6ue-N zv0&J;U_8BGa=L(@p1&yYvq$cydGJrmjGrPVgH|@@5+{G!2`oN#`{`gJ?r5{jHS5BrNGlA)%H2o>j?#u3g_|Mc`zXv0Am$tT{IT`vje4P4;;^#t#|v$Qf=33ftboYUpFpHi9^X z_&~C0)^|SlXZ+e78JP%XpPc@synS;*>}j9NtWr^Ip8Hu_NNW|JQ`Tr+At@g ze@n0IGO>GE(iCTGUNAF-;(ncOp!i6?fLSEs;uc*TuM=L1eb|lu2MWf!t=5X0Yhlgy z{IY9<_z@23!o%=n)G!9v-T;6&x~tf24kGu7y*}KYOT+`1pxARuTm%At1BSy4Q8vKz z4Cf6T@IxEexB1OUBqFz96=iVzj2%)2rZ5D(WT&Q`1+#_0tpK=*In0C&F=e!i@}i-R zbUZ@;b-4H!i8asVFob~r;z^)KAh@$9jkAo)=mUha-QFEL;BGt+5C;T30iKla1zy|_ zegZs-0})MusPcUh^Zv8*`(bAeV$UDMUp#nuen0vm>TbnBRK-P{r)L7VcNz&aC7M zua$5%EqC{d!%Ak#TgjnEbc;7tDyKV1j5K=mDV2`h&rYoLj1Q_7`$%U4%K8qrm)di+ zL#JaVW^4vsKAJf4V--OYHz{iao$0(d&_oTqNlylX`<18Ux~%6O;P+s$|8qv?cQya% z@3cauAIfAJeU~R1y~|HI)Id$&J0qUN+B7`+Gg|rNBBiDIV0Y)&dA2~Ru~>?86auo! zYWsL*a!MKS)K3a#7k_a{z&J9rfset6h6CLpqs{mVYLd;wdI)3#%sj(cEXlW*b=b{d zmD%i9ePs2x?piN*@;Ehl=~az}z%gU!iTf#5F1RfA(BRJoQcNr}b|i|D>jsOUB2QLt zq?ow@ji&S@qv2BIZ@Ioa0u+sv7gGP-S3TlN->>u~P<}vhp25>Z=~vQo6FA|u`+(eU z$7+)caK_Pobs9xB3jV@2sT!~MJuqoV7u(Mr(a!A&7yIn_>oPsX(J5+=+w+~vRH?kvb-L^jKEVSt5$SimxFA>>SrVCa$5|rH zS94}1vwd}zf@Va|sNR3eY~^&n+`Cf^gA_xnL+Scr(Z7%^iP#(@8p(^HozO$Or_Yvs zM>n2*01gke0Ud`iwS+(Lgz;g?VeO1pCa<@neiU!ljpES!ZB*XLyWS5=Acfiyh%{UV zTh`tT7qBy-p$_;HD6^*Bg@=_R-Tv!aMkmwc9R9FV%4Q$n>GGL@3D5giI=g6n7 zD~~YvtSjI)->gcva@95_$J+od*%LkrH+{&Ez`w;89~n{v0?UunQ49$LIs<#b5odiZ zt>JiYDIMRm-yjSCbcR+yz@d$HT8BgNYhDA-<^m#Tf%wL-nz(SxXs2qHy}s4yGru40 zPSU>hMmE9aFIiqWXdf%pIh9HW{#oPGLfZp}m^_9xtpzR1NP@7{4*Cm)gq(}qm40hJ z`Gep9!h_=#j`~%@UPDJ)BPWTNC$$*&|@>T#F)@zidrh_D)JJmRMKED)XeoU(? zqD{K{Az809)*x_5%0`yn%2|<_X^U@(dLkC4qv%W58V-bfw8D8ORno`7$pWN?OWDPb`d6@>s|w;w zo?!nkC3PXvI^p-+%01o0^bbddTP$8|{*AqFeJa7}mvp&DC38(5RMPAHEDX<}vP@(l zCBj0h-7k1AM?VrIb8aa_(k5~?yc3nl&W@G}SJb(3fcV>Tw(NW`oacYpT!n(n{?AFD zV8>++d6)lv()TG@=5}uyHR-#Ylqss(OS+UL1XI5ttyQt|ruCxo^Z#tFetv^j74;5B z->h_izqN-KMWLl(A7RqowNl03s+~U<-}+RWE$@LcTd5p>m!*6K^3~q;)BExt9|*a3 zw6^{%R5^`R=_>SAzQT4Bg^V(c>#Mpy)h zMHl5MK^8uYy~aQG(S=2Vu~HC_92g~Fnd|UXQRNO8azt6*!)~!lap;O?*kR2)xYmp! zFG?g9tu9qA_LqPagO~{d&n60v?x3OI9BHFF9fSx;$YmTJb#?rHIky&?tc^l~jyK3> zZqajr;DDoGt1u1~#(_uXb#~xoT1i+7YhD0Rh+FkRo|eqkKK>HBwTrb9s5~4wg4ISs?on|+zN*n1#VO? zL$wooOii^Rv^TxawYK+iGqwWUWw)0Rkb8cZJkD0=qkB949K#JLYwSfh>MF7?&~BQb z6)&NI-F=E(uo=un=`rNNHs`)3ed11d zY@LOT9C7m#xXgXXN7PzdDeVphdqWoZo^XIhw6!zfS{yncENJK&P=7F zuc6~B0e8+$2`gE_hYdL#M`H*jx9w=(H3!aC1HIa3l`+o7-+8K1^oW+2Fn8lwcDb=I zxfrn9i=#GP#jjm5s?vgiEC%TJVmdIHVp~UaJLk)xFlH{3)EsasDw)C*R$1pA*p9C zh-d{q>LB_sGheEkjE8B##Mov772@#8mAt6PmG{8WpFANlJ zrN!|wUP~ANBH57bEL@Q~I`7F**iu2ZLCX%o98efnVH=Mu0mAP0l_biwo3GFE66FZE|(PB zolVx4l$w1O*<9S934~QJIf^BWYm2DZ6L}Z35XeX!k=o*`3{8SSDOp$Pcm|2ln1z;k z>M^{GlC>2iKfn4q*R>pt;GsxldmB01xwEffcAw?hn&P$CNL;eS-TTr*SOT{ufndEp zYkNlw!lp@vCURg9oydF4a;?z2r(pg}AjAm%K(orX%zLmjgex4F{JvOAZ0e6c(VGib ztRNP_?4i7LZIYPQEA(z++Pvd-5s+#OqZ>g>*1a;yCbEtB30a%CM~JxKietW6AtN9c zXfHm~+K#N-3TKu}rjM{><}EObvPhfrPT%i1_i!niN-%Q2PU(`!kbQc;$${&)Ww-2x zZ0xPTdH$uk9vosP?!AnI_&AO(fb7XNQeiuGs!M-8w){%N*4Oi%H_+BVD0`A8?9ap2 zipaNbf(qd8UN^NvGuV+~ix)g##^iy&9FghUZ#P4> z8h^kJ9;KgL-Xd@Yq9LaHt>Dhx#_x5;+I?<4RA;t@-R%y&^?%=_!WdVsg& zPD1i=^I6K-$JZF6cV2u@UXZ3yt$ic$t6&7Kd|5Qe#uQO4TzSgq8)fdy& zd{3(z^0Cl!o`G4nO(1WHL2Ivn^G`INHvTx!^t0n^*(9Dl?)S3!{ig5uT}A%^=fhJs zR<1erDniMP%LEY08VzG1P`^6jK}^mB2rz_&ip7T@ErX`H{N6Xp4s4EJoSE7jc#qu( z3Yc1&p0?^f*`R3)m|YXtZyr3^jNS~Gqxo>q_@regJ@a^0|HEPT-P7H2kHG0_o;600 zGKIAae=ROl<7a%yYR~7)?mxM<6;c+D?QNMT$roF;O~8RQZb9|E;>15Mqb1W9;OSG&Lro&kUKJfPj~N8w)3_Z}9UA;QifA}S%` zg}!I&LInLn&hLi^afP1i36WF@rAk_=k)g^dp>hTxHOh|^K=1_%)$3TeQN^R%6{N#G zS0fd~Wdr!L4pQ(Q$xI~-Zy9FJ<#)Z#j~Mafpxeoz=aG>LcBl(}l>okC=YzBZhoc$F z@zhWc$yo=^P$mj)fh7Ku?y-;wW;7w|;qIXZk;@N#NRhtK1oud>$Q4R~Z&Y2RMR#Oa zPh^CjPn>1cdTrG6!pIcMsPxFlaKEUP#i*3=$aG{>rdX8K-Kfa%r_6vyz!nU@1yA-? zH7F!K^9jSJgjv@`Uqk+T_HHnUF%gTg5exf(2*+w^jKbWXWw!c zl>y%jdwE=_z>)P*lt5!j_BIhuz+Xx>JV<(UFWI;#SzbTMuRhsKoMkZN;x$!3eBtKx z8*Yhr6Rj)k@r!r-fLDHa2TVB4W2}8LE%q_U2@biC4hWD>AqO16G!8Nr||`7@^{a=d#1y()8{CcXzpP%zKLfH-^lnGm9cUuV^ln& z<95b6cc!*n=IY~&t)h(0qV(OU%;TcWzv7w8moksOWvr=YExtm4{j;|2Wk6apJkY`( zXqx)~O|VlM(O!mbo59{v_5EVDK^^SUmXvN@OsyXLT)y@vjzlQNZ$Vp=_uHfME-+cO z`{z>=Y+O#U%}-+=j5XE=4h`f_xnuol!uZ_Y3Ik z>vrz6$FRp}XsPfk%PuRo9*MN>)k`1MNOi%4~om#UsqBL%b5czVK>XsYnAZf%6*Bd zLzk+CMC4Oejf6)WOwm=VJeAZT)=dge)tP{5;k9yUT9|VW8hmvUqh{n#!6FPeDsxRL#_btFOJYcn!N@^zQD&JKM&0_5ts1OWw4;Uu#BR z>nu@w->BBDq!$0FHetRN|GLJ2wVE!witB#0&drJ^Yws`ItReE&gwoeVNY?H7*L;k8 zuOn|c?hiE56(ksyo-fJ2saD^@qkrX~6#^RDKjmN>n-rrP+m0G( zzBi40YGVD~sQ#(?b3ilVW|QXc27nS!KDgG@d$W1|e#_62=CMzW_0cUYB`r%OEtPA{ z4A6gJ-zfcu74@ovPah_En-7m#PCvDPq$>7}J|NS`bWLQ2Nix$h8Q^PW(P(9}ZsiDU z%0Y!x_eMf0@@YP9{&o2ycjZPLeW)a!XUjdlg=b|nVZC-G^@P3;;9V6Ef3XUCyO&u)9yv7=B_qOs)H9F0$JFf?JTBdbcHFa7~cG?_w+VOQc zXmmMRcijo>`nS2-)a5$a<$m1d$=CfrquXa)Ud_6DJ4}(b68SXut>1Asq4Zo7NSxT0 z|D4<%))#Y*^13HxvM2VqC!X(PqQ=K0>yIx3Kc=L8Ol|s@Hu*8*_+u7dZ;nQ9o^@|Q zU~gesZ*fy^>11!&ac>3Rrz(w4HP)YM13%TJeQId>)HM02<@ghsudhv`ufw{pE3mI8 zt*^JKuWzz%;J9yyuYW|Nf7H5vEUqk{e@*&! zGzNFA|9>TY0w=?0{t>|oBf_^vM1w}e(nlnkN2I1kq)$d<_&>{C_^d#=^;s$Cvr77B zwdT(nQ=c_YK4af@4Rep03?sBJj~b+p8a9s_PmP+KjPgE9!B4T6VxiDh`m4WKToaX{ z7@dv8FQP;zP1u;E>?_Crk@P8Qx1#3BI`@NEK8G-o$xIO0b6)8vr+8~E&(Q%p{(*Sw z$Ni{iJ{mAvI%GjNbP82bW9&k3x`#)&RE)F83epXaMai%cDrjQJ-=x;0W63H>zp%6Q zfG-{kAxzyGQxkBZ@APH{HUE|LrT5(>Aezr9{UU){FNm$Pii#6J-Op5b z>;T>@aDV^gK=UMgcyjQ<)G*`Jm&?HDxv7busWD3W6tr?`ynkx;*VGi_Gz2sKlDw{^k(`b59UWA3WCf6i<75sXn`O&5dD@Qf&c;w%#d*)gx$=Q=Q5OAAbRo)a%cu( z4}uM#DE!1OuYmQl-TzUJwF=G(qeJfZT1AxHLdlF$Y1-36-(%ZOpNP zLHV3>4m-1;ta*)Ckov~_h0}R0s+P&Lpr^T@Z?j-2Z!Q8U^18w zFJ~nUXv?GcsCbZ#KX_&VhWjalnm^`8abo?ETeD8W@=##umJPS8rebo%;@cs*2v5e4 zA$gH@6r^JQ3KM(i5D+><=SJC>g^_2S7iMFp=jdi;6luqGr@$jkK#;oAZL>l%%!DNTM0zrIdm=SHv%Etyj(||?%ZtZ>3~x;QX=NBf z$a81PKv0<#q!$wA#mGqp(_URd$U;IqY2Oh*UxLBcV?p<9Sj4;;Azln$rh%B2Wu!e+ z%x(ilgg~;POBxKJS?fs92F??lOa`Bg1@R56F$}LH6XxFnbJsW4p~Pi~7q}Y$fzE6S zxBL>xUJ9N0g_MD`522LMfD(BFNq}<24Pd6{l%^MzY=}bSIpIM-MPN=YR8EX_o(`BJ zY64FL=ENv*>t~4bMVdf<8IT;j=~f1;+5k#3&=ILwCa+nD*(?nn1os5d5AB{#?dop= z^jWjWtX;!1FvE+$vyh}r1!+4J zKLI2?14^@Pzw3#R!B3u}#%p$mkXGw66^EDFt=TIN5VK%L%n?2AsAiDu3{Y0Ic{po$ zYeoW?`h3*Nd`u1d8ZI8UJUQ+>4^Y#+&Wp!grpE(6j$ycykLORm#GQQIJpYM8IsUMD z^kER%a2{1sez+J1DzimtfS|%4Xu*#QlV`a32{a$kSR|N&NGLhjJb-S4LAbe4Y{>sB z>6`0_5)hMKr*?fKm>JZqY9g_@ICG?-=(?ZTPs2E*N`tX#e1~x=%_Vf!_fEo@uZ_l8oK8f4~k;-WeE0oVHmZJ{=;FPd3|t<615 za+Oqb-!|094-aN&drw=Z?%w;7bG4f3*5l3olq!nb550q}m+4HJDe9Qbp@R(NbOah#1$IGNv_g5FT1eiGA#@;L!$&YI<)D)- zRI`U3%w^ysrOhr6W6BX<$aU3)ZTZ1aFopzKeSVRUR<$z$upNC&sPN7Q{>|TlosoW) zn+9hwR!iKWr)23fuMKswNc^0SsS@D1QW;~Jv%87v0;hniUg)l8k!I-FQGbWrl6AMR z(lfpR4i;x})P*CNCR!F=#+}eSU9P=3*C%=2+H>%CZFxVbpM8pBExJ0}F7&zS zt%Tl_Pod86=WY2-sTyK3Tn01Asi7g+@9jdlc`U5MS}&yJ5dNo{4ip3jU4vZyKh|`# z^<$)5jzh6=ZKiN}7rq0}kpg4ktHstItMdQ*@qV$#@tdolE8^L!fr!FjI)1~N!r@$l z=Mq7e=q85E1{<U5{HL3LpC%AoaL-sM%D6N{e zJDRkvPW^kl&wnLH>?%&SGC@ce$g?ndtln=m~!eruw{R9GxeA)Sa;_Y>`CDwyWe z*?&!52%pZv8geP){hblvv6^4s>%7+l3P1jF56^_%K2!+wYaLfmtUT>+s{g$-lxvh} z(%kT8ZM^#akAddKz0H~SXv!JWmZpQ>%b!bZ2V0tt_O|9fWtx6CeW>cTzV>7AM_}r5 zG-$-uOhZ_9hBz|Yn#|935@Bbit09K*cJFsY>#`f}A|R2*Dp&29-iCmzko#Unj1YD& zqnk+l+-!7ikyeiJ0R}&>WwwvV#cPRm=;P4BEKl{5JQeWFkT8c%c6Fs2*PJr0g_|pz zFumy1!e?RPxpieQFg6V~6o%OhSqXy}nit)%xS>n?7P>~!OzWZW4S6LIUtIeDd&~;fUNOPwHfuJiG{Wp0pT~><< z3yN2ZOKVqGOQ?_c5^JS3V=ilN|J8KLn*Od*YdUHRT@~)I`|Fj~&Do{to@C;BHM8$9 zyoR-Mb{+TdN{O4Hxob35ka}ckAUOR}eS~GXpk$+=DaZVK;DywZ@9f4(qzE=TIvs$btkYYkuJ6em&55LQ3M< z?k0WkD}D z!#H_VDcc?22p_utnA*~~@6Se_E!&@qQQp{}kJpzzSV*#PKlnM8e`#oh$xOCuDJ7z8 z`G;4e`{7FA8>Z)gy)l0$+g+cm!}Xf4?u|^$m%#F$sn)XSSt6H$b}Ql%hIX6TE0$1G zX1I3z`?EAfgMIYsW@ChysN*F#5@>IZ7M*=GqpD$?HSgJ;m+SdRB1lBJGjCp%8&tq9EE8@3@?aQ0{4E z^4|(YueWhEY<*~$>LP(l=|Y)u5Xz)%21wCW{&50GDTWU0Zbgz*8b%=8a5(#|wnWOZ zZigVxcBFxE4$FVQwCyN-Ob*+do{sa!XK&VtLm93XCQvu;J%eqWLB|Lcu_gzRDm(A<=#8 zs-rNiU>iy=F4|HulJmCKc_MNo=(?B|OAnbOEn-i5J*$o7X-fBX>V!o_Oup3JOP{PJ zc3#%?CQ)EpV)WJ&1s-k2a>2#0BUMLyQF`wqWia^gcP5B& z`P^%)iAYUiR=aV57H9F$T^{+=&X`4oUn|Lj30qHI9H;3i_YTMU@8+TziwyJ)M-o$a z^TaL}87f*eKM+{;{+4zYGP5#piRVgzLUWPEnO9~*W=ZFH!UWiL#y`K{`BP|cx%f)* zQ*%_8`HOHK>KU8ig=_~Oe+yq5+P790%C57Q+zPVMN6FM>28TV?VtixuwRg|GGcS6jtk%&ki#jZ{zt}5!s)w`MYl1&i#31oUfGF&2Qt{ z*J^_jg7R;i2#$CB2Tc1VecouI&*5QJyzX1a!B|+gTpCS@OfE_C0#sk^B0C zB>k8L;j1@#OAjF@m%1a}cm?y_#Gno(=ML+> zKDi|NsG)yq(zTlI+hD=Ns#pA*W`m7g;fQz5Yv+Dlq}qoYdhAW$Q;*Ag>OaO!-nFuC zY=+u4eq&Zdyo6Y3QX#v$P8<;kXykn8W$h5H;#U1K|KPAKr z8LwJ;ME)tw_){j?5o8k4@U`1L9{a~&-O=>OxUtjs-SeO|WL?AeW~ROR=gljo?~lf} zV;?r(PG5D~YaBh0-Y@;yymduc9da1EpU2v=ZFW&@;jHOF@6FSll)fG_OY zvPcz8+$m7z!G6&LBvltUOKN{21y=-qr6Vd(#< z=`5L24!=`Q_Xj_m?hR5-k0=xn7Xd;Y6R{*9{0PVt0$m+}VVuCUPXM@xEGk4cOCpCK zkt>DBQ%B?*CkpHn(Oe;dDj~v_A){EyM5l{R7in>cU;e!`=78J-H$ts6_Z!Mm+TUzX*G;sHPfs+dGXA`U;)U z0@6VQM5$sxK)N*PC?FzL!3v0&gcd@PDjgDf@6t=?y(vl+L6NSaSZK-@-~YSM-rpE| zoO6|%jFGXfvgUl|{LKje)QG^Qh@jbs;Qa_JHvz9q2(_U)@&rOEf!IWdo+ZToXD}^6 zIWozHTE~e@O^r-%ip-pi%-)YAZQOgs>PWUB7Wxy5Q;DTb#PV5U$3rtXM_+=jKf^WH-PK}=E;N& z(C0)Q&tje52ku}lL7izIOv0O+V$Pic9%30#X7Gb4xF?BbtN08AN7paMb7}>#tR)*A zhj>h(Mt9;Kn?5*3M2$s&0>Erac#yQ^Gnpwk>s%aQi)2;+TrA>Q;$u;B@d5|&Xr2V& z5)KrGl^4X%8cXL5}nm5Ii0f7eb$$=1{R7U4yWhWqr1ikn&MPC_W?~%j> zAVcC(AY=q04#ejR=9}b$EGIM6q-CT5F_Q`3$j?iZsB$)u8O%UKM$p8ir5*5PN+LC= z3LOi2p#mh>h8B9HQ(cngA)o>a3Xw~>E1ANFP1+Jl*WS-C8_EDyl1T59tO64K0-iU4 zli`}_fKa+P8c@^EWT1q|pYUWuYCx4dNVr@gEje4hB)b!rj*PzmMS=k|z$yp)vQ?=< z3nQv?eyaeP81Q){7-mOe2f(y;Bsh^o-$J6BC(#~~=uu=Q0}{I(nTuLUC6akd$*fx> zj$x9ZCz;=X1otCR8&9EiC9WP+*p>Y?#g}>janeJ-4n25hP(mKr#YOfB@jCETRT? zE|k(_Mo*HKV<5#U~W(L+@rz^>>K5%k2f=qalBF|p{rRB=#XaTt9u z@kF&aCcQXtt2my%B-o&Y;92~rrI<#(NPV{eAYEl^wk@+4V zre#`Tg276$0xv-G7Z18T&yLrGt73f%~*q17nug=G)tFf)dF)up>o*sdw&r73u z3+JSPE-a`63+e(oX}X|gN8nG7&n>AHevxK3obM!A*9-U-1*=gssbRSP=3aoQg4+83 zA*lPJxa(BzhW>Bdi%S^U|D@r@GX8Qe0{q?<;vV|{x1hc-8|~Ck@Gtk`H91cs%>2P$ zLG9E-%u1(@+Zm_vJwc5$RQ$`mXsmqO>c96NLEVW>+~QGJu6AzK4=uFKT&w8#h%Xmj2A1nD0^O&jAuN*u^a;EO00ykTe+`N|DREvmE?nks8cwcX;#9c68=C~e&EhVbSlG{v8#w84iPbo5PLI{7 zBvAkxb9F^o_{K$D9#K97MYDk4#;xSzbBBkUA5;EG!?`~9SW9y+94gS(R1q6WFbbr} z)!a`@dQVNmm8@q6{oGv7!ODhXNYPB%?qo~;;aOos1;;H9qOR0tev*}^2g<~)w1n{N zVW1hCeyG$|@jrq(_dJ;@r~|h=H6sxx-w}Z|9iG$N2-BM0e+4ysM4F?Q(`$#jX?|YP z2r6Go3mKPEv*beDciwq1>sI!uVbNT(qTWc@9H@JNm!9T+`&Up~rt*rPg7nc>wbD{c zu5PDo$zM8-e{TQfUM!xWidXMM3PQYGt`n}bvum)UD2?r=wI#2w*$P4dP}p1g0w{i)bS5 zU!S;LGr$Q|VS0fvKlAA|>rV|!+DqDKZC$NeqxG!U55jQRxnE47+iXLXSu%50?cuaa z3RfYG*K~ZHVO$owC&r=3N6-4)m&ad7PqIcL{|f3?+xMt~+GOg3R`ltEkE!C{wbwEq zWyf)6|K(n6t{5I}673@ow?aEt4tdK5I_kG-XJTt_He9sK!5rdk`Z)$a$6~&Su50jq zMxgH;ufRRXeOyNhUD{8coH2vdLg+e=fA&y$q5OWu`?{!=qLuz9otb!gk?To~3YsLH8&%>5gb0 ztd>LrIT03$lL$fs=bZY*>Q`tbl5n&m+?N^aeZvxwuFf{2xtxuIeX@aHqv$ON)%|+? z3h=0iz?$Am`Mx3eK|DBlxtEDpLw9FGGepZ*TWJy$HulNO1g^SA@4h3w2Y*qwc$^U+C5 zLjMZt8FMYx-~zq&$ttuWB9g1kDRhiUJGtv?tROQ!f~B_*5mRr?LnLW#v3Kzf5xT`( z02+l|3eOvKHyeRN3%C63AMQm=!N@g}ekN~V5T)xfD%Wd)ZsHl_-N2p*-Vg>Ep44CB zeglM`uh(So!S;)3)kI263(?<^fC@AK;c_->4=xWE>ncg*DW{I3Qw}Y3UYfRL$hlmr zdAz9Ydp<59oWSgevEnM-4bA#U?`N=UHFoWJm5Yq{r2bOEec%8EAksvv!S84cLW>IKTG7Byxkd}-(|D}f@`#4hr~dDXIL zIMng;F!5y_gbk=R+<1bEw_3i+>N~3-_g7FGm%G&2*ffrFSU$?y<_Zi04Vk~GZ7bbz zIMX^uRngYzS*2C*a8~njmb(Un_{&7M@kBkVT0@$OK|Qs&*%Jkh(x$PB+l@2}3xOl$ z4m6*w!@ORXJ%8PFL+7?{ve$TNx;8sP?$gJ~d&oD;6ECW=Je|%y)=5n(w~k_}@*gl< z>M?lODs=2UHO)JJ=xbG<{Yl1su51YiOc9wp=cB3~8R6rAyvHa;L~e2b=b#eqk<8!b}=L$n~|m@$KamVs$!BJq&h_Mn=}o|K(mBsh;UvT~9& zwp$lw<|a-Q_G~7D-YNDR{9PdD`sz)itCl|TbjdbHl;2~+c>ZOirR!MbZgw?bHzsCL zUwqlv^XUcDWK8(|Y{_;{qsGJWQj>F~9%X~=^oMVn#$QxE8r!~hbU350AMybAiJTbA zjO+c&y`Xjl&K}K8#x~R!8GrJ$KboH%Z)j*7`*i#9(ZVuwW7ELD3*;t^Ei+@EAGZEo zAa872H~td1aI~~P-q`VL>`U;`(K`@J6NT1f7tc!#K3-|+<{I~HqG;+cHU7GM%H+#e zv&AJ})1JOhOnz;k+aF4{l?UHl_!{5Zx+->ZtFiBg!uzDwBc?kKRED)>_wHY8qY7%3 z%98wh5Axcmg8J}huqXAei3w?XlPh%iIaZp^|zBkbyZJ?R6Q=9l7K`pK@ z@fyneu#zgM^-ukr`!N5#VV(T`-qY>3dmTgdNA0^2EZmE1C;Nj}f_pDl9V6d#9MFHi z@SV;5c+>vmaCV~OXXC|(oA){&=A3k#d@Vf_JSE>rD0>8MhRv(_g5GqtnO{sx_=(5fc8av&u|1{|IUu zRo+46l^NWlL@e50?UbIfunnH`9!^5yG*weK+{MfOBd9Z{@QU2xR84(8Aw+dHges_= zxHoHPoK)YpbF|#He>Fv54cB`8&X>SVfFE0cC%qeKXKOvMJ%|( zyTOlLxy1qha2GwCXR3hPY`B0zxUUVbgK|V3IQ-!T-`&)R@~`1R8+;G;Bk=n^IAuac zO+>gq$~%?Nx)Kq6(!`tli_nQ9Bygi9tRqwXZzrWjX4OPyHu1#nN0zNb=IZg}+YpNp z-eIZ4U_WB{1~+-1ST7z`x6ny>29smaosw9qc5(@MbGNe_P#(*~BoMTKJ*%RGt&ZXG=q)i^+qat;G>oXA-;)PY1g9uOL!A%Y+z5X6)OLW2;c zpg=GgfhJQO0d_lpv&D;!dbNI zLaRUoi4#@mRErf$Ns29AJ!nXUDFg4xVIjW|gsl`55y<}1ml1(x0{iB{418!Rq`(2-|^)D*JOi{}zSgY>NDvCx>^B58wgUON(S zNXDW-JM&~n7nKczJk=tCYaut=u_;MG=8ltY|O<42F_xMe6CrLP4?& zbx>zIB$}1=1Oui8gW0R=fXO_-q+eWpTyJdnLfIa;#0$P~1js~z#LK|q(qI_|uy|Rms(l?DxB=qafWm+!qChuV z*&gsBoy!{7Rv>cAjk3ECssNWoyRV{wO%gLAju}B>{)`2EGi7zdDuf*&!_=C?yP$F; z#aA`WncJ*6Q6NDIG_ac14+Eh^w&V-JL@`J~G*A@c-tp3+D4+K(KpLjXzd69C_X&BDKI2dU>SUP zH1^VLd^H-hRzAL!IZhoR|HwGLTR#46ar|r0-v#o0M(AgUiQ}M&o#Tl^zRBNh6Ewz? zpbHaUGAAGvGI$5R7jj5PwUHjLks-cj-k>o~XMGwlGkl6c3^~Lo4#UdP%c}6Vk3i)y z?cHTlPvpnh!3=P6zhZA1AohKdeg!NKYHf%HO`!qB-ANHS8jc!-F1m?EletBW=&HTqv`jz$FJhvEOKIZ}-spB4v#->XZ;IT{DkmcEG-nP(phI}X>E zyedNS`v^?>}ae65qnZ^-$6s#XSRszWt)hFnV*sX$XMpV=1wJ%!_| zz8Nn}1ECB8G6`my+M#T(+J7*0oyAX>#F$fSjyFSY(WOffJimRMfa~zH8&B31n-=*- zqIB%ui^Cd?nuDGYNz#|8Y{~h>d8E`NCB+S85?5^ao`&g`%j)3N+lFfe%+vMfm7Q~A z#gN(^XW2flBQ!Nnw6GrgCX0}fX9L{b`+>fIwJH5fA|l;Lgz$rnk&`kfNiPjTx+2HxE1XNL?bz zau($Tr#2P4M6T-VeIPD=+|P?sWA<>3*ApmlO)!$(bWJqXkQ7Z&c%DpWX5%SLZz?V} zU2s!N2tA#e(PkwEx#brA-m2={^qO8(`@tIKo|UMZrq5cyt<1+iht_j~;q)6MJg311 zIb4jmkxTr^V-vi`V-+WWF!clqQY$?qAx}4^Hq%LBNgf6n;hv>>PtoC~sPbAW>9o50 zByg*|o|(O@oPH(Hi>K=ImRC6<8o5*T*Vv%~P0My_M_JYS>uxAUNnaxrmjYD#iQM0? z;1cCi;VLS0n^gz99nZUwTV~p_Q)qA6x?9V8neXcxuP^QUYh{0poyT9=_72Nri4`rL zw{1TV8Ca`msm6|j#~?VOfh9^O3`764*SC-FQQOtOs8n4oALW%AW3E%CmHm|Loo^!w zL-M95x&nCv2f2mx1ZnQ|ow}R6r*!Htr;5JQLi+gXd1NoX(uQ8v0>&y(Y}P(MUfbNN z`0?8K(HO^AU@=%vr};iREkqv3e>;(oem@Fxff5c9;CUh!NAVxn{;^~tdQ!u~%l;PZ z!pmDy%K$NYiI}VjIx!; z4+)#0feF4iRrY$#8%mD-ll-C@roo+l2KpcNZF_q#mUk+Szl}bPI^0t<&J0JjUF>Dj zGm-iHqXALf5zm9D*VLcaN%DfTLpX$b4-p8nU{<7~rs;aY-=xIk`k7bjixx>3FjxYk zx$)-WZ%OUPdka=P%fEor7%;t^6P~kj7jxQO6D=0f%?d1I#N0!#T70nD(=9#+O$Sah zP)~co5fSIvcSBh`UPHuRhMsBbb$T?i(BU+AsbP7A>CDcG)=AU3o+?uoumu}}E=5^h zNcF4O3r#Bd4+5fYoFFe|F0t`wX~Tnk0xd#9dQ;#YA^FJ z2wxKR4RfX$$rJdSlz8tO8&D!(oBu;vL2uX&3o~KkoD0>q8+aBcliEBlh7?s!kcl46 z7gHJ)db81#r(WKdWgS-s{+OFc#Wy z#^*S8izBhz1zPFyKr3CMnBzwG*&>zH#jg+|0X2}B0K&FxjCa;{YgCPI|*T2ti>`v5w6NE zL}#JJS!>GnWUY?zU{pd{a7%$jSjRlpeZl`cgrJ@JJ%7Lzsjy#<8m9me3kJ>+|91!t*~6mkC39Dlp-^K#`lQQ(Dss z-|9sMCrX(UyBG5@jivO6w-&T6X0W zf{RgM_8Q6s4e9f$aL_sH9N^4&&0of~Y?%gTNv79idafI5OCanBu|6s&b5TiPg3Xe7 z{yA zE(J{(=&69FhRCdnN7$aEdR2ebd>`Z%HnhU>!FJEV+rUC&ffan+-%9g2W`n6iCCPa7 z`JU`h$m)C1bj-t24gwmcAVWsDZfLm*dR@9Cc=$?0BO?|`f%8W=GkMHrAr)#E%t*p) z7EO4LVIbW7E%S7fN!5_MlcqdE2(F(BVTs1ji1uPQ`Up6FZF!pS0XSNHl6z&*Cl?+g z3Tr$G%;w@m?hR|fpE^KJ|8W>VbCjvl9sMujMIy*g0gq&%ZG_fX1 z2LYzP&J9tbGC&^i2Fd=0%GvvZkTp{8Ig~IIM*3i=j-?hSZn>+*u_p2sC6-a$DO|~g z5+>?&j^cA-(wxC^jVojhsmL7%IZgBe<88WOwf_4|lK|AZNtj(g=@Jh?j_$S*8L{cs z{4&NyF-$3pHf{tVDuw)_HywmdM)X2!ui;d7DI86{a4C&gkf{F$X02T`Ic5A|v514r z6*)W*9)}dtcD{Lqd+^ZR3Fe$gW>m-MocBeB8B_I{D}X%dNe{LAIAgF~6#BF< z*w{Vz%3vra97uQ+VxFkMSaX+OKEx;dDLVeHhO&kFYd4-SJe7OQuZQ<=5BKE8`zYhR zxg)%kBW_DXJV*`q@yGk80t&Mcjj!&;7NR_;1o@q z9^hF0q{cFGDJ62L$l;xMnD}}mO?+r>Q>ea#F@zkMP9Q+!JsDSEksOf-C!z>ApjI#J z1~#%LHL5r@GTA1oX7EW8A{y#!N~0OwV|pjP(I%b3Eg^W9zqMO};<-y<&Hqq;Pk(=&7Yg1%aF_CtK2!5eJjE`Bg341*oGwJ^9 zxarv+Ld;21%x^>-Ofn8!@{EQj)(7`&*G76n8{oN04MYNLlHnMdctxFf9*=mPuz0SL zc)_9gfm=aB`U(7W3F49otj+OaDhV8O3I5I@Omwnmc;W@ps6f+zMA@N)b3=(5wh0&L zk}gIjYU(FlYEBg0i>g$s`+(B-_X&ySZeCgJkQ?WM{hP zsw&UjY`F}Fl32{(7A4P@MCtRfphC>`JLeN_)7j^miRb9TVT8m-9#?%OQ|=$6ga+vQ zs-%XcrCx!hReh-URpL!x|}vDSu(xw;B3Ao zeL*wO_9(rwSu77jAJd$U!0A*4WE4Tt*_<<)<}xI5Gg!fb6`L8oCEQ8P8TTzRhi!Q% zRG_JcYy=f(sv)_y$K%2+NTMxoA`#<{IB? zDa0~iQ{OmUKZ8m1>38LvSC%=$G&$c&a*lXXey817rz3rj1PvV6YrB%ZOOk%hUHLXZ zItmb11|QQqNp2HlOVD zT1TNY`%Edx@=~r6y#Y=oJCB3RNQRkA-nfu{@uD3WM$EoEe2Gpf*Jd_9aym;$)lOwF z-@NqVu_Ul|HP1Mu;Oua=&pkz6RfR@)q1N|2$(Ad8#KL0YHKix%*M&B6=QS$^pz zD%?^Yq_~F$tcspj;UNW2Ta@hS3&L7b^P4juCo3vVBKeV9`F?cy%s50Cmi8{@%rk>? zGN=+ck?ep&f%|9AWDr4ITP1p`CFH;o#e3%)UCE)uQWdshCcnUPZUaq`GP}~!K}n;K z(z3)z5V^&?qdxb9uDs|{866JMW?Qa!uXNC}SVanXk=-Z`RWSiAWjCwn=q1+>EBHc+ zx>S_b<|?k!R}KxAb){vFdzKCmD;@XpkzJKd_X~En&Pj__0h(1+={If#R@JEj1)JIO z^m@|t)s9fX3i)!x?&YSyN<>upBZbssPoUej`j%qRJ5^fohUh*}5o4&q zJXR2wDu?0_`mcc9uWe+8~hW7Hf&3edJ1l27ap#Tk%byx1!+K$xclTsi!+WR5& z92qVmkIP7*Ik%!3>JI9MFhD8Rk_IW4K~Jl0*SMlua@7uKlXHZD1y$@zanemJd4$iv(DEwiRBE=9u7;wLQ;(Wnc{WGQHZ$jyvs}%Nk#6B{Emrj`<&A0?J!mFA2(a01 zA-}AjJy%p`*y?q+uEwjdqO3KvraFT+hhiw5zipcGtF@1pd*E@7PGai_1L}P#$(6VL zxqLgJwCzn4S8|!n&zAPq6SbQ71(huNj;^VCvZ`^vX9p>_%Ks+$%Wy|kS;I|K!8hsl zYWvRnft_7b?O)Uszm9bFm!yASXquO%xZ>J14bDvl0=h(sH@La;MF*hXx%48J)}hN` zstr(8oGj~lAcUG~ZaJav4j@yO7${#f*d>lT z%UgR!r8~;(J1`Dhf9&&K+xOm>>T&vb*C3ipL8i#c&GE{hpbfddEGtqd8d_3m8^m`q+WM%z+^F0V7;T4=*Kn zhu!Pg$VYw9u)JmNB#Qb`S^c9d`j{h3#^~+cmUyGV#K2ZY_5KtGHY1thiPD}d#$u0c zM-8>%n>&LH-krtA1ErbWnG3^LN^3Ldl1M366(M#52y^N#P(f#w@Y@Zi;$;V^a(WJ%WPO{kwv)Jl8Nnzn>OOa86_95lm7=U!_99(>b_M0l$Zq>Rlt?W259W<>mmfdPJG+^|~ zh<}p%Nwd*gr1*UHhlNS&nAbu~!!?VqQRJ8UUZpN$NbQ(5vnOwER5X`)4SDk;vFcq` z{4<=$@!xH5cApsy{#RdA#)BM@-=$yjqh?vjROl-l?mZh}{95O2wV}`Kz2Aejqq8hE z)L$8m=bycJ`sHJvIr7)nkc!jhPo`rl-o!D@r#zV-&zLV|nqo#Z>uDFo{+vh1&z12_ zH+*^pGwN=AI}^e*tor6J{sn1^%&^YZ?I^i=j#bhw_`|bJ@eeUD8d4A*Bj`J5{7Ty{yb{db&WO-^+UQM?z z#fr3kHU4q#jwqv{fK|<<)f89yjFr{do3O~`_vZfqP3<~9IxKy>cI{Q*a`ttNH7d>2 zE%?8Irmy;?O()?%KHP`OX$YlF(y9u)y&f4V`Iu7WI=mjKSmX@A*9>~4z})rjTCjOk zoLZ!*5kc*IOVaAaM73wZn=Hs1b>m8Rw?Dm$1+7JXSPj;1>)za4I`{TIun__{OQ(Ed zHrO?_v-&KzX#R!$E7J!`ts^w2|Mr?}tI{H5=6GE5Yp|9x7Do3Jpk9Iga}l~ny$E4J z+}FRl`qDZkevJ==-;x7PUHnGE!zG@5TkheM1R#=FK!}Q$pnAiSa(ida?#bsAQ_nz% z>OGA!fFxxP_4V6Lq3_h$PU_|8+?_p+DToRMg7Ae%`%?LyKiHi?SMU6wuL0Sd0UQNc zVb~we&pFvHSD(v!Bd!kqQe5|69*Yj)4|kYEdaVI z0)n6qc;Z1;^#?guI5VpD5%Hk(i;$>`Ac!2mMP+A#j^JIs$`~eyGgOrXO(O62Upb(k z+#l}TAIYJzOOM9|e~(@KJ$dE#OP1e4&c{&l?d#)Hd0l3IpORto)ulg%|6+L1gIR*}Ol%DwI%Vxz3|{%JDQa%Dr%Tip zO_AT#cAu(n>%iOr!yPQ)B$%G{?CtPAOOPc=)c3WnGLA$RbU^ z6gVuooH!_m79JcM?c{HjmuXm9&WVi=_4j{%dfORsy&8KbngJoe?S8TI$#2M$U)S9` zAo$cfXegsH=;8+Z;+X$Q0`rudPscueU-ed4&vN6S594Z7jF zE2_U2_e?I*@mrplsIPn1nd(4&zK>iqYhg8F1tC|` zVF7$GBzZd4%Y5}#Kd@F;^mms-93J>2jX8oJ?9E`FR-Cnwjrdq=bB*QPdGqVfZYIsT zlRsL_dzSdzn{hZ>``~q!M$-%9)7G!g+1wk^NpW~E;i%;J@ZAHYYj@1>LguhiG}zMY z7rz7%ciy9DUAc?;6?Mp_STCm{}G?m;GLucSkGO8KX`Xgap~o1aTCHR$fPkdxqh%F7gpscAqUmoDk$Q;CGj{Xn zK=*LfEryCV_mf*vA68S`Q<3!ZW8Bv;CAYj0F5EnIPN~+O8!u%EJ}-n?>#w>6%NLAr zabrku`0j09@DuVW7#Q%(f9-=Sq^1tC<2d!wLlvH=-5t8l(1Xh)H;@u=`(lQEb*dYf z{51~5x1n1_j`HU0FMGTMG@9=II=B5vKD5qN+?^k0s_(IE z$AVh8Qzp;9iInx0kNSrB&z3vHV^6gwBsrs21FZI1g^z|8hSlaSk8byV%OL4>Z5I)~Jw<<|IUY3o=z&7z!V z0Uw^5%q*{e^a#@m4{bm4NOEl#Jb}snEuHGw=l;*qX~*xQ{k`ppVtDM|jO>06?|)7y zEh{;^@F5%s%P4SvSr_^F)=JosXz@xopC`dI0v+y-4i|Z@mqU;U-*+a;2)k1=ve`wt zPa$vIKg1|^<4j}Ke{wrTW8jhYJc!AS5AiCW39AVZ`pwnEyyW=)r%Li3ACv#h$TsI& zdu^m5l78uzSVXxOmaL_F|0PDs+|_|WZYwK`rTs`td&T>ojO<@xWGJWS2ALpMx{(`w zerqGgacC->&rS}1%c;^75As2Y{xanWe82kfKN;ELKZ93Uy(yX^cFfmKN&yxG>6@mm z2{$b45_#$SMim7vy;I%Gx!`WCKiG8(Ws9_l<9jenK9y}Cg2Ms`Ojju99A`WYo002L zC@YKE*DzKC8_j+$%X+WA*6VGarl_-0iXZ+xrAVc1Q8ThKa;0)6dOk0VNoCcnCNeT+ zt-xg&`DR2xm$w$@t#ax%+@qbZMBi|kZ-XK!-gj|whXd>NuDJ}dO|oZe69)l&qKiHw{@8 zoi9@N@39%TMX9{Ta%sOX%DBP2zmcEvPwBMsaI3uW^Wk>&fb7vu{Zr&2bw$4N=yThz z&qrU{uH2sem}ZYVFr|oBQBNsKUyk=CFQ57SecD>EeK+g}(^u2^M_+#bT8=pLXMZ*2 z&Yy#gqN+cKJB@-GKk)$*?MMHkbb6WbsnfRw{S&wz1%leeLW8V(*^4``s6&u&KVxCB zRDu?}3!XD``6NmB#XqG}Mk1X9jCtIx1C(Ju zu<(Zr0?Uk^Cd2Ko5{m3X9Q}Y+$6IflmHQ0q^XlHerBf`U2&+78C4q1y+!Bl6m3QwG z?1+~zyO%OXpAcHYaV0@PCYyuNh339`2kM44YkbEC10 zz3ll0*26EKi%q3k+CU&}*f>!Uh5V!Dt9rVgz^Ne3)E!kS|G{ATyL`2fQs3qiQ!`d| zkq?NAG!AA(2Cqv!?_}^z&8;VS3f~t9g}YMo_bQt&Ytw&}yT4eKikS(05qKtCMOwhB zSt|d*gU@J>v9fEwPqK3j^Tb*mHU!3+eD_+R>`jCP! zsm3R!0yo(6P!_A+nk@@&W0e^w0nw6zdjt^Nfc2Tbi0D^g_*v0b`B0a7RK_g$VDhH;}P1X`-21RgJEaXml%((5EYX3n#5de zibX{j_)TU+c<$=XuB`Z+yJCHuPNB5VDS-!Rz`{ju3d^EC`h`eaPBqSoX`m#g91 zE-o8HI>po3N0BcFcB;cwCZjK%`{f%SF7`kHX&M$4z#(m34J#S3=*6>>(N7!hmo+nZ zUH*)!w9pu2lA|Ou_NoZQ4~7enc6S^F3uoYSu(SzhX77BJD6fWxns?`9?>;z?&cq;2 z`>WD~$o*hZI0t#uJC=H6yTb5Gn?@my9Bt!(dZoYgL%=ya&e~E7PBTOin9nT{mPlHP zuTkni`qIO&T0%MkY^UOl?yv}I=gtm`Bg4_Nu4h+gluiyl=CQaid2Qq>BlMsZ^jen* zA3g>nQuigbYxXSsg~w=YPm?z*u7&uHPy;w2nx7rwlzW|phQbhe4Cb`a{348I)`&)U z(S0Q<=k<*pT!A#jAS98*sDo)4gPz^Q6Y%f3I+d9@Ty|cZ73q6&%ByvE%eAv$wvbht z&?>z4O4*cLEv-vgntCw=c~rY-rKg1yyB;brz(B-B_^dU4yU_OG%sS0xKwm-PyU_YK zpJ~NzZpg0h50_l4On2SBofsE7e_jAA7j`=^4f9@dVLDZD_2~JK>M;ke&HjyZ!C%#a zg5Hbg9E`j>{q0WG@w(x=gXxGrd*qzB?Z?cO2#ISazcQ}>-g$ieXidEH=M>9eXx#fx zh2Ex&-BcHxQTmo!|1Dy%K8m-GEkuO)R>)G=k%Gic9Lfg z&N$^_qWGjDC3vbRczp)Pw~yoH#=oJ(pK1zPOuy-&VDM8BhvFGnT)6Jr zI;9^WA&+l8{gM~(x-a0GNXU6>7d9m3xbZ2z@uFUz#$jW~<&98%LMZW9h#4ZxLLw}~ zIt-Q?X6+v4upeeQ8)nZP?!=8%-w1O}4Yw%{cc0bKLijOQgfKgY+Raj(Oh+UC@Ec9x zL9^k(O%YGsBk;u$A^V|Ne?nMs*iCLi=qw@pB$eRej=7_ErzIa|u?`4^;$P9?p1;yc z=f-hUhvAfoAAdy_NDzzkh#R+vWdx$!Ailf_FFT8`pA80Tu-f8hSIuuSX^QZ(M=|yT zPYZ~(dQlWaRHaSyfO6D`dvt~#eq1klayGhQANWS=*B^QpsR^@2KOWr2Hj74Qr$)ch zi+z_$+?XZ4^pD+2jUC>Prp9Eq2cvgqFDIr(-Hr%?5v~(&;TV4YlaVda{xyiTD8?|6 zZ>lxKG0w%oEaTuFXT$0NyYq3J0rA{v@j|dbW?U3J5+v8~jFue7Y?~k!kgy4j-;1!P zYqmliB*^h3(!a4$tM>~7A+RT=2v1J0crin(rceo_FR%l z^9{wwB=BWVfm?c40+MY!?93vQn)emVb+0?|Ja?3n@{Sglu+B$qJji2OHGRs50HCm>_O_iIciis zwH2QBJRnUw*-m}aZt+KoKU_AICp}k1SIR@uODVlLEghkgBB*Z{Q<7fIlkqtOgnt!Z z;So`rmeDd~Qy!45Z>8lua#td@W|e3&PMtLB0x;o=G5;E+20ScIHoegbTxfS zGLPqS{sd?}*-Saq_a>$#y|KzclxElmB&`%C(H)XXOP)v4c^w_(a0ZgO)1NSQkw7!a zvj=1}Dpy!FS41@)ES0=RN0yRGXV~(*{5)40l@}*TzO+uF;v&N&$$brJ5zomQhj~LK zd3{!7j9tDiePW--BjuL-yJ`7eN^v~?`R3_l6VH3k!!nH03)Vui7i@Dk!rZT+3SCqS zT|JFHsbp6vJGJd+Sj-n5M;6}kxN1{caDP68xdu^oE*m-&b$h<(ga;YWl4TtT+%PQ) zw|n}CNZUkVK%6Wi3O(XNJb~;-#YvvwEH!p*01W{sX0$2nx4bF20?Sq{&9^JPMOSoI zBrd$pIe5NQGcYQVM86OapS4!npqg21ceb&mtPQ2tY$uzHDmOhSE14;ymQFMG0gdVO z?)mb$b4bg2#5a$Eal48FnhI5s3PF#G#XwuO6;!2s1rSlbYFGJT)<*Sy##&3|P9P4v zh2m2sKe(Ly$*$^WU@(8lC7Q$B^Yayd?5@tHU!n$wPwc8K3UniZ%5TGta-P-9UZx0X z%}C$Cih`Wqht=HM25h1Z9Q74EM>Q4N^G0H;hT=Tw&H1J{-sS|u!qfAOk*!Ustp$(0 zG`|`+Gi5ZBjxNNE_;K;J6pkn*x4Nm%yA>_81T;3sDCWO^*ie6zr)5B{vu|zjA~&|` zX}7de9%q&qw!pSq`lS=NA2s!EHzqE$jUTnWQfax|&;s#q>z8h4*KOBuZ?A}ICzN?C zo@}?Yk6dr&ZCi^ft6pe+$Lq1O&|ZDy*CKq0EN9UpeW+nRp1mhYE!0zvUhBh@r*l>2I3OIN!%cN!pVRdZ!sygT(w-ZgJH zyTqd76;&v74rxL`lrPd%tM=XE>OEkU?md);VrCCRI0aTtIX&8SZ0J6JWP35Qk=vUj z@ObrHI=01T4hEdu9PBI` zj4d~3>uUZT)qB@yP-J9~<#;fiFT|=XFXGrHgKxNFe&{(v$Md$nGi`Y>GQ;JW<-B%@ z0*k%=4~L5#nyjfQ2%{0|%85n!2uswE!s2kZxAq;G{$ISKJ(;6tdPkCXMwmxN3wK64 zkGr)PyI(p~OpbQU9FI&H#pb{fjGRI8X#^4O2uH~a!L6uc}Ri&9j+k6wuv+=Tr z+cRz&$g%kZo}y(>YpCr<9{<|@cP-uH?!(5r58u<8kd;9b#w5U{=PF_ z`*`9p|Aa4-jk_atRrPrY)0;=9%L6_Q;IbxSnCzc1&6OO_*k732;v+Glrpuz|D){CI zJ9FEavjz`l3!lv24x+i7S?Hplu80|_GG4H4nfQ}IU5LwXGj?b` zUQm)+P!5}?Zo_%l&QS+0fYbBCjPoSMw^MItJR9D0e_H50otOUPZQ@C}PEY$=Y0pI= z(WUzaOS}1t)NQzt(4|(_B|FqmxczX1o6GK4etqO?u<`Wt?>V#b>8YT1ePfGX8D@X; z55Huxq170rGqGln9c3E7%JTW0jq$sWGRsf_WPxKTxt(4es9fvT!^o0RjM>= zl9IRzW(&qE-d_^sTlx6^F?QBpZSa4d4G+8TRZFU~ zm&6T)T!6%Dy4g6PK#1baA)6m8PZ+tFP+P+Tr@RZ=%igfP0plm!O>A$t+f9nJOHfH~A zZu|QKb&CuAYlnpVr2mUKe%ls%i{*w@7=YD23VB2+Ah*Ax^mmm3kYajhA^-@AyI({R z0+-B5)u8BDj1Sat=>Pat;ec&(2uIulzRtrI&%Ah^XFq^X4l?GN^r$RN;T3_=#4d+ygMJ%L#5)oR2tvbL9vMa?bD`Dy-4|>{!g)*@gYc#CId6`&I($5Z zZGX(MZT5fm(rtD8Q?;FuB0^q{CtkBV8YA(}Q2n-cf2zP($@b_&-P`#J6y**lZ=z7p zV$&A)$-Ri1SyTA^@iOJz@3U;o4Cxmm`q=2Sq9rwDU;fds4E@B#kJCf*%9J5-q;Grf z@NAaK45@?Mb4cs4HRFBh)xDxg>aT>{x^zyd6Lmlei8n zwyw$!Jf5jaIRfdBvBG0_2SV6otDKtznum`IvQ0I_rHjOl-$3YBCU>y{FM2C&3_BX@bd}P+ zplQ3dlNV9oSRqlP1;rD;eM5=bl+W=$iDwnYVbAY1D&=n(LK9aq&lD^ag2`F;48)9{p?#<`)-+F@PH(bJbEy}z z%kY|MvdfxQBLtw$QKxNx4Ndy9n`gi*Zl9m5m}Z}sp7jdlP?Fb5``%AHlYy~zyk4ZK1)9qk`ofJR^-x8qNq`hoDfvSIhDJNGz@sI3fBR1};eEo-ZzlK%F6tm!cg{bqp0m3|zxjNJ&yw0NJ9s{)&2UBYpTY zLOw>;D0*=xnCu1_CUpY-rhb)xnfR2=`4mCu7Y1Xix5nk-OJ#bc3ril%g|m|<;kM23 zqt|zRGn|n{Gwzv41>Jnp`r4FWzn`BbhH7FJM10n8cAiX^+hY|a+)_1Qnv@`dusoek z9mt@WOrlgS(ClkctAjCQNe9Atp<`&|$VcPLuAMY=H7KwZo}={vE&4HL7kbN*i@j8c zO9RvTbeoSM*0d{CwG$Ket%Hyh(_Z;fQJXwbKVQxrE)N#hL2T!L6AKK~RE7iSc7a%u z5i)q*CunpRwFMHzds?Bl2{{vjY|^v?nl>fGl90Fn4%QOUl8ZKwg+FzWbS8>%yz$s~HJ_dzfqRvxOlhivqg7r|!@klWo@7 zCh@gWC$W#l`_AvHT8I1Tr(}bsZsqYlf8oTlVpv|>?y45LM_RuwA+}w7U%1!3tL6Q4 zVShWncyLa|t4eJ&vuB3w4qomWF7a!WiX3f=RMp^}Zfv&e7cOsQdB!V=H8PyJnt-(O zP$5T4oSiNLM?^6+q{DPX_NvfY0YJ-2rPqDiMg0rD7l+(5U+7z-Gj^=s@Yvylv%i1L!K4-YeD89rK*KLVSBG zDRszB_+8rg4_l#z)M0D05%t$kfxoFPt5z=&)Z*GNyA{c3XN4-P1fH#Bdaof>m;1RU zs?B%=9K*RqJ7uMj3z>Zw_}meX!6xLJquVYF-mx?HnQ?+li;eGdCxc8x<8KU~Jk6E+ za2aKmWB+P&VWzIPb+CnV;u9=3^T}(=&a@6I zBNP}IAS+nj#xl=OP+H^}tJosm9ne7T_shEm;>%4m)+%9rmRuL8-u#QgT*u3P&64><@J=z__%{E{$^5m7&MFNh* zoRWyoM0~4-_JI2?^2jtujhsDb-zp7tYxmh;I|RPe_Ck<(-S3m z)dwcGwZRwtJ;*{(3Zx9t-4#L+N4$nC0Oou&&^xz<6wN24)b#^1C3EE zn|)R>yw&~i>q}vhAV)B1s!Vz*7KwJ+9UGK2A>&)NnViknet7tY2*49;nd&)aN*|Dl z87#h0B`n<%Jx%6*`XA!GU9|B?ymvQZVcU(wHY7SMuTA_cz2aE21>Zwh{TN}JvUs`| zt1<>pJ-*4jWU920F=cIxOMq7iTFTgxV!uku_AMSu{X=VQ8A{TD7*pjhd8FXa_T~#S z;ro>T*LYAErzrjHaG$kXwt^6cyuj_%yj6DJ%-%~CzchOrJ9J@)eBoz7?UG`uDF>PF zSt#H^Y1NEsTv_9C$=mWDkK@4#E7Q*=Zhdie~5d9^EJ{J04y5ycVlsE}5 zI)KnoyB)-)&f5-t91nIr67SP4k{6DANSpll({6jC`iLfif0B{R$(+@F$3fq^1~i#- z+gi&W-b*cQnc9CKUe_vCRFesY$^sPXvx;#6s_T0`QPk-_7XyIW$`eB$RxU zD?dixr41Z=m8cUo{z$xA|7goScvBxVR6P7W?ELM2cQFY4b8;hn8A%I0HIJkI^Sy6E zmPm}9q|2mnH4_cLBP4hg9ZeEqN=23%%EZZt?+%;2a%2UX@pcj@%q<^|D0L9k4>B|u z8v|bKLWL;u?P>nVF*1BDv#xYyeY1fc{Dr9 zz2Xb;Zv`!b6_tg*hBclLzEuV)0#0%KLifUGp!tfo+W4jWYd60 zb5l;gK;k;dw6>y7^kxb7!h)fC=%YXHnus5Cdi2bTZ;`S^V ziC4hePe!)+oB(a;RRodhhIEwr0X`^&ktv!9nw@m zhSxYPu9)bO@xx*y!FbkDldHV*2qsIk+^%?Qr_Z9GU$ z);phz*I&A@k@gbGWw8#$lEL67{R81rKWAk7p-eSm5v7L&TqUlOEKzYeK%rgPe~34$KBsDB zFs+HVkQfq;z~q~GE_fNuxuq`4Bu7Q7+F zw}o|*d_6&9KLMZ_G?FiDGlX$Go;MgGX~w)E7&$C~U^Esgee9J!)vg8-n%LOFAnzr9W03*2?>UX&jR8n1fai?z70ES61NbBNsQpK(}1{4=1}@Iu#a zKaD2q|Mtr`sOin|`l*Er&d30)z7bA=g=s4(XRm-);NE>~`q1Awb= z8D;CXMJeXD4F-L`e164keUka`fLR&vd)s_%9iJ&f&6OOdqv^}i5$+CYw)%qF8cu`P zqvBSMdIs|AuM}4s&OBED6utIK^ja6YX4R)|q!@Q&3T_55?KW>=!wNciBPjPJ@c{K2 z*!ZRwRvRd)y?jARA`$Vd~)iPYl@Rc|-+9hLyRdVhJk!FQq zulhEB`k$dUnl)*&L;q%la*e6U*ip9=sBjI7t8wX*`mq^&*zf^Y#w`$gNw1Z5j!{uL zD^V*7Ah(h-=ofR*K3A;~I& zx-zD&)b25i`0IaKq3{oMAFWVGg8IsEjYF%1SInucf;#1#@fPoVCWZO_Un>;#9OL*C zmz!Bjo8-+gFtkH&LY;(3+^s=k8@t%d zPU1y78N!#Y4Hxf^;qUG?7zmsClr+yir{8U|qqLd^UW}Y2wfJr#w@fPa=+1$&CL|F6 zN_1dJGfQsE69Dmk{y{TZ%rt^pnxvw zDe#+xwXJ`UeDtPA;^8zd_Q$5>17>OqcS|1kANjtK57`)gC!jTY)MifaCjj>w-nCl| zO}p!VX_m>aNXsG6XTI&LqRzDP;yfNX!9N)>#Pb!r3B5OAUtu_I!@j81&8Fu(tld4n z8k%^E^U^+N|FS}j-XFhi;~0BcsTpTEXV$7h?$p!67Mm+O^Hs7UQH5k1XCf7 zQ|-H^n1J!I1YW7Til+#C{O>i(U<#-%9Q!e%_t64EdlQIR6{xEX*>r=_*sxH#vwU0y zaeFhwxIXTF83qbz2l>HHK}_f2064^#8$?FwMUvVnvi#y-n&pU)d{#g7NmI}X5VVT9 zw1o-c#nLr`yp9vVV4~|J*WkE;qyWH~W8idcylwza4g~iRR6dG-r^mts>L}Asu?0MF z1_3x(ytIR7;PO=*icr9hRZyb^4ox>_e?7S{2{CygrU_iE3UwV3M}asugs=7TkhWuj z;E1#o1Z6w*43ds$Ey(!|!8Qapi-BMciML$)X=hcV>IB?ViMt(wS6hVlOB;V~4BX*G z6~_zC8p9o21wZQu>w)NB+EFgM2C?RHRlXBfxrrL1h@L2N&rb>^jkkFf26(k?O&o}A zZUjxRz^~HA?;FE)@h12Nz@KqdS!Ym9tHu2W!QEycn6|+C3D8_;2uE!M@4WRBP{hDl!s9MN4&x(Jh_@XQJrPJ0=#P-X=d#I20`&H3^NC3VI1#U|YPB|<#CkJm$ z5Vy(#rv!#mQi;2kkJp%kQw7JVa!t(*z>PV$IhEKf6gYj_IB({_5dfUblfdn@6P+GZAtiVL(Kwz>QP*EE=^%^qi{SWb0GJ5w-@x!s912p#? zJ=C{{FMvsufzX|0u$mJLO|OH#_tv3&j{0Ug*amz;U)w`&5CCI1;5||Ttr_BdlI^W+*s0@#S%Ph>oe0>^27JnC&dX9mX7zAn zQ>5imIfPswAWIVxa=l;h82K?n0gN^fKnTEjjL&`*%kktZPsvx%$=8-T<8;qF(X_k* zPY5qgo-+j74T&ZF$(S%ute7>m%l1p+4W^NOD!yf^Hq|#>94|t~OiVtHC$jG;+@vwb zu}r97W>28+5`c7`kX4a)rrPh4>^>~l7fcy_u=jcG=o61qmHXbO(0kuqC_Jcjw$R7{ zvc(ED+yC~Aq@Yz!EZhh(9Ud5kS|}o&gTzo3e-)){W1&r;8Ql2R>nl08F})q?$vk7Kx<{gqPAw} zP`^#>wK%bkITwy9LC247(Vt|b*qxEJX`JK zLka66Tnm%|V!#MM!xQ1fmdydH0`Lj-A=az4e@I=hPe}*Is{t*w>d)#iWlHuZv3L`U zynFM(jF=+4WXy38JqBP55-axvFG4%R@jFSjVPn|G#)!Z6G&1$rr;m0XT$NvCSt3=z z2STnJ0%U0ZNu43FeAs%ck6mcZU^Sw`N$SU*!_PQ~>fh?@-umaa&5p?Ln2Zf|c9{L2 zAYV>!ShXP{7IdOjEnV7Z#JM>93|O*p;D8f6Z2o2@o#y)SiZLvbuQ@otKYYyS;AN`H zFTaG83lbr2ua{AtkeA*@f^dKw3`0&Ef;$B{_ywhd1DZ~96)a%qkq}uVhL&sF-dkY6 zD$XwpJ)Bca%fTPyxfbTDKfyBo%e~P19&c1n8D=gQPs>k}gjWt@0i>4j67f9#=I>y) zCU8|AQM+(bBNq3?H_wx=mT-X67!NIRp1mvZl#QS$?hOd`ky#x{3B~qRtn>{5*pYV0 z{;QFw=-UP2>xvUE#&*NWvw|3wbXH6YB}XDD7(bv>@ z$P3+@fi^Jgds~Q>_J>u>9?5fyjXH5vq{!74Z^rtNL=g|!0FFF@y^vA2) zunB*_w#31M*8I%tG&?tN=e45Oalni)omX%WN{F5f1H|mUt?8AFe+dyde^Z#`kn!42 z1s<&y5v~2BgtXp z*0A~Gr^fPU?uHKUMtW^WR`5n2Wl+bZqc6#!)tud$okFg`gLLB=VAj#u#lc=x$9GiY zgu_iqUJwu8*S)0$k-q)sV*QzStN=hf#OeeUUCU(+>pP=w3 znEfV&Gbg|QKtiD1SogIilRp`ujs(M_*3X7J2W&FQhF|tf{ka=myPG0B8r8!e(;Xf) zpq+YI^Dk!6?F4+Wo z!7TBIfu5$>V7$2_j=6xPfxu|1@ZmSX(Q}bybD>9bcu7_W+6r%t`OiypNyBrone%a` zp&`+s*+0b|dS(e1=kom)5YY=Mrtwd=XG{LhxJC;B6FQm0e2B)8c*V2$G;?2`yR{5M z8q0otyPs{-SnQ;o?~Y#V!REnt=sFuSsNmn8xjv2lFpva&)1xA z>j#QSRywsp-mtTeY@OKloIY{|E7 z+emFnEzh)sZ?ZE>yBtWoblsuAgQ`NdY|S?G>5!%b+jd!7fg_KHQ`Ip$NR{oW#z0?` zdpVSp)tVjD`ya4s&{YHh${r@uouR6qDyyCMyUY%I9wPSl_ew_g-Lp22%Ag}D1^8>F zjb=wP{zp_LkbDcA-nj#;`vX$wfvv-6ui5do|M5lGeu0HnDRMY7^)8 z302!E4WT!6DF}I_@(Ysj0;0`U%OVZkj5*dsU1&?YfUAzb`@`t zPjs{`OmSWD^Y#nhQ2ByHftfJY1NgBCl`ISN^o|JZ!rB0r1(XlmGAWAU>^B2!+nN{HK472X!_S zV`!l`he5DSWnjK~ygdBPW_3J*EH{KwZ(BW0$Z5GNRc}W#)!p|2xZe{^161|?bjYN= zr(2+rDHTd(u&-ZYP-fPhW^iCwZu-+7liIL!Dvnv@i#)H2En_@lvDtQMIR-CWoss~sNCAF$|5Zd}*9qv@5F`3l%miY=uBoQ-ci_LbgY z)28+8j&Cmg48W#0yYoK7OcpT*e!RSGntmJ)@=W~pMFt_nbE#jU{2%V`QP{kXs!1R| ztDdshR&9JnaC!R;T}WL0fxpiNen(2q0S>;%W~CgVG>}gos>EC+Ppl=+r$G9`x=MlE zJcLh?(vI1!R!3g9vJA^Bs#1x*EM1!*H)0{C@GM52Uxg*v+Fdkp#EO6g%PZta=~=}O zu0F;ihiWyRHlTp|X_ma&z(r9hk($sfo^C^X?YV}!*iL?prUa?@sQTqx!dngL3deUM z9iJ8vFgZd6L6nXHxlOH3m!brR%;y62kWndAm!RzJ!~S5au(P`?_)giqR$os`LCC=1 zKA0p>FMmjIM*Y{~XYI`6E}<8uUbMsoHB+y&4K3&K+(qI)_qj~>YwOm(w95{i5m1H> zK?ASCx@VMLEx`bq$L3MWs%^+SgrAXsJM-S;H^|!_bc>k#U2ip* z2cR&=6@lu-SF!I2!(1l+Jepz~^1eEi;-w708?7RF{Ob)=pxdHrR@fWvobiP?Ue*a( zieffjUf4F-6b?}Bl?G1Q$j8RGlyhl|HY;3NMnMx&rn19Xo8O=pF3r74ceACcaB3-2 zdyzN+$wQfZujpBjtbs(h=ck!+^t@6|V>RaCYT|l2BGJpx9}!p`CgEJ%pqR{@?q$D0 zC^4}8tH5ie5qH%mm{kS0olr^At()BLhvH|&rg6dMh4W&U4ASygknSe&RpD{waLEUaCRCl_S#Ce z^M4cleY)6I9Fmgd9n$cn)A-5OcI(IA36kU$v#%RkO*4NxNcmmPDqVg^G0ZF8K8wuO zW{;2S-TQcdy|dDo;vcH=jjTPwvwQQ^xdg@4qww_Tax{=Igh8Q?xdy;*1;>KbuhErouN2kHSQzS$>BK85ne^I|(D{W( z+7MBB#`pVD^(~e}UmE2H8IC;ms%GBJ1q0|GAjUgt>7yx)3f%8cd5`5(zL{Z=?>dfs z>hwvwdM_(0Tpu5RQd7h1HR9OSK8<>DkwfLOr6_g9_tq@(C5_Hm8hd$xs#;54X=QR) z(Vy}7*hSJ*`On-Hbv>`5cq!2F-gA(%@*ComMh?o0sp=+8Bo@lsJpB>`j~faNN_31= z=Hy6d>dN)Wx+5k#^-9Punn-Q~+VX~q4aI+faCt_8nd~25aqC2SJCm<98N@UkMmT&c zQM#rY07mIKu}Q75#cvuvL^a(Pc*CbVas=K?G~4Ief! zM_7}C=HvmX^BP`O;CGn|^XTzLnqk5oUOVzCe5%0!gVIWho;gNzxUMz~6Kn>GBiAZl z)&86`^#(nG2Hh+O6g9HRQcc7DN3?_sIYpAIH1$=*vsv#=-P3RTIL7=&MAGR??gb0{ zSyUY_i9ZTY7ytZ}%F#@g@Uz&;g&&%w9=l&o@zgU{67#K*+Lrtj!zz^B4U_H-e`^_& zr)oIt54tZp$b?~|YSGOP4pQmdoVj^ar6@}l ziTTmEI+j!uPO9fA-B?o7HQAmMGpu68$uZWBsl!{gl#PmG^)q!e{ge6HkxJe($Ho=i zPR=au8WUeRG-|f?L!Nr%;t7p3_9{5Le`zs+=U#Xm%qN%_f)=r>+M8#)k01X;mER^p zQdTfsyt^fq_0HbQ*qt4D6d&-dp=;tZE`i@|NtoZx%(nI`6lYC*U%qU{PW!%;=Zq=2 z8ltWpS0q#6@|T+4btC~vI8(+_zL7D+OVx~;{VLk62)5ABEabK z$>4_-Sp&sWh5}cQKl1BDZ9=&KO*$LT9~-Pm1l~JePD$+5X*oyYdX*HICIq)s24jH5!{H_kf@?%(MwZY<*pW^^kbM(u>Wr)fj989cbqA7~3L z)w}k)P1tw^EN-t;y-RA+a8LcKF#sj+9|#@M)>HeqDRA60%I1`uE3y;`sHkj6$YSx< zy{#AN^=TU8a*xvTW1Yj4pspP>ZN8a5v{U-H&|u}}`SB-PI;Qxu8mViyD${o7fREF8 z^KQ-8v?gC4gQv71*C}@m+x|+v$?hYYVgy+y>>M|1#L^#5`qS5J{3TV;slDpFmd~@b zT9!mIKlD+%{O0iT*-w7M@Zx#ZT7H`fwbVB(Hs;)`h6camFB+f!UZIw++pzslv@W*K zsdV=%%{_}gsC?KC;HVdGlQ$)bi&Y zav-v#__lStrOo$=bo|^;8UZA}Z_$MP^Up;MC&tKckrD)g?c+La0``(u#M0AGCB}l= zDH3H)KMDCz3+KOW*V2=66K|*6q#?ZHz!8uN9BjvnEX2xaXV&jv;rtdiSWOy5fHu{F z<%@huL)a48#59Eey1&iXvV#ZM$%}{kS{xS;B!x32y9obITM9uQ(07qn@1&pH<$SN{kWnXKyKCjl?_3a zn~WY8lSC5V=T>(JH{vdHc_r{GQR>Co#*@xr2}RdLB{XO+HA%Z&EljH)rjy?5FHcfL zt>kn8mVqjyDfb4Kf+#u_vxt>N<{P{(dL!_neGcWd@>@~f9Ne#_`l2`cqDd%%WE7Yj zmGR#)hY0qEBRe)e_DH&Sr;7F`KPn}kb`B0IL^|@Ur;#J3RA_=Y`Y0((7R6}fTYVQP z7itjN^FK57RUdMc0U`7prJY|n+rQ-x3^<78M74&6Bwr8o#as+j00)=K|ECRzXykHb`+Nmv`$66Q!Q22@2?q(j@2DZj~MLI zAL<@TZgvE74D@`t6KuU094L({keBZVb_IE;q+FpD<%fF!efPTE z#lcF)-sz(u{ef}3nnS9?oa(r110O7hmM?}^Xj)OdP2F)GKjP)76%&U?L%J>_W%qDf z4qssi?{*lfX>Nsp!6fSOT^g#Avi;vjbmhU@$Prtb;ojh$KGori3t9$!h;6=5*y4!Q zCjNl_=&f(!cViE(CRKN%%yL zny@1Ep4*ItO7Lv!6RIvLsL?3sC@4ue=}zE@2-KCCSsUn@Ou{{M#o)<;qUz}kQ|6e4 zu_PmMp{+xYK)g=;N&Lhsr>>`dpP%99rAZoU%L7El2yB0WpIOX2{}u$J8oeeNFxl!* zbE;Pl)xYYRSmD?F%JAYdq|+;O)|-XW94zVjv)A5}nEkoNJA;9*Pew^Fbtd2G`*Z2s zd5pPs&;GR53BptDTxQRBkes3b}s_1ZxHSbata9pS_x9~V)Vf;8}@B{C3F{vb4; z;P--G9`{%696YmwTz)>~%RHrtB#s=sA>teVS2|mw`C~kTm@-*&%27{U!sjV;dF~SO zdfGYPBs18#FoNjU`UfMwX!(7aLmbVfdoNtC3CCMJD_QFKV`5aQp*SD$YELh?*1)(f zG+0nMxP!u|`ci4~6Mgy{!iO`tM58o@Etw|I@pR;`AD7U!;aBmZp?&dO?WV*9v<8e8 zKro(qx(?>&UAAt&IE(JZp=qh*JT)U3c;#N9b>$+6aj~rqp|l$6b=x&Sm&RdmHw48v8Rtp($?5I%|D<^)PqZ0-?6J=d1P(L?Y4#;vPQCB|Isu- zgnjbpa*aM~$#2WTI>eH-`{m0$O9n%$-J@lyENK$DoTP3d=9^BI`t=njD>i2-5@#i? zXb6|``ZKcE^DN7ZS-rQ>Oel)Xsg^Nx;8>7IOpxH4jpm#2y1EUCo(;*Fjpy4NQdh5~ zxnB!7&t)*=LtFEOw!seu1qvg^GD%9(d@0Yzf}f8W4^FSMnGw&+!G+i{_DB#%)h0@G z)aJA)ZN_?HV)S4OW(Rq4O5P4TA8@5zeigF>$tSenCjN5-Dt(FBXHSdXk~9XPk+g ziC^9EZ$)^dhFE#qpk(QuOc^mgeBEr}swdU8i62{x#oGIOwu%Ug{Z6!_zoBcBIse6W zZ;U#rgB`EtqBD&97xsssc=pdMacp@vB#C1|e3e0p1$&aUxSv}QFJ!v=2)lHoZAt{Tb?h*FZw@I7 z9Er|Dlum#(vhX2A@X!^;NV#KtV{o%*umB8WQV~AEeKcu%G-c>Cqv$j(d^E3!F>B_u zQ17%5b2QuIgqjaKTDUq|-aeWka9*c7UTSsP&~)CMaaxsf-Z69Dbv|BvaM~w3-mQ1u z$~s=RJ)TGc&tthvJsh8~{yr1_EdW8B(7F631J5W1FJvLElUx!-T`uVm=d9qXRxm>j z5V-mqRR9Di!6{R+NkC{oWwaFD6HIyp20a-DIRZEfh@S%hi(J!+PVi>o_;V-t4JU+b z2t4f5c!(SR&IwV&34zin@%0JOi&H|8Q?l?=a<5b3@Kch8Q>x@s3UfEA>{A-lDQ&MC zqunVTwmV(hDU+5vy^=ev`DrTTG($NM+!l$ie8R5e#!i2V+koI~LlBLg;TN3%mEaIj zSJbn%6I?IX)IKyI42`4@O_Ux%1_6^n5a{fH13myc4F3H0c?vJ!J@`Ue2?3+`NE7u) z<@G>6IhWS*fZ2IS@mwf}Bc8i>e6I9R>Ge>}zEGn_s8@Jsu6SsXgSCHqXrMfFv^;fx zzcb+ReBt70C~~QzbonCL(~PxYClwG34>shrE}KMPRsI z*+~O3D$#(Ik2@1I+CH!m2mpM%^JbuSQTk_p;l}0#d^Gn!zyNK4r`@%u*Y*4GYp>*M z@51X34PNg>u6?tkfec`eHn4v-7#<4_3Nx4ekJn29AN?zZ>!O1Q@e$uz847dKtwxAWG*iNX>B2L5CrZj{P8Qb zdHqdo{6GQ&&@+H(8{a$9BLKVJKsaXW=@nYsU4P+Szg_Zx5_l*Z+)s}9?Bz2s>J@

Gl-GTY`TgwZ?PU18ZhEd&u@xVZ2uH( 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

HN9jnv->+ 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%0AfP!AczP5 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

4Ti!ykzZW z^g^T>O#&t5_rSgW$CR%?f3xO2GRa(M}gFObJKZxJIAG?Zry zQ2OsBPpRDmQ8V$-05VKDYxf!Q+K$(Pnfj_YVi=1|RjK>=7bX5SlhV$lw-;XVfl3^I zo1y}g_IFL~`jb-bcZrTuOTwx7-7~U(rTZ+vks)%s)m=K{5LZXa=2FF5ORH1sW-g?Qu*SBnM zuq;QT0;_Usm)JTAEMMVdlO8@t!dZT~u0!A`@DSZK5ik^g8(KKQ$p!Cfv*iXQqoIa& z5D*0%9*4tg)%ZbWd9Z6lL~+<~5EW%Pq-e+)D!FS&h^`GsGq}R1LgXYMeYk7V)(jZ2 zW|X8n=P{h&s~S2qngPjI45J*w4T*MKysPVp#ijZ#Yd1gHn5uOe&Qgk%uCl5Vv1@bt zGjqqf*-WcZ!&m0RQhVU#-cPcN4|bhcVtO`DS+VuLV5QXYOQU>a+;9N*3Cf{(jzaM) zk!parpJYOdaoA@VY|>oZQ`t5OJ>N%;N8!yL zp53zN(WpsfN>Tykq4v}zZz}hwsADhaEs?6Qd$2Zjk~X!4O+k3uLK za5DptKlMT&Q#CS$#uTLrhT@*l`QA69(GSlAYjhiaYR`nL^siZ_hLiJrbe9J{v)c6% zkdlM}pUWBvsJ~A2_)Npq{Fx!Hu3zVeedAcr!>ZIWEIZcC{I>EUq-@WwPo8_(kP4BI=SX6dfi@UJZb}qjW31`If zG-5HQ$jnTjp~v<;$slxrpvwANClBj0`+7Jk;BZ`md*hlbUC-wKmQ(4__O%?izZgBReyBc_nv>^cX^tAc<`{nlKTB- ztPcHXI-}-oepHJ;V5p`jp&v^*>|g`5>hnv~xr z+>n}F^wr_t?%u-hQb9Y#dEUZ7dnF$d+QnY#&~Npm^W8Sh+6RlD0)P9_#-jMcZWe7Lu;XrQ($2-WWD@H^ z3H+T0>|(YMz(`JF9+!b5l7|4$f31HuP>Ee1ZH0Gg`?j) zlkZmqWKPT;8XdtGPol5cvE{AYFEZuV>XR1{H6z+5RU}C=JF5Y@(q0T13p}QBIE$AQ zwWoRP(0pTz3B0sd<&KdYal8b0o-QA~LsMk$->xx}r$Wd)$+^!WcI==fq*D%$mZ$4= ze2o&`AO-GorC96ah4>KxKeEsimeo5nJM0(y)pj!T@I!lbSN3@O-?KmEolveiD5v`Lel8&%F{#RO zQ%PrmM^1*^Z66v)A4=L7Q2C%)9W0}sAHLaeyWb~)kA%2SJ^M3_VzsFxsDFVlDGHy<7^k0Xt zk!i61(^`!BlEk**`h;C=TP9Um1E)xsWIycbq&kQ8i4auIwm%TA|DOLM5CG))|46$# zvCzX1XdFAyscYh&s(Z-YPkCxH^snVvdc|%M0GXJQBPqPc5$sqTlcsF<-3WCUpL&6M zGF}z*5zZkLXHSJwBLNkMQalnxvjhzE$ToM~l5;}eCWJR9BBgtAs`~}7`kN0Rg9seI zC5R)Jm`ZkFEhfM%kp-TpA?JS-d&{cOJb4wwEgK4RQ+HI!03`895=D5c+cW0)CW>c? zkv*slXW6ssO0|9z%X;~p4h%zw!;=#oDhF>bVG`NTe3KI6xVR|s18@GqxsT@ZX(&T* ziGSe~zU9R#DA>@wNTbx~sTjsLc3{DpqnR0S)k28`meRw47mpcxldvAl>? zQoxdqETw1!2O=ciO16l;cNH$&HW{xQ$On9DHxZslNu+oYL%&e-H7#tSMCj!^Jx3km zjBhvL$yNLYPb(&Kw@%6w!4>zyb*2iKq{_ByA#784N;2VfO5%SwX1!2m9}bi<)Xqai zQ!GYZ-Ji=Bg_Gd)i^A?ZaNI-$Q@P+m#9nkkNs(c2?+J2Vm%hBf(f79JL$l6w+-XR$ z+ahpyI00bxo+`RRYY2e*sgDhQ;JmDY&V*R|71Ixi;)LM<3Qt6SC3HeVgn|kT3RGpW zFAr1w=$qEjde%@AU!_bdo{uG@s?#575#Xup%m0gZ2`$XXOi%IHzzV;XE*Ng$MQU_9#m7_uZ6{eh7! z%cy4Htm9(zLomJ3LM>GRVi1KY-~r|(22v6YGVYVSJ&G1VpeS_mQ!s!D@)(TRCo0Q5 zm1Rt#OrY#7&p5OTbMo>i2Uj~(g;=%wIef;IF+zy*g1;H$JVKO z1X7b|F>AM-~ zL1`Bum`YRv-;8onPNU})Mg!~GBSIWlzl1fkk3$qsO4jN3{KjjD^$KaZ%vJxk_Uvy1CeQRi&Yp_zB zA*41LC2B*7KLnDGSM$}O-LxIPehO_!$DH9BeyZCzU%Lf}HkR#M4P;3blysXt`ss%e zxNu?t!kU0?8N8S4*NpZ{CW+pV;=No-T(FM2j~ie+Fpl!k1#QR>a4n2=2Zi+imJZI& z&Ed<3hHP)w?%i&k3O70OQUU?MNkGo#^g|rr=m1?ywxab4(?m;QgJfB>z{OQuJ z3FOlvx5-a$H7sRBpePIeU*d-^tQ^bEKjsDvF1l0N5pdJzhC>+7=&3fuYr>}uR+`r- zYFv_wzXh0=l`pkc{`}6r3*AxcOq}5CJt<^w-!uPmHS_8EwB~jD{(lp~`^<%ZmcOvE zC266#ifaV>JeAi&ekx*WDri>}2$$opJ5I{({oA`wxSAuVZX&ytG*RbWe&}Gr57n+# z2U_b(UqeN$*2I_dPecFxeBJqX`ySzH;qLii2#*>S5l#s)N3cA7Nv6UU&TX^9OZAzS zh3hlCtBV|L4~j2?2ibvGG$?IEAq*LzOwFMzbD?Y(p$LXB4%sj+i!h$RFusg1f#xuw zxiI02Fwu-qcoK9u9crr)zW6wp#L$LhfJ$+Ia?c!Y?!fC<6a4Eb7M+3BX~yc!VGS;@ z7={R=n}L6e2(!Qli;M`X<_K$si2U>5O4o?^6Fi~gO_S1nnfG>41KZ^pW&M=i8@=zDx8UtgS zGh$n1b#=#ms!n2)a4gI8qLLYr4=*Bfp@DClOer7fI&G=y06g+%;1wD!ngDY?(@+h# z5!*z>@_~ z@Z@#iM^D%q<{koaBMz7zf+(Ef`Q}(G!*gfRmx<-EG?qzp{I8-uTlJrLUup&v@rIpC zzdj9&_Qt)YT7zctg-|7_65O;t(NL1^g2iDta_u0NBd`-eCW-o)j}D$#?+}d7xLHQ9 z>b#k^Mo^wPoFUMM?ef|7MJk5zjgj1&HE7Vo(xg{Jj2`E)*7I+y-)T}lvge6rGr@$C zh#6`=^Rq+*Q%uCdj*_X49!SC{zcg!BVKpPu(}P;lU(BZmU#5pJW`xOQU@bEupJm`O zGs5O|z!P_p;82n-2#hwAbWNp8CQT@brAvz5K@`kGPos(elZK{2C=H$?$Qbh-=%sY) z)!$TKX4Noen>_Pz7zeY2k`zXh$dzR;a)N_GvU@gp$&hK#f}6)98D1NM6vGX*sAu?^ zfmPn3Ct$T0I~B2Xsw5y}jhube&don*l`(gn!2ev|UCmJx%nt?|!+juPo_tQ(_v}F0 zfK>1VI0Oe`RpFhPryRDU*cxY@UbUPaccxBKnU8>>Cbd(>->Mnjf{K!X4IhBJUI>Pg zNQMxRBFVs^1>|cwYW&#H2Oy~{3CkZR>tBVzYBL3i3gAg(>u=!4UF76CRBFBu3PTvl5h*z7asRl1 zo@gplU?@F9_zfZKWL4@CRO(g{s=W&*dln>{`4B4ikc!AAJfetQ#TIN&0W-XHZF!5Q z5v~{m7!R?rE1-+i;fx9@XGex;63nP8z&IlZxb12p%#ifiVLlX2rig&p`@+XdUa=IA zs)oF|twPLW2Zbg*Cg~#9sfo|Y@cGX8zD^+5LzNVYcnf=E9TXDBYF~W+34D4S=4A%I zVYWHVDr-Z?^LAxK97}F zAuV2YB?*O6{GhycE#9EA4haQZZ$qPN1h1b~U!RizWMOe3u=p$5sh~PZBPzfEmCj+g zrVWu(RkpcTva>9ZL7Ucrr>O-@yzs6xd+ZPTm4EJKzCT zDKt`OFk#LX6oXZD)yO!)6YR?xuPFHjp=cdc!s?xkuXl0|>53iT^Hz1^R8{;6RWtHU zh5}T@b#z^>iO0YnZuc_@++1OG~hz3b>umm&C9kZlO7WIl=rPDY5-~6sKss zJeM*Zm4O+&=ZR^~b5m>e0?5rn{z*NwAKudd4yegyy}`4s;2TVz>V8m4M2FgjHtXg$ zLynr;7Cv<_Me&S+RQ`NdNuOps$^Mn8VfVuOSxf5dVReIP!lElL0r`(5r&5Denn0N^M zt1B3-`r(J>VQ)uDP^tp|E4vG@1@yH6?A60oc<1vjhPPcS7M;O`4Nx(dh)Xz!V)yv~ z74eJi;90nvlO~Mlo}4@Q=bvXWay^p!>9-7fWZ(A4xAiD4_9*}D33G>k;^4Vp&gruZ zKeeD%ZRpkL>(!d>#r(aIU?{f)LGD2CgGA5403W4KslWdO9scQaQ0%9(>hhd(Z-ZET*q;-I- zHML;j)g!9y=#Q|_0rG;Ngtpi)tlghQvIHaC!nW)n{j5lW*;z zB4t2G->uA26zi0#(v-T*6sv5_^Y1M5@zI>`7#68JviB$2HT&pKTcJmwG9k(jqC~K+ z0zq9^JRSyCf#Crlu~Aq;%`Gwx@$I@r;b`IA*XH+>SN&5s&i6x_KChwZ|T!Lfl(&AAta2JV8J{-SFCXaBU zIRX(4S3{69iMwQyzHn}C(Ar12r=zKXqqB`K7rsWp$MF!=h5g_E-68w~wxGEkH?@R1QNh)Orrvqey*Iq5^lhfiUAKSsFe90<;tc_|&m5;r7 z*@$Zxh-F(on*mm2bHCT`=J;}xcKT9mot8ll7sgeSJ%tu~SY1iZS2>7=O~yY|#p{Y; z48dX_O3pC6W!1-4AW1lwVmd`q6zsc6q?%^L5(B8@{*DEMRWT2|4~Wr$?hbiye+chIWlC}{kaTiG1_ymdJH3X|j zf*#AIGt)HhYa6Xg8o`idvVsOVF#x$HuwZNxVCU8I!@Um1bqF%+KIR7$0ltqQ);a{` zFpUcI2NtG6d@9m!ze(?7n;6L5AL`hD@ocBfmm)TJMY9baeHg<{uEDCm`=}9pX-1_h z3Q3uSKfVTG5x)Cr$GGm6T5!iXuG>{*?-c6`)8j za(`7Ih?8na>@h#?qliVAApvj*`Vf>7BZNn}fv3tI3ZU729Pv2Xv+VIeBf*8o^NRX_*{<^xCz0j|y`tw51~Im~Fb`;}Hhnp6Wz zg+r6MN?!v#=-OyNhuv(DwIL-4{RLLl^>n6i&`0Zt1vO*E!x*Cd| znu{N+WbXmDCl5(K5DqCmplAsy?%++-<(#BP3yx70;h80BKZUL3DE;{+ zRq5Neah$3nZPOjKM#X318`0Ft0yh1Nec9%}Y&%~5y9TpZ9NKk9++x>! zYjNbz|MU|VR|G2cT{u{91*@JorauN%35Kv*o$MrXK2-KkmM24)FT-j09W)A(#DoZa z8ztJ0^}4LZ+5F9*4Tuzd=oak_bD1m}I3aHnFXphz>0Ny@T&8MaWrmzm3l zi5y1^f7i}x)X9=8V15w1B=&%5<#XNxLh$v!evg&!ogfK4vCmxf zdJvR!)*7i1i)RZ_Dsl9hO4RH|oE{uL4Zs$*CP2)IdfGGz3jtngvI+ zi1ItNUik1u*jJHi^m+m|=!iJeSkdw@i60t+O=dPj_5;m?EH}|c=;#f!unf0Oali?Jg zX(??Ag>Q$9J9*(eL2gA6nyov~yJ<3WVg9v;1Yd2lxWc7*s(YS*Lz%D$2VCca@OVg{dx$C- zAKR?z4HB(Rrrc^`mgzDov)y(>2!FUNRhQ4kx;5F=*+&mp)+h-*U*v{{ zt&@WM?@mPv?n$`IggJ5INCov2k9xW71Rb7HGdcrfIM|{%g2Z<`Vq-K@-0s0HMYZgl z$3OFSzWDuxezsshT*b{`a)lTDZ;&qpCM^bAt!9Lolg;CWlhH|4!yh*-l1z8sX(5y}E)6EWso?5dha z0-&8l#DT(kn1`(9<&)Cq`r|j7m3g-0;+C*I){%w1P*r|r;{PFp&C!Y34TlkFNky## zvgoI^6oy5D1NES0EW7l>XtlWSoZK*Ntfy~M>IgNRRExGjfcSkFV+8-qY=?$ucWRlQ zx&ZMdJdg708+ctf3(p2bGD{ssONvZ~9^XxGb9&QBUc~kvLYQtcg9A$r5aM|A z1q5iyjg=+d9=&%_)FKv< zk_~korGkr0Ul;`YZM`Lc+)&^k9tsXD&ECg2i2}yar$dtk`OnnUS47Jd2YU;_Lfu6} zc&zSGbsl>>PD4Z9C^>Dam{-GH$F$Wbt#PVEB*I8Bn=3{aGNFF~+?N~%BHRak1 zH;j_sXb=%e-hxxKj7sa29L3bTdl4RTPqh=B>2U8RX*|p%fFiOOe-&|l!y>jf5J5#< z9twUSV>PMXy~gP(pLT}}QYsyzw+>|x_bn^3LemZ%H?D?}jq4XJ{l#J0$imf7t5c?d z^8XORC7gs7x&`y0p|6tXG@i=yJNjNcy|*ac z>8x=7+ssU3Q(u+W9R;e9uj=*MtZM0jfsHy;<{yicy!_sLS{&B|#obnMLI^IH2L;i} z+TE%KoL(|?9mA0_3e_x`3bx16(hU^$AO%WP)M)Rc))(9rvi3$Ib9X`mTh_iZ#KD&z zq|J5`{%t>-$i^A(si=^KaWd1i*+FFHx^74MV!0LVNzLcF>21{_r}L}pFB{30H2{=Q z2fn{sP27LuIYUg_92}Q7TEN=sNGH8S*_zq*U!xu`ru#|?d5SADr@3Q{M;tilEhB(t z1N=~esvQV{rjY4>glX}x8Iv6@q9{m9{0=o2emXy#rREpvWX;Q~CO1S;<(=y^St%$8 zin+^{p4M~WEI&IxwzwB30LPGLlW*Lj3H_cKE@1eqow|gz!M%`HDMdr(+r;Zg|6*<> zcbz6ij>mpr)xy{ic_c!`h0b5<35$W)zt2-)Vty5-@p>sN8@EY`d{i~f9YIlIQ*IPA zZ~lDpus#1a3wrXXh4icK{T2D#B1oA{*q?_kGS8=p+6M2z>f#<8hE0O`)m0#MnO5u* zbDul*72dq`@JnA<{0|{K-R|8jdHxloawGlLjvFsmj)YcQb-ZizdB6K<3Jkc_Q zQ0eaVCWLz+=cZyBDYJNA+TBHBVSdcSsBJyS;sZ;k&8TGT!aO@kOVVcXc<$LpgGI<` z|6rg#R###}B&y|=*4S9kEDI5XR{C@BwNLJ^#ckqWa^nSNzQOW~J6c*nJ+8LLx!n>r z%VsTt+%W)~4|QM7KL^b;bUdkky7Yr@lYFwT!`6XbVJ}?$Oh0X$?y`UJrw{MXuYK1e z@+AfPn7e<52;Ue5kRd-6BA>5Au0KdYUKFvbzLyVc zP9(dO*NV*n`{PNlcxWm<%ZmG8Qf{dSzc`6n{EjbQQ<}oVR~`eSew1QsXin9-Xe9H- z@ZhtehCWVIz;1JtTbKx<)74()Z+QpHMi<*j7duGxpRdfxF|qw8nP0IgPcv1b(5T;P zI7v(wU#jZH4~e+PU7wioTzagRg1B?^t-n8jqQxD&G~w40YNn6H?z(kl&q))u)Ku@B zPz!V6t{l^-B<`&7~XV=!xIbC#j~v;@(jSL6PG? zt>RvtkG;CR@~gg)HVEiLV`U}4$N2?3`99uIQX}*aiif zo(#MOHP$T9YU0oq*=U=O1LJ%H@gHwqIPFC2V1{Jn7(-5|+vi^~N<@_dss3;`J*fNC z=X@HSsK)~~1u1WPn--0RN}PsD{f8ESS>=+=QHZ<8fBFh~hbm9%GQUd(Ewu53YqfnJ zgdAyO0XkLc!ym2hW~rCNNXQAEXkIW5lUNR(1A2B-2HWBW3qLlWSe0i_lBd2ME+Ca* zavDs>>$aQdMS>Cn_J)G)m#294cY)$t)ic?D4D?Ou`FoC>>&HV8;6|8#}J35y-I$u1B$E0VAMHq{MpL*6cr|M48#1rcFyG2lBOTMGu)WxW`$g``1)$(K{> zF1I3W;@_j^$S*@edQqYS`{X_88)N_W?~cuBP7vuH{p~m6!Wc=88!tAQm_Uywfp_e_ zkVK4sS<~87131pMR$cFC20_k_@(Df)0@qUeOFd)Hh>!{6hy&=BrV(T9rq>@VfBWrvyHeC2;b zhf@pr1xm1ftH=A#a14!qU;I_{*5nvE5)2#8+4veKT1-%*oRnsr)O}Ab1mtI zY1??o+4s#^j^e4hHDnSqjv6ygreii_#iRBFU{BCVzP`$?bTIm`BGKGXTEX`Qr}N=!EsL~)ixV3pK{`TS9xkP?|X zUGo?v3#9X0$sO@RXI@OIWya5Wm!HOW09FNkRxkXmS|z^mJTXH23wu5i|C)QDPHLh4 zG!`)bEhg6D!|8;Ee*AepEZF&5t8;Y&cg@?{S+;2tAFtUKXVXu#i+>+mWKqwLEm&Ue zTjrVey&wJdIY+Y%jE;WuEkkMU<*mi8>BVM2>(+SVOJAjyX65JaMl4Qq zYrcJ{#6zp0^kzx1Wa(9r)o16W#fJVdjkdNs(}d`pZzf)0%?+J@7Z<-vRh87s2DO{W z$uDh3Ebo+54Ogiss4xGB7Z`k_*P(CH*=M~Eeo*dblU-!oKRPx4a^gf|rKrV*a%$=P zjq1;znoXOSW+n8l@!a9`gOTqxy$g-)cjh}rXGN^1|4FSrHnQzhoULv*PoZ5l=qn>m zTXkew$?ECr9i8ec`38wtp)l)8y1xt#P&?3{EdEyu(_EwbvGQfw^7m$D-xK?Kauw0j zRVJPe(rTGvPdlOx*tG8hX2|+<$|Amai%6{lqI zv2R^yX5HO+ePz>fnAR5PZNkm-ePD0JVriKGI9MjpwD^AKyNq%H@@!p1(@NURO1A$y zrH&mgXNA@Fdp2eoI`&<~J4LwET3&c=%tD`XbZ%yGT`O_}4N+wg7QMr5FKjbONxrUc zp!74|N{-mM^f+e;Icp@nX{_m7MZDIiIJP8~nZjy3S z_v7jw$2BsD+v^wPBq$dBKan|5CFWWjFL2|H{z zsFBOV6GoG$5Z9+)??0m}@~_@9(6=a_`SDVDxA}TS&CEJT8s?|I-mdJyQ~INoZXbu4 z7L(rZQU2~ZeIKv6omRcQ*8Twh(zAGG8DPCTX}KTt*C-3R^;P=kq_FcP*v{B=)*`rm zG}1HfVEcp6R_TF9!}VU{jF*7oF2NRSpn8R9W@AbEU<{`4L1??m#p}gS`;~`V z-_yJ;%F~6`hTwH9{jFmT;F{dNoP6N&=6|&Ak56= zgS5{{<1ZhT{UZGh(Xsv6g9A^4gOx_PEy(hI?)+89FVN@uz0z66y6K^+@5jr|Q>BNb zO};v*-+Nu$Kg}Er`|lHSolCs$FBtrwNWV{j9Kl@=OCKM8nW3g2nTR$!Wc+OCXM6CN zj_YFP(dD&Vg+2|a>r9EBlWx`{58;FNB|nn|TdwW%5JL z?C1kv^(zX?PZXt{ByaMVHxC@QpD^FGPGiso*4P`-t%JzRO)NCv2yW*OwjfyTASO&Y!rB#xw<<&;_!byD*&h zh2MU*%jRG@dkoE+XHP%PNPk8qqZn;I$uoJRRnE6TMX?VMBO7xnCE zp3G`y$7M3LMNZM2h2PI!lOUQI+jHZ9Aw>t7>MO3XUzO~7zuLD)eqNQx2+N-Or~PtE zzk3MFyKIVjZlVcLv-GL+_Hh^SZM=J#n)fK|Fsqea{}tOsTG`|9?dRa_6YRIMWiPdV zkf-5<<+^+Japw<}@IeVOR}?Y5&R=;<;J$kKbg#>7+U5M;q3MM;@3X#+)4ceD z9`k3@<|To=*9(oX#F@E@t?L8&-50KbHF>(qHm4+*2>{H zq>Iak@cY3vQTi)&nP(FaD6c^W{Qp7-$1%zH?V~A)1`;_mgsoC{xQ0^s86)B(j=4uN zI5x*C-Tx0lSp0!Ba;}&3Yq8A@A-s3;KM3JUt0upn{~sazM!s}7qd>&8PGc~c0+{Zx z-9hegF1*|p6!BF9BdJRl=GYHqyCHs{{rP*Qom0%@Mj0=@o0labtb`76HSq&nza zUW8Q;e`%)2(0GA;0!?8tPicWBQ%P2kK*hU?R)P0btycn-?;_=?o=j6>SzopM7a=^9 z^GX!9T`ExDT@2Fmo12J?8QtpjWWFJUt2{>TJOwwJ<6Six|6f8_LAYfz>$!02ZpA0z zPd{7#2)7*#DTuW1iFftV23RA7&~aCxC~;^A2R|YY`w<3wk3f(DpCW2BQz>;7#rn{i z^wcczq#Ns{tk3_74OnhnMCiRf1RC=s<`$;a6YlU1u;?G?e_o?+z7CT34fWfw&R z6gYf=g8@4ciO0FtSjhzRcTWi;R$<*L+kSsJS;}B%cEf>nWZOMn|TRc5nf(s|G9!bIuVU3>9xv1y`?9<3+=Ms;}w=AfP~R2 z$cngWbO^Iw--%|TkFTxRPC=})eDW=qf(SaB_Z{*-s%C}Q3%BkZLpe~Kho5nu`D1e3 zy(#)i*}6!6{mJV7KB0j2SZ-0w=~f^po=oW8Z9n;Z|HJ3gSwZuMFMcasD_yL`exU`L z_^X(6#Oe95gmTd}7o83v^ZthZ{-yN(A0ff^r##``pI7|*iVbvZl)jR@p}m8Y2xH$AH426WAR5l~qz-)u;Mo^t z0D2SMPHelmRf3Dfz~7x3;&n+V`a)_mezk= z+N;|IzUp|I+o=!^ECFQc#n;WF21M|V_fZ723)XJ&GQ+kRsc4@{`2c`rLm)Zg(H*T(%{=D^>DhvU%1a69c;q zb?fH@yi1es4J8?d!(>#GZw1ki5$)K0!yKZf%cz=~cQVHsvC-c)#nZ#L9t4vL8TT8ZZ?bxBMx~BFg&yoJlKuL2h$5zsIZ`Pqi zZ6vu2SLWirtRHjA6Q|=gh;j|uLyC2?wW*6@i&j-xU7Q>7qaYJJ=oNJwS$^Qn)g9r1 z_T{HywV@3qWT}b9#F8;gNj3HfU(eZ9=7R)#)46`Au?IUtQxsAQOwu2!QE4Wt-YM^j zD9c)XVqCeg`8J{N0mDdakWNlmjxG&WF;&2whzL-)h(4qJaV(&~Q?ADP+4s&*_Z}#bo~Wz#W$M2l%#HqDe2jF15Hdpdq zSTS@IGT13VMrGXD+pv%jHIEjf3dAX}L9*B7bEOSU^a^~ms9_3Db&*o|=fbM0D7wgF z&pYbb--KVaU=KF?!e1AU_*t)`$@`&qDudRX$h4imAE^haU9fvesGwszcy^`h@3%1k&!1vjZozg_8fflNkpd}9C z?KLG+!wC{g+%{)YRDtL)s4^GUXiL9PmQq8!M2E$N@P;^%k#Bsm^1jhFes`RA5R{5@ zQGez;d#PU^f`AFPsWzfEE`sf@bq_)yQKMb<{zvPq73_NocI-rk%{}Ku`Tyh)tGAq1 zuL~yNR0rV%ibuBwFPZ7~3KH45PPOp=ezQ~kTX;pd{&g3yzCwW60k-l^Z}ly#WHKzDjIs2jn$UX3MsNCa*#(R$+B^ zq&ll)t#)KXcDG#eVauzeU+u`(5opmHeii{QB%-9Vr-azUEAl7>2nANq0%~OhjWQA* z*-PVqfb?UDukAn`SlWOB`WP&I)tL5h0AF_Kayr;0PXFjz<@Vpo>vZtU9S% z2uoNmWU2s-MX}ASLFVkyo+tz<2XMpQqZrS|wvN0)0uKvVzS?ui7jj9jbJ-ShyEt%r zb8rW6@c6Cs%5wxwA=x`X{N3vOS%rGVg=}FUb~*=k4uDX^X=n)J(F`Fs)A4EvP8vpB zI%!VYrChqz#k!4LdL6}j{apHE#X2)wdX-K$=NK3i>mC%Njf!=EB^Wwx_2ptBz^1l1 z7x2PK`>fbF#z~zDfJQrG4xCJ_oQ;h(brrd^NlQ$;oeenf=2n{~3C@-t+-3pXmK9DG z)z0WfZVOv(^L}SDt4(!jXDwy!d(xZw$omGWV znp<3^30xXxJT7J>=!^{`Zx_=v0=Kg;i7OM2j**M2s*|46hHBvkKyuTDqx2Rc zdKI8Yg8~SV079@pE<6U#<0~Blz0_w-Ja6r0B~!K*KLwh-CRKZQapu7r^Q}005QCfy%pnmwV-&53I#g8_rNGfzqa@Z^Jt|+>CSL7j3?p=`*DUe53_6`E5 zu&Su2*ej{qd)MJn)GzS)J2t}8%x3kp*4J9dJDx_}@QPzVKQz=M4OBwTo;H6Hp_kR*RQ^$eW6 z{!Sf20C-1&8X~a>P*)t4%iE6kR&(xp`z{ZYH__w#=*9P0F};Wo^_B!ca>qNpxZR8^ zJesB$?eG2oP?3J1U3!g)D6agDNUZ z47kiX-i^|24f0eD4uOay1-vP|%4RAZNd+z0ysCKam#X|MweTV2 z!y$#p5$P|CrY5@*z2_S`YJU=Ud3#G=B79=&fRYG|KY< z%6o&!^N}_``L_GTnCPw9np-QP6x%fvvxf%1ST}%GQm+t9NoW~K>In~d;r)+jBt&` zfRJSyu}*{re<~0LJ9YCzGN4B?T96kUJ7}PAj{2?aNW|eCFw*k106SfV!9omKUr zF@kK1rQZfWbDzycmTm1xV~dnTV1M*w1;&iHU|k;9*8e^cx4JyH(LhHTdph0p+;PZL z{g)@)xaH>0(%hf!$9D)+PqN&rcdLXSdv=HxKt3jV<3W7X#VBJ~p)Rlm;;y?D=wjoR z4(2EyIn3cZ_Ly1(%y+L>-%pP(~kh{Z-~xbyWBf?vLHADq2*Sa}4C6G#^Hrr4HYw zW*vbtm3n_j$KEC2d-&NEq_p7;^l|}j0O!yN-`KP}nmmsw8c(;YW^u`oRCbc?`ZABzo zDAIKF-nYkf-U`~A)Bd*7BYw09N*l6(1vgdpt=|5D!Sf*)CV*#mqwtn>>U`d26D^U+ z`||>|{DP)!*^t7nUn1WtzEuAhsP|8BOJu_1_$BAqr~pghi?axk|JAv<&dCzSVWMP5 zQDK`2Zk6`cS668qIIUrg&bIXY*71#Km$A-@U=FxeH#h!hx<*~&DKvN5TXx-O?z+7u z{1vGcQ z0H4V3ZfExewLE*wrv*R^a(VfWo#Yi_rEcGq&am^SnncrJ#(v_NhgVJg^Up&Hh3 zL}q&?6_dEemuYb`TI&%@y^Bh4TX#he`ERea!VA})q_a`$@y+RL!@3=)DN7hL<>n`A zSVoFjMpNq`Tf01+uYTsPOw#mu$lK=iJizk99}8ZB)vT$_tcT6VbnD?y>pgj!)-yP3 zo_gD-mo3vCZPS)EZ}ZxE-X!AVlBQoK&bF_*TIVxW`43XNyN}txmZe_@we_T1xh=Hu z@~FJ8R`u%5$~47K3a-t^EthkE=j{nEH`@?l{QEns-QxJT09$-OYx$m4*U^7(-_!<) zwYd3OjV?j{4w`qNMBp(qP|OEx1<2%5#i0P5-bHp zP&T^6DetfqQRocTCLl2x|4SkKI73`4xl%Yc#d8QEei|W!X_re{A?|ux>oqV}G)1li zoZhu%@FK}0UecmayZ4}cNFtejeHwKMt*2uhcTO}@OeHk9=L%=Dm~!1^zpRx(?QKdG z>W;MW=u`zfM-y*A=0RD=`{u3RL*`i_>~mg(MD!I-uM1!`VYkdH`r#mRX0?&@p@OP# z5V`LsZKWgSd76^V3EF(^R7dES@9~MM(Z9~gpaX7Pv@SO3e1o>)_q8fK{65)y67~F_ z{P%C{+adRS$`l`Tyr~T-B%Mw$#?OvKUu+RocRcmOkPs)cV{$5P>C@9oPVHq@f0i_x z?b*QRU^%Tlpvy?4#x$XN`)&i;g_KcV2I`JciuP@UFnnXtmu| ziwm$6zndSqYND_OwKl8$)vy$wS=J6aW-z*;hh*@9Q~+*{_7JUQ&9!SV&H|!j8Yvp0 z5A^Ay71(2x;Qq8i!s9DPLGe2e{!1bJXhgeh$636gm41if%O?geGD*l)ojQ?_7 zRYp|py0DXU-WWt=#XoKO+Enw}Z>+{L^F|5h-ci4=jZeR8wRG>yZ9V>C=bm>b-@49g zh>Ikf+IE0ovMQ$>!^UvY0dn^5r!0 zede|Ybd7;VH$oAt0+erxJfChp?6()m)7-mFAL>EN+9hNEI{8KGIh!1x^WS@hbYO zL|p<=u7cWZJbz)Y&DoFbm-2UJ+`Y{msD}NE6n|8%GEFs5N;&AH-QNmk9FV@=b!P0( zdzRSb)9G=&vZo(1ohDayC@dmX)6_TXvwR#x?rG}{6<~KveQy}h*;BLbHjwbEPQDWj;ctrXhxr7D|iO7S~Xri-=XiV7L(`)Vf-NljsE%_54DLiQk<$ zTmW7jW$#{1AeP0x+M)S$yV65@GD;-IQeKXYbno}DQ!JP9(C9ok7OmPCti4T6$erm| zPKz8Z>XQEsrdy4Kh_P1eRaZF~6ulWRr@HjxHqX;L-6kb2n;8Qow-n9=U!>IkyvKZ{ zk-*x^`CSjYSfxkXikjKw)bxp9FekQ6ls6?5JE*Kg0DDE_SUZu&!9t4WS!rkd-0$Jb zg(cLjt1}#U>9sOhZw*b!u)+RiBN#24lTsja^WBhv7s{3xd>-8hcS)9U@ysnymoPYR znx1L6yDa9y&9INU`{V|Fo{3+a{t2lKW!(E7243(lc_aUFMb7_O;dZNN%y$2I%m(Hw!erF%5G15+0@h@teq>7`OMNp4V|;e3{nXuIwJEq$W{s-%SWodXD&O_>mp+Lq{ktssGmqj_kNK_a zi?Xoyyas&VtTJmW*L`F>sDS^`xHaJi;QUna7lv|hH_FgMr%?NR)i8{rNsslr`PlPJ za>orWrEOoKzkT+CxIC=i?Df!=`9}v|Y1wENiu)Eb(D^$Rw_hrZG9z?nq-eRH$kz%q zXJ=|%4Nhj}%=|PVYAqh1UL)^N9#Kp7oL=Fa)yMwrOO_Ch8dzEfUP%;s*syn=c;xVewg`dQk`{nyUL%!_W%(#U6wrNd^6i@NuMCCBD6Kb6J*?*DW(35lKO zCQE1CuxD!>4lm7qJs*CJW1|yMs^l=BofvB4be(3_@%KY<@rmEg)u)m)zT8lMg$gKE z&Mde|zS_8%HBy5fIxN%*P2M_E+w%R(k-Pj27u~yve)+F;^~l>bJUFx|zv!--RX@t3eQ`JEWU5t6;DxMsT2QMZ6PB?ejJamU5IA&AGs^lXk2=4gvP zET+%%@xaN-g~dVAjcfy0RHHuqsacBmaeGS{A45gPsNUibRp#jO3&Z??q3#$U=fn|r zBA+Vmu1zqeK!W})zYaj{?v)YT$pQ&ZyD#T8)VOAERPEVgcwm9gjtVEqFfc~l4?#!fHQq;Pa|w}vt}q& z-YT-m<6Px`SW`QF{e5Bs0q zXr&a2IHyQ&ynY&U<^2Abl{xb_{qEdlI?guRPt@3;CzoXB!V0?q-R#_C%QClRew$T? zi*>RkVl@bvf@>5|o<2xYO2C)&BDijWdlW1^5^xY^@Y4-ffsK!FhCd`*m#$l^zPviCpH7(g3Ky&*v z&Vx)AM;3Xd#w`;kvS`M9)!Ztky&RhKSV_I}f?J$a7{8>uDj7~>u~W8uDDtt>V)%UY zWMQ3U6=eDZsmVGW`+aDkAgU8!8a&5}ousKb?g1S)CDqgd9csuXhWUbsli|5csuqjN z88_(H{_$B))%F}y$9o!cdbb*^4Ww$eNI~D+fq5$G2QXy26=(Qq=AkT(Z_$3@OmNr> z*=cmJfuUY0afd^r1z51NJRQGReWCESRo=Fa%r|aX(Q@K_uRF4cqZz}tEX;xaz1W7M<1rB?+Va+ zEYMd3%3+Hm@-K^snJaZKV4pKY*REp&1)ZSJCys_pH}1*)TCz(9WQW@9e!uhjXI1kv z_*ei;U{JTz7+`2*yH=g7{TFR#X7kohZ4#lc>q~Sy$(Hz$szSprufu#U@2DiD9v5w( z#Xin2t)qmaeT$V=A{(+Xt1lc~;fl-iAk}_#xTvg8LALa>d&26=u6(s>A(E4#LEw5O z_Ge)h=e%scHBdR3iL)somzsu*j|RYCS;PaTc{x}#cbr^O)M?i27p4=Kckx?~;;T7Q zw~D^W*lZ8GQUC8Kt(Y2Dps?Rq)=2MtU{!5HvqvPxJ;q~`Lrc=m z$ago5sGCxM)8W?&e2G4Fi{NiC<)6tP{2>NSMB9whhpFTWY-FWo{5Z6cRn=&-D*1(0 z5W@oCBG6>L6+Yx_i=^XsaQ{O%SR$ zZ77)8GVEo~P!lgvqP-$;yy_)pZ-$V|$ZlkeH7@KtQlCQ9A!J-tpZetX+zPgQM`Y(1 zRI1Py0sGB3chTlrTy*i&_CV5${)8LueSMm+rbCIz4a-C;G9UEAT8gU?kuUBlNEUGH zRTIlU#Un;H$NUFU7S*TVjbO&7lOAwwqguAAMjt9P7-`hPL{W$ClUs&Z`^37@>PBEd zu+^{YXP^F26%l09PYV3{XgzblzgfUQi1wzvR@&Lp` zXudB>hAe&14&5-w?vqgA1s~fzq0w zV=!RP1WpSh`2tKi5nIlLloM6@>3Bb$Fgc2;B4gRK3^W;gm6LHwM9 zLs52IR4xQv#7D<-_xDd>i+R{`5R=KooM)m-xq;RXP=_9%a%t(exY&>>w90F*awg7> z1n_$^Kd7k=FDs!*{&?e^7he;a98nTm(nd6?x);v~eFOH~LmCoDV;|6HC}#MOceM7N zcqX=yhpAxVs)aXrOkoTf_m+%dk#cfDY@r}SBolHg7$a1Li2Th+12aDaN83RV2L#Xw zI^JUn;XM^_R14fkj-FgmtR9jqco^ry0V+V$&D5-*P2%AjTR>B8LiHA$1T+4EAQsI{ zKu~Z6eA;eEq<}73!53X1iT3bCfAR4j_!uJyeuO7_n~eWT#5Xyeg?|bVw2z93-HS65;zGkw|#juH`5xqHA#& zri27~g=18PieMe5;1uYsp(01H2t9=R$isYOiVAol<4jQ&5i!EYbP8e*L-F;&n7dq& z5wb`F{o-9R{_THax!AW;C{GZvi;kZJk$!@xq2H+q7?q0PFw{@{_45Zgy{Ve9MOQ!S zAMQrD#o`blXn6FgRc)|ylZUD{1?eGY&eY+S=%SN!{1Q>Le@f&z9cbf;zT_r+h2Z=7 z_&7f1x18uhXOVgc{s$S4X5hMcXnnB6h$G@b0`6)ay=q)8=~pftUoLy4T)wGXajaZ< zwfw*QCK`SfD)M{u-ilX|z-OmH84d(CjX6h_Ni{z-avAAJF5kQW9AO8+rx9Ls=+P>n(QHsG$H{Sv#3S}Hi;w#eT2S2#tbrXZ+V!v91$;pH$e_lEZE-&qVJJ#tRaku z9M*3YRScH+k>L{zoC+6k1^qT(9oD*XBfjZI;@FL()f>#F@-zy>pW@#;8!qw_u``&7 z*kt(`Iinoo4!`X2GuI5d`N5Ve@JH$gAU*vOc$mCKtTh>fm&10GF`iS{ekRsK6UvsGi#YZL{g4lLC}JNVBO?Te2(D+}m70O3nkQp5&sJ-O{=#@KT7I(sTB?dtuxH<#Bx#|igDuQn??}u87LH)H4YMsI~{Q}ECT(=)G ztPb@x#^r=I;+8N2PS5sYz@g`Mc?nPnB&D+ubUZ)BN*htkz!o#H=Qu1s0bs<3dkByx zcm^kUb)Q%3hzj*;mh~F`^;!w_+Qs!c&GmZY_1o9#KM#1udg4mc{9HGQ*a!}AD*i@n z7DT9LbO=Vib~?N11BUa04m(8UbRit+h_!+p0lXX|(*0dH#1JAK&8R!F2l#GkCol!< zNQmQPWEfaN=K|%%fYfckfpgY!?EypKVT|R&6aEil6CTDDKa6jFm^l70Y3(6%?ZL2* z3iig+~QW>4ydb0X)C~jC%d*2;#e!&)99^Qi>**zj8$=?{CG10FZko$e%%toBp8^V?L{kS>BMgF-y?v;J(+I zk=W_BFACL*mhH>_?Y|S+rJG7_&FLFGYV1I^NR>MtrGj4@3t$94WO;LrPNWZ`G-VJR zROk@5>W~cRkWTE7Rcu+sNsJV?ZL53qez2OtYS#$p)Jp8sR&3LRVsO&Yw~>c@828TU zwkWCccMA6EJ}M|r<>RvbaQH48D}tO=H#MN!F|nKWq*>t!LH9x=lG6HSJO`a$F;dX! zli1^1(j#mSk?OEQQhRhxdo3H3E0kZVE$<00={=m?X;HqjQksg8iUJb7W^{Xwu9XrP4E4U z-WA-7E$HsFdeR;6q!-`5W4ib1+%+7uN7e$g1F-@I_7EMRh*GI5c{;W}5aNkW)7k%^ zMYuCR_6#V8Q((dn+`T{i$-1ZC*Pn&srBiuo3k~`^5h_m=pC}CJ8gITD$w?r2|9cgz^tw0krPws!{|VehcCT?5 zhfdXI(wi9THz)SJiQU$3dL|eB0-!SDu+vbK>PWKnD0}B{SPrfjVxV=RM`_G3dVEOf z-C21>;{n%uX9k8#-;G&Ugxz_qxY_b)k0nuL>i$gw(I#FQ)7v*@Iu)hLGNobpGeT38 zq{fU!+XtT($+mec?P*|502sj?H?0Mq1_Kt)KDY&Ty4IoHu>_N(S>07FD+U5z_R+8H zV}SA-n<&sZUHIiUPEpCrGp7y&8ol_75sR8__8y54jR>E64(MA%3457xjWWnG)Aiu4 zvQJD=1I(`}l?yL=flsW>viYpGdAF5M*&Fj5<rAK9@{>F5CFb zRsK?8^QCgT_?GGU>t$bVwS75#e5hvQi%WDW&*m#t|2dj8(NOkPlSSXl`r5SdRV82Q z#PnBw;DUl@Zgtecz;?o^wuNVHgr^$|!#3YW+$CNFej6QDLhpNh|2rQZK6%l%0dn^&`4j0;@U zx;m$Fb@6iUqTc2rNoC1k({{<|IbnOy(nju*Mf;M~`z5vGOE!0h$tufLEsNBvbKObH z(KgF2?cL7rmrbLV>9)VTRUEy7eyyDO<$HC>|NXDP=MH|Gzd~()CrJDbJ2v2U_P6n+ z--pGHMZW+2_~38G-S!yUKM8+-$J!o_yZYzqgFlJyBa$}%T>ibB++M;8TFLYIlhMAC z9VCZJ#( zHDVF$&DDC_HT?8y!`%bbXV)&?U2A#2)^_$!d*0Dj<@G3!^--VI-gei%tLslxmLI%d zAKLMIP~~6g^7_d8ov+XS8!!Afw&}5R;{CtA<$qJh+#cC(7?}Km9qo-_aDH__&JI_4?~ z{U&l=v$O)uon_R^ULRd99Gm2^<#x@vT`@j7*?oD}jmJioXEp$N?|FKKLypD5Y46Wo zRXa;IQl6WDXb_+Wvv)%_%dg3rR}UB{-_5*MFueh-em>zw_f|INSYfC;={Q9<~H-)&lk+yzk<^`M# zg$sSH&>!}^`|ILiJc@2f3><2z<+k4r7zroY|Mp67$=m|et6}iQ8b2*XkGfP*rS?## zx+@qIvV>|&NS)&kWut-1_rRfEN0t1qoemX5%2XFCcwOIllC3cy${OVlIcwhN7I}QV zfo`8;u)VV0^=*w&L`OD^%5>{n78vZz=4XG-%iI`(yPJQgJnnA!wR_3kdTI8!hwU1$ z>_PcTVoJ!W`3s?q_hw|7|;9rJ3<8PTPQn!Eio3GD3rRt=^N)8Ji|4a`t3 zX@1-bcN$fdeU7uid&A972PhvP` zpqLxF&WD$|;lG$fbr~Caa|7z-!sS>GDCk92wMb8Na?;i{#?zkR2DCcj%OBNMKsp>P z-^qny3kkmexX-&}VJs3zv;O_`SP)JGXpG9hC!cWQpECF^yTP5lMw~pAoFTT6YyO>Y zt#637fU~~bmO&?cyXOR7V+}#hat)idoK0LBblP119ONo=AdUrT11Vk{m1~kF)hf`x zpYt|I>!xG~#F)r|idQlbdVNSC`6$$Jz_C=K!Y#+?3 zkpkLuLzwyys8^g_vMd*(6Q=4GP;Hm;gp>w99RfA-s;NiGwR_0l>QSxF&&rX@ol`501$ zrrhOz*O-{|h!+}Kl(+q!N%aMlR@b+p#9chH3@+3LXzJ|W%Atyf<-^J~wjH_b3QW{r zYNwK6k`N}eCZ-66;gb*~h^un_#a3@71eh8O3N5(wXwzy=?{Pitupb+N9-?@@?t_Z* z^daZW57|LLh-;Oh)&do6C06gw9y(t39niGVz4?6iqQs>QD-H6u%g!w6hBDYrG?~C1 zIxcSjNu~;UEygogczsDXo-dsA^%E6`^A%;giPBql+GClQa1mN!6laj*c>Q8eLx$K1 z@R{}SqPh=0)9$N*r;U7A&Vhx`E=gE#8{`G!qa!z|Ffs(1F?>OI^f%_5X0Zx)5igPX zs$xLd03 z!kslMjnL1|PZAv;HjSiik6nv+x8U-yeDdS>*!yeG1qG*CpxbuDKmQtVrv43)J)sK` zXXMy-UnF`-RS|*Y{uTpMXcq`UrR6gzu;43cRyXa$r=GPqzI+(At&ix(VovB>&&k?} z#vU&Q}bDb7heas zeX*2eSAFB_;Jts(ZaqYgC;P_@toU8PzPApt8;Er~@}+lPJ@vw1PBv|a&~=G(!UbhcV{ z!*v{=;-N4L(KA}6swvqS=jy*E>hG@=t3O;wV`_n1h$sUX{p-@bC{L zWRUCgcOFF>DZoahX%Bm>kM7^)5Bp?e3ezA%v5Ylhzas>pM&z6p(||qijYWdoW59?% zu{Y^Kz4}ztW`P+5s!2rSfn)}70;0V`Hlqup_A|ecKZRyMy$y1suT-k5ejzh0mG4KV ziiLf+F-^hS1ak^-Y`~22asgQ%qugSpt}BCnhOtW#^X9{`fBDZXXIP?WYxNzUpfJXF z=(XqFO0(pQ#{@=nNjC(l&x?P3x0X|LWZzfJ=hfHkxg1_X>DN7`31dBNvG*UAep8{F zzfAeg;J?(zxx%$c9kayQ@;3X?$Lwfz#Cwf>RLq70_m-AU%~f1YhO?-Hrz$Y{J% z-(pI8X;`ts_J%;qWH9Ds+c_~s_QZ-)8FONx`vJ*ZqDBS_6)Kj{sLr3uwMBOmxC!re zY_k8rK3jie*(Ro~C;bu8Pg=~pyZ*s+^Un?eWcj+vnJ*qetGq3&&JaONu{!Z*=AScm zC-Q!E>@QvN-HN0J(^q;imDsJGyX}XJz~Zx0A3Lu0X$A0>#psG^tMh1_Y=&tHx({vz z(5+MXR(V9!&0-Y5O^;<_))mkKd-NR6_LF_v$8oZVo{i`-c}{`?OjyfSw@Ea#eMzxS z;kPaMn{m=w6!#AzAcN6+`Pu`wa5dJnLB4`%lsD(pR6*?XkKG5kb^ zk0LtA9G$X1EeJ#_`?g=XW}VCjF73~_lAjsQwUpIELnAZf23s@wt`?KvG6JSJsY^5? z#VY{gJP%(8j^p0vm=b4j!_zT=~RkMRlnP3Icw44m>omtv#Xk*jEv z-9jTP_7_O@pVx3MH0nRt-E`2ZOTWb4siqICq2)%l^-ejmM=eu#nJZAy%_*!(S8TMm zw5MW5pjl?%Q0vlu2(suAo5*$?MFC*?IXX1OH$9|0H=o&(NQRtbFhxmSN%)Id#B?Np z@`*$5<9B4Hm~D}haS1O^24O)@nnJq=_m8;lU!X-c^hT}^@|OoY0JlyzJGQp;t#hr78c^o84x(uT~V@t8+c$fE_gZwXYYh{aklXSURH?D?l6(HAHg z4?Pi7ZB~16>YgHmUr{Qnnz?1&Ii(Q=WTb8COgJSObv4bR8L~oyamL;Z_Joo7WJ{iG zaR1?n!IoLquX;}wB;CFlJ^4QCew4~g+ncd0;eZ2ZrPQYWh5l6E_S?6u)2Gtzg`nq+ zGDNjm^XIM7WqU5HnS*`(sYP;`OSTeVhUfexPabTy2Ksq%=aLb+RUN&rPg#cZOuX^A zY@g-ThL)10{xmaJ77cY%9Zk?gD|1=N%ogj6A}8X7Rc+g^>=$1~2ESE${-}BJqveI- z{U$*$5G#j1L}rH3%UHao)_c}9=bn@`G>c00h#WvSA0N);J;^p}>A`1;`kLRyx%LF0 z(?8gZ@5=BQu}O}DW}SEcyv)>HM<0wtzhF;wCQo^#2;jejE2QO#<+~=U`yJLjyKG+V zvTDUu7`g)`ZmTEIPXdOUj|@|lny-d=UF5f>2@vO|+C)=(Qu;jhSfPW^X@5&P4z53P zzkv4KjX4|)+B&?l+5O7)z^iUF`u|X^^B?pixWf%ikpB;QQk5=-v&$akRrH*bHT)mw zNoD_e?OnG5`n|$B-O%DuI>KQr6)=vTi|oI56supEOzkKO-PHm6(5d(?P>?&n3 zs%G}tDGSK$Ve#&O)*s?-j21 zpr9{T^Cn`{A${NcSm0^%nAfh@oYT{}**_n@FWwTN_F->yXxQtr{l6YYfr{#1xmGW z{zygr=H*Xzk%7MsI7Lhhw*f`$44lfi|10|zzabGl&uS8f3pU27xkGOIElIMm&q+Ts*-gp=#kdE~D4pSg2C+E#xL z{%8w$dwV!(?K+i5j$h9gbYe}PkSHh_D|$CtF@Vsc9N~LG2_Egnc}$JK7j&bWHTC;# z|Ebou=%oOPv;*CW$6X>u0*>29Ohw*%3jemS^wi=z6|(%|{!{#==k^~b7GEmA zV(|y*dvfw6+booxHd=zZxdzY-B=`=&jk9HswoP9x+$T_rK<^rrPT5T3>b<=#r z3a`;UUw!wN3FTN9%Tq4*Rh=0uuX6j{?Og5soC_!LVVbZ*;UQ}Rn+~WGp{VYlq+(21 zeyK;cUNTL!+y5O37AqT#gf)5pu=WU+U_o~5&fnHXc5YbiU3hzcw z+RFLmUImA4pWO;EM0wckP(fVFG~tvz%5?Dt*SD~O7$)c@$IG0vBr>u1CtRoOOKpUm zsi*gn$*29)nv=EZDUF0=>}e1I2<{M1a$(3+B2sdUu6~T3^72-_ElkHlQwWx5Y#ufR zVz$5@Wq*m~=q(80|(*IznQ7KOBWjpc@Y&}F29egg_?V5bP zU3Xf;egNuwP4N@WsSt=3&(`fDfgGmU>z{c{e5C_^v^Oi82#tWVi8B3t7M<`Dunv2B zlObAm<=uj!UE|1*uno#wa%QwhEIW}UPw{xt}3HEnC0}oX>6x%zf8TX8(BjwPwldrPwijRgVO9` z*xQ3Ly}YOAxW}(7+R1qOWiqLfGiBO8!@k`5wJEy=?Sa`lr3q^wk^#vEqK6qwP=@hn zbg;v+h_o%8!G#Gk$2AUrrv8%6*A_@NaF6i%WaY7@Cu7TTXjz!D;&g@r9R|%OGbOWP zvi?ERG?Z_c;*l z_fzAyes15bPJBJev3i@(2bj_=>wkam87B0{ z&jh1@_)d{Svz1$?nLmj5tsiS4ao$W1M?+o$bWkk6akk zXW@ND=e{snh&mut+*Gt*0Zj`__J$r$dWn^(s%D=u`DP8rQg1G$n9<+XyvU? z%G^Sy>+oCsAm8NtU2F4sj0)9&DX6A=bi{=|rfLJ3DQD&dY&#KrFRIokpkQdk>|1Bo zo|U^U_z;e?^z3zoOl_EsD(EUnCDhCIaWLX=R=7RUkjx~>ssY>4({wtz{MILfL$U1r zW3s9pWN*4ba&o)lDroqj|TKG+7og*Q6AZN@wdbVz3_7$%JeYK<)aQh|BDd3=M_>-6us;ayzOw zvzc4txWvlR3cX=E%&?n`R+)l|*)W-5lG!+zYR-jS$}&wRe;X|)Xs^rYfHwav#^-lv zA7LMu`?g#pmP}IaBsyD7QN&8;sR0jz)3Fk9IP_?z^fGy+Fzl2d6YyEYU>xWK}wipLBi2PqLj5+0?TGmbtXNd|TVyg`$%e}Ev z-kzMQLsrGIWu1wY8SEQR#Iahbb`rG=w(^J(+aSC{lm@~Sx-Z_V+rObRS8BMK;A68> z>n^qR^LnyOH4or6^S&7cbxQu+21e}fCd76ETC%JRhhRIgY5}g1gJ}_9G9j3?bctkB z43~t-U}896+^ITLA?RyAg|-?x-th@*#{epSojDqEhyzN^Fd+|838ycHo=x%EKjj_A zMHmQx3{x=L4$cBGQasR}5eT2gR&Y_Z4D5L(wpMuG&A@(ui1hG8ZVj=8B6Su+Ss$TV z$iU@;*fcJdUM*xTP?JQg>^xvk1U~RtyQfU%QOSGj03XI7*fh2wI{D8hSEb()!Re3& zEwJDb}i!SjpYKe$3p>~g~`9pwh zAd0-?3rAHV!fBFd+0d2~|!c=kj!LYl*m}Mk>0m(pv zXd{99N0Qh_f!D_=>};dR(58?qq2nzhGH+x+Mg*dKGX6FXb&Di2fW(gw@%2Q!(88|5 z!9RqckD3CJ9FZM#Bt7gL=B>0?rb{Ey7M2f@A%b~y+BNTNIf~J3L(gu73tOtu8~|Y~vEw7EcnDX>z#2|tT6vgeI{x(( zc1(cRH`Yv`C*o!Q1M=MCCX{lqrm~ogMq%Bok=>L?H3J#I1uS1*+-EN1A-<<47=1Sw z0`r6%d`pjdOE@qU>cjw?xri`2aGZfUPDDDAQ2T=c8V4z)MBbPKAsl4jP-!R$d5VZU zzo`zMsS{erwlzQ2JjcTgGKA|8=e(GBxI%8F08>PgxJ<-4&!DS?hy_;&b_lU5)Tv;R zaRw@kzVr9-(+~F&Cbvi~OF|PR-A>L+#1K(y_YC)QkkMq+Nk(~E3M!IU8cDAR2}Xr{ zC_l-MhgG5Chv4U?Dz@JuZC}MS^3fGsQXLz@giWD@ z7)BWbyNioF_>#M|9xuHIfnwoNUSDU z`7vuZ8F1jkcX7R4G;OT7-e^AX`I;RRRc%K~)2U<)Is3Sgjlzh4%jPMh6}OV*cs*vC zf|z#F@o_IYj4)U>HRw)r<)cpo0~^Lwt^y&wWa8P2C|)%U7`nCPmuV0g85D1O$KrrH z)%W9UXaIOn*#2?pxUDA&v4>dmTm9zrPt-(eh=>U|c*QrYDP$w{R&^5<5p8}u>*npl zpjB`1H61Yi9yoZ|z1O1l_T14+$IXZ1&Cgz|y*ySslSTO9QoA@{Fz5pQvbdXbd~ffU z+Vv|pSL96#4|;4`@Bm%2G+&-+A-d2p%m+MW2CN&44GC)CLf8e~Ac<;LrF z8)hpj)Q@|S6q`dkH0wn`fRaiDv`ZrY-6L-Zo-D+;C8E>jxYZ7Mt>Mffa{F@&n zG&dGE{~ytl=9VYpEzj0kh7?+dE&p4!PIK$Tc(r(~+l*z~tbf~FLfd?C+n46H zh4HrUYi$Bywa))WPgaWCSDV|{$J;m7+98U3m=#|*YegmsL+X5N3m-qh7hUIrivJBg zDd~`J=}?^LP+sp4CaHzhI{ynjDe2T{>C~I(+`isPQtUDi4zvQgOcMV`wGLUa+wT8C zPfEI7TDsjPy4}~i>54sGRz2u*m@2ONR$9;f4u8K1*~rnJV8vcxwN6-oa9Cv_5!+>y z&>LApF*OXiIo|6J^>KhBR5f>GzC^}nLpT~;#Ry|!e7Tn5X!V;+iQ$Pg2;&P%S=JhFlW3N(({*@0rq@q3|#lXK370Vnz z2B1#R%}&w{B^*7E0E57S(E)~yGZ8qzzo1C4`}3jyYBnJnjL)Y8sjx6DeB5gM6J<~D zm~JkvCTA;4G+_!WU_$oR7&m3}7kK!mWE-uYA`mZ-hkAyekcs8-G(v*l<@)YNjHmUU zj+}VD((-(L;&~DQapUEcqul2k6B3_20ja%1*gIRh>hPo)BJQZ<`1E!{4ngpQknjST z;M5-xE|n>Pgig4ZoIr_f9wwM)p=C-5=!mj9`(F8+d9@X(bWQNs_o>8* zKL;5;&m9*q;ae3R^n%aKoA>B|he+X(ImknhH!(_YPFTN*efQem@UX{u7#f5nDmBY< zh3X4u1^Q@VCA3gOTmgg$yK4)V-$=7yKl~v8`Rx`@NZa3H6!R?*3@QEhwk!uyZaqem z9IN1lc8nJqRmDs9t`x6NpLpGh*B z_Kg-vX5b&wacDB+Z;tqnZQws^v?31_i;_GPHi1+f$C5v2bf9eYAy2-&-#$sO*l@KL zm0bHaX&VLZ-40H*e!L(*8I(lWxAE@FKEeT;IqCelLs4_OFWxJMyhoGpJch9R4dRd_ zu1LbG4`G22h<((j1AnCtjm)W0gwM}KpL!+^BS8?X*~i}Vr`v*;av&*0v{E$mfE*yh z{J_hZXgz~|!@vtQ5|!>>q&=r6c79;AfqSzcGW=Pj=tQva!jL}y{^_jzG#p^TVIl7> z?*uO-iN|gSn`)aKHYTL=A(!~jlp(CW=$B~rYzh%ff#6Q$Lhg{z)oq~q)I6R={oOj< zwikDAavIs9<+@-vvzEO-AT7rcv>f}LmHh&`P#;ET>{-bFe52B;8 zVB+Bz35Uw5{_@%Ziqk`Pl>&V%t18099 zvIRqfe&bZj<@NtuS=@8h7~H{xDDnQ-m4`#;L`77^&>T^{Iamw;CvlG=D6m`=c)%aR z`S;-7J%7=Rzy9eE4d&m;C8$R_L>XMY?6HcRUa`&>Ww(Q~M6k+3D&P;a?&{x$V}CE( zuH8GfR`0R)=s8%Iw|4)>+Qa8--D2y#LF;`gYo+b$jbeXGudZ`!*PDYZ9Gk)RV_@_1 zll~9?9og)HSMQK4JG;7DAHL^mq=@Q@fBwPuR|#o%cfmcO^(q@BSN}fufZcr$ekO}% zQ?$wBhMgFecUnydU zZIb^NUGE*ub{Mez2MMtgdy744@0y9d_pZJ7DvDA>5IeS__NrBCmsY5))T&KUt6D9s z7A^J5GtTpS-}9XJ-<y5@%k8O--*X3Oa+r=EfS|UHv(M)Q#aO;?rI~}1kQu-d6 zJ1ggG{ZMG@Y%MMG9v*?j9fv7RF$C`kq=*PFO1UBhsN17H6;GneAjX%7YmPwmDe>bw z66+fLo>REeWUvHL$Wz3d;dX<%G$3GgynU*hEaePk(jd+&mYZXR?>9d!+9wLg3v65p zL1)Tv#+v_})+rcDU}EjsXdj+y?Oqp3t%f;3j{Pg`NnWAu1@=S@nWLuWGKttkzG4^H zHIQhORFdife^{!3R^?Z+)UFCuMUs8{WOlZE#T$>sZkJTiI&#-E$=@BHl#~vs-Lh49 z@4Ky!Q9Z31D6Y?@_AH6_LA$JejO|6Ic*#)b3`r2?%OkJ3uQ-BrN@9 zvPZzFQx-*H@3~JCmrQ2AqU@oq>kCPd3Ac7Fwtlyl@0UB|B7<+RRYiC*Xy$;Ik-RdL zf=&KaT|Lnpscgd@+Jf|Cs)?3t1P1&K75b-zzy?P0Mg(Pp%&`+6HK#TQ+lkM+Y(b?y z`Ox`YgCLi-e&t)=w0V*Kuw_TtenWl|+kNS(&@mIc&EQfN!D5dGzZ&{38ge@OLXiPy z2{pwh4pqS++8(&Db}0TtQqWoIc~;|FO5gyyQuMh}YS#^ticKY^B_!NS;POjG5ZLj}Qn%3CEpFFp>& z5r~!+s~Qh$!9kKVf4kcE#xY!ahN(RZZmIXq9k$=~bsS|QoMMzGzzDsWYO^MXmSP%S zDEOGE^PU{f`_~ONT#$Sy{b(mB^2>6BPj7H?jlA>A+bh1gh4P|}S$o>=Q^;9y)hX2T z+Uh(rK8d^JBC191NsL&ZT}|05&&_YQw)I!Uxz)#4<9ENFZnY!+{oy%4#}G8q!!#eS zY0bgU#ifiRD0T^-;-tZz9K7@ns}*WR#$L8b3`yWUG-rYKUJ7p=dM{P5&e}K`9Qvpf zVYU{&lg@;gFws?9CoI)eeDbRT<3#)PW45LX-&{sQ%8!&>W94f%gjs-eO(qXH%|U@_ z$Y=LLrzZj)MQ)kib$R{yIy{K-^TRruOnrQk$7w;oiSQrEgdUaYZ>137$I`haBN9lW z^4O?3iml2BKkqhFqwPk#)KWQ(pZjDv2-vNb0D;rE*=6E$u}X)#LDD1HffJKH@Aa3+cD4U2%9XL+d?iz=`F3#HK=_j zFzTg+6#cH` zH25qILZhLG0O2dJhiVMzN5^A3?O>g#Da)bV-y1>W!k3$&EB=>T5l1bT+tHVIr%&q<2jd~4Tc7V9>G#S$P=f># zFejwXDxtFmVIqIOcCG{{9BuN(>mo46ot<V1Uc3fI`7VQv6kZRJzDS1dW=D zCQaDIuT{?%x4)T>GO?np_j3(2*G)yv5CL8#6X&n)&ubxGv2auT+=0=M{shAoqXogv zuQ7~-Hc1FHK%r`2Hx8^{flohyC6qslhon~k`Lu^fY|oGk@0`Ack3$3e+`RMdqc6Gi0DJ4< zePc6oUkb1+85p4S$152#)?M5{iic#` zlD_4c9bDZlJyx&Rr?_g#&XD9>d*^}ZeVXeSJW}@kUA^+9z+DdS)z5MOc>|nCcMeI? zY5PHqx;uGRtDWFV5KP|e!eq7g79Z?YcOU4B{otJ%w-$u^8B*G)=Y&Jpy*_DFZ-)%vg2 z2p-?ASzAc%2OY;hg6bUj3ah_N)S1DnNkrq$81b<%0dPjM8=v0Vl_Xk6}1@CTf)Ru}#5!IHNI zCF^bOFH8S$e@SXRB;sc5r>#A}fU{SS$qlHl33W9C<|h8+ zzR5ZDRxN3h*|)tKW|(bDlKg6PSTJPa3I_-WFH2r4uhyTO2E9*pYO$o7gWd3a^&{_x zXpby$v>2ezA;V~D&R))cd0>f^I+yFI9+*Mfun4sW=vrC!ji=-RmGOo>?{O!oQN(b_ zQ;5w))b+H}SW}cmlDrmLgF0d^fi+#M$^IMFon=7gPpTX&(1BQsrt0iGYZu=!%@{#0 zs-#WF-3M_Hs3B96drQ+;h*9=5@LPN}OuMJ^S@!`Bz@6=^lb!ib0Jnmot3gX?Kj7OC zEE_!fT=)k{47M{S7e5k-tNOP$c)q6-z^`tSCDJUPNhKl{e-GIiv`|8U>+2AARKqW| z&4(ejY5;9Gx~GUBHNizS zU4&Zkld{CRSNK$I(qe+#cn^&3j8%uzu>?wdH8zrX<2Mkex5;iUa9BRKgog>n`s*wM zcoL*8herGJk1$4@5%SxOL(X{INI|lzv~{(ojSp^5G`4)Ps}-m?aXb>UakNSzEU;%Y zs?-p6fpBq7XW^@1QjMLE=f!(t55t~<+cXiX@c>Ho8WOJ}w2)9G+OhAKlOy)k9{u|( zSXxb}d~hYA%{lY$eczZ5ZN%@PJ8HAcH8fzf0=`E!QQ4!apG4w9gVe*MA~Yx1UgJFk zKC2{9j+#?qryJn~Pcr9i?t@akIZHOWnQD~l;^aVbrE-yMZtt^99jmLFCzCC+jzfEe z74(xJ#6T>TR8tIjM_*NzTt<%~GP#t-PX{C<7;_LVs%euAz(G{7xPCC)UOg}9aZ)q@ zPXiKr@1YpjB$_ZH4h##~d}p*VW&MeOvmiXZ$1^OPT&T5tfHs)(B?#eD3`rk`Yz;$kje!UlfwA{S+l9ag>zmPZ z&CYD*NvQW_RtE#-r$r_+q4UH++Hg^hU|$Y%xD3c7n$usZEwC&6Ht+ks< z2F!Xg5t#@|+Y}@^Q7sk~_)Ln!DuHKVZbS%SkgEy|44;@B-Xw^q(U_o;`Y4gVxlO^ zrnrt6k?rl4cgmZ89NJ>c~s5DIH5O zC*>g7N&-~gcNN!k<;u=o@K(s~Lzd!2f^neOSkC6!v+Xq-(so7HyOfeyMpxPU&yM@< zbM0pGp2vcX3BbE$+La*DB;Q7HJMcW&r!(>%8~fChg4c`{8)i_A9Ut<_M6Mwc-Z%g} z4nP+N7y;lD4H3hG2ug#fU%8YIQCXh2Lk6)F;yPu0-c-KERlHGE{KZv*ud0OBt3>`( zi7{16_&}!xs53_ixL3il#*n^8ki#T^16F|Pk1I=RA@RIo>o40W{^FyjWrjZY`z)!e z%t3pyPtaloHCusIa(AxMUS zdeD^6x+qrkgHN;%#I&0F=|yd0JBCF3p{ouJZUb$#n$G6V0}X)R%_@lm| zvC`SX8OH+V29Zcvu(au-z|h3fljjw$nxhk-vk;I5woD#MECnNkcQ!fd+Bq8IzF8De z=gG?jf8s>lZQF{-g_i7C%V*>1o|~+$GcNO5o=!9-UlS*PwiWxpFYSy=LBy#lGh!=9 z(m`>W#nfT)lm~HuXgJmI4&Dfk-E^rSn+LhV+g*d&8A{rj`rBDH+S&g8ZveNQ5cnCR0?JaR1K~gt^!Ar^!_cKnK!XaX%MSi7$QLRq#OeZYp-ei}vvx!Q)~63S1f= z#8=J;9S?ccQ1bssLGJYftRNYGd%L~U!4)L$<|0#J0IA@<315S=5ukTrr2_N`skqid z7|{M`U^Nn=jseb2Lv}rZT9|s{JNSL8ihHSbka?=E?D>9-Z#EeAnB0UZ%-E1Qd*DK$ zkzyCPG2NeS0TEk$E`1Jia{_%^^~Cc_B*DW{ID@>+(Bd6H;|h>iZp5(yV}yQW{z3y39YG2t#z zY?}|g7yt;N{#Aklb8Q~lywx6n(jE4GVa~<+LKuSzvLLT`qK7Tt6)8{;$~QSOs8IG#z*>Qj+G=3Dz^l;A9U?RU zbu_CF9`JN3eT%*>7rz@Ck1idKWqB_A)e{V#NKAK1j%H&jtw|-L_KxnOt4!FkaOC7@ z$@eQSBr8bqE1-|e3R<74jf85P-CM5G2O}}H&6N=E#~Q{Z{m`nr$T1&Vs`P3Y9x!Lka~4{urX6o z!Mvl-`>&+XxjP*ZsPH`UW2)Z=F%h!pzm z&mzf;6`9iF{oqBp)A0+Q4?9AOh6B``r(MkPY15-0-U-bP6%RSKP&>~wGtDo76X!k1 z$GwD`FNJEPcc-GZiXLvQtX^PpN2Y_qAm-5>)-x}jJX?kAen?JT8Q)m0Xk5*ifyml* zZKXbVYPTvCym~9YR(6`Okpy7LfaEWb4FHs-EEoGH*AD-zwHkC)#;i3cE=5oY#I}Ji zdeeFE*0OKc%j{Qtl*($UQnKY-tNS(vZfoc&o8D}Vrn3t6u9dnIS2X)K%_yzCS1Rkf zEo~&Hn!Ib-q%i@CJlfJG+q@Lo^3|n!{CfM!3;G7J?NB;B@HYBQX~{pHcOU$>&Q4eI zh1WY`N|1@$GASRgTX2TJslT_a63-^_Tc;*&w~n9g#MrM{*nd2DnoUWuyCAUp(0`ju zq-t|(i@kCeDgw0)+GBCp9uFJxj@d@r?hsO>nK7aSS{c?}58X%XEk5n@u21`Ty(C>m z|4?W>{PnUG`KOfPzQ(6!lCu#AHikk!67thk$)Rn_H(IK^C8$69u^b=!g_;vGXykEf zP|_SDo#k!fDLXd$!xr4Jr{m}=m1|k9Zfmh-UD8nZVIX4nUm3_hV4R|Lz7S$Y7)E%yTIkD#W*s1d|`yV6% z@Qyq9m}T;l;m#+Of1sB)pO&ATu0C-V3Rody8}K{*s+o7(+k33y;Jo(a+i}^qs;<*= z5vaNH-j0L%UhB6Dhws0ieE+LAKGZ_l3}5BUo^k9{Zc z7@dDIP(s67e<*#teDXeDov_T+BcBw7j=m{`~_9%;jx#6S=Uj4M*`ok+t~lAdYxqj;?9eGlJUQL z5`M~y{(W=z7ex89i*osuqr$-8HMaa_N~Nna_RO^$l3+SlYIoDg_099&@740#0QO7b zyZDuG*ypC#f7Tz~OgsKN6tz%c|4CvZVCqW7T-CfJs-V~koS!{gkG;F1JQsVgKh{75 zF!@S@k8EIo{x^Wj{3iZ?0Nf&zPdES<+8C^jnbgj)Y{vX2fLrh%Daii;;2s&4DaHJ2 zPJt{uH>qMc5g!vX)2=gM9*$?SIQee?*W!z1tNk;oP^#q=DjwbvDen9(WVZTd z_n!c6iPd+9H!-*WKr9g=L)^LOoIki)zRMU%zj6|b%@4O1j*||Ss)-~vGtZR%2f!`Y zeD?nXxWE0@yY7srr6h>)_L9borAMm!&x4S88SGkR(LOHkJfBt5ve^F#J^9e$I9_J2 z;53}1mAz*Gf#NIab8zsh544Bi09;r1%)aLQj*ZigQbPyXF5QjMW1&S-2kl?ckC zL=m8Ty@?degeshvucGO_3aRLbm>RikO>6(#2sJmw9~9j4?I0suI}r6U!dR7l2AQeG z=vmXQ$^7%@Sw9|B@Wlw#7C=IqBboc9HdmIqgbq)k+snzT{poiy0`)a7ajL-oNI`l! z$z`{~)xp^sG`igS?1MfM2GT2T9R_^Vy2Bj&(x1}x6uys08Yx}wcNonKY_@Pf-z&}; zs8MQ2-OY1Q`&4PXJ5FCP(&4M^G}RNWr7{*9RjYv*seowBRoPD(%*~86q%AU;$cXu^ z922E2Z9HqcEFT1R|@lI6VHIp<|^*_``z3Igv+J z=^?dlyHmo8m)*1Suibl{li8Exq(lu6Wbb0f$s?SQl!ry1P}O#FF4()pgaNm2OHWdtTiKWW@ z{)2afia|G!wyHK9P1_53)%T4la6C8dg&&D4%|OVs==e=*50qW@+__(~!ed^m@cvu<8{CsJ8(NWY_%1AeN;avm1nU{ z6F)+~!W4RWXO->FEme7BEb@>@-3cGm)AyB@Gjd~b^^#i-ah2Hognq>7`Wt=gYE0@~ ztj$k$fJQ_9o>ZbA@M{UaMXxH|!m+>A&mAH)IaMZ09&r~$L;shg#8ZWT}MNJ}XlS%t0DicaI?@TKZlQywDbV?!h8 zd=;PY0*}h8g-lhd%!JSib137f6ZT+H~LUj{oU|jt@bfPod~H??{UeG$}hirzNk>b`S~ln$FjRSU%($w zua>h@vHRge>!VR$hgd7cC&2-}uhU^Bpa)ZpbTYYC`JWkP5*5Z|y2D@TrQGRU$lFX= zF25{{NqO_<#C-HTu+Da?(HuI=nY=UScfjrIV^Ja#6oc-FV=Zzb@?AnXOtM@aULBnE_v*61Z&NxIVHpX$`7KKLeL($iwc zV*d1R7j2??)_wJs&=39FUz|G1Cuam1$Nz4$E}Id1&XYa<)&KD~)qb-W@I*ba*gkT> zta{{Y0P;2SLLnh^Ae8!hv_kkIsx+u{aX&CgI-UMf^Ww!_x^R4#-iGtKO8=;1J9f^3YK7F)dtoh!!RZarPC_BzV}Llk}^GvPJ(&Rc_pNTf(}^3M-nnw(@t> z1KsB1cD=XmYDXt!6LIV7q4qQgES6p?YX7CreQlNWhZLe%ZQA1z^D5Yy&-QKaiDVDc zT&AU0^9SKCo92J&AJ(|Gzj)>g6zZEc`W^nJQqQArbj9wcGK16?RN!3sMEK-q|irZrpE*K{Lk2cc6I0nmvm?xnh< z$an6_4@<%B9kR=1Ix}0x_t>P@be=`bi5{3*ln-nw9NkAm&jvqMwLLa6IuJ}_Ya4Zo zI*MyKDMVr)|m+hCMf5lC`4u1g2LU43ruy`J(q3o5Fa{49^S4qYuBh|1|$jwGC_T z-{R;AM)~!Bub1V6s7d*UWa<8RG5Bm(TIKQj%0G*A6}Fu;{YU9(cmKX+I>?+P-f8s_ zZNJwR-D|3RbMvKEzea96W68ooT3(lyq zM5Q^YzDlaQgMuM&@CbITq4)U9>+cE_$qJQ6Q*WSlmAD&`zK$*&k2?hz!u!$tg=>i6 zhB+sJxwHf;={?9|o==#Po76DK4jhKD5YJ94Ela*Kc@7sOk*a&#NfxRqP}!NfD@39A zl2$#F&QD?{4#Bvu+O?+KL7+t2IXnRn3HUNBNme>oA|q(mdnfKTG%q2l6!OwR?X7$> zlp4hu(IF!nola-o%{w8gK%?G$ttxXPt9%1rSnSRu7|E)Bi$INh#_#C}QN&A7WE~l? z2qwt^$Ocgl8v!*&)#BRU4jPhV({_x=sE+_bNa`bptrW{K5{XKB&C1koEx0)}qI>HS zMjfKbNB*>3D7@kR$|n7D)YY6^$rX3}P$A*gB>6GOrYGxGqq%q`;*qCphoTH6V61N% z^U1?Y9dB-6)!|JB`O<^ESf^3EC+a6Ys&}X=Kgm z7i=1-6ImA;?#=3S{Uafvli~BDTfxZei2LE4lO?4>n-6p()l_qYChtut0MvD|N*U_f zL}%BLO}s!) z(Uj^oZfZ7lisI^By)31z>O(%$n%(InDi<%C^QPa7P;`Ekbx}|sXr7ANke0ld9_ggO zHczKL&>OBHd5zK=t$BCsr2pydM4NeD`{pP@ayrm0y;^^?W=a2E>X=B$*!!BXX>+*+ zA%pqdcNy|JA4cF<^{fwSlow8ukjDnA`ppXlF6mYsZPVsFz`L6RD?5H-MUUG&rp#HHpwyZMapP!!jMX*6*^xe74-fR_5LdF z{dLXzKb^St)%%;J_qR2(!iw+jqSG$OQWCk*DllWV;3lAjaZirgW8fUo2bOxYR-!gx z;#ES@RRY=TIncozg%UMsZrx+l9Fzwwx+o>vaQ|$ME^L0Rq2qwY5ZRW{%K=t| z1FT@#@^Sd~(I!1U1VAsG8rbw9;{wbA%!^i=et_h`PVyx#yz(J|>W~}@VE~L27BFx% zf0l3-0cB5~T$|;XagaBfzo15-@bw6#zMr zgv*+k48VaqNf-?Jtds;Z*Zo$=NG|_F*Hx-Gaf%jy?r1{-lRu%A7(Q|pA94aCl8)2`+4tmR6trU77MNPeMBaNl|v-8LM1FkQtn@99g@ zOHTXEjYQHIZ0JwoB}a+eA&i27eX$^*wH*o#L^UMH@ULiG8@%y=->z$bACMTN z2dn}^gOct5?dulsxCd}Rcu-;xoXEo%&50q9^;%vL7OeAAU5mk@&XA`!wn}6vjjro; z4O>CACfqz=-`D0f8UT1N{(bCdR1N-A?PmOknXScQ;$PWPPAe!c0$+C$;fRFWi;s7p z9l)W{PLts!?dr%xvADDCxFQMiYHj4oCd2*x!00+#v|gO_4v_(vnzg7**qDUSc`n7| zB;S(BzR9JQ0N9%#3*M#UrQtt+PiFaUq`?MdP3W4=6cGgp$-X46L4*zys2bd#nm-wf^ezejG>bvjO-$<&u0w<> zxSz~*L|Amg*^pOBrb=4`0tA1qf1FyeM-#v{1nnQWX`%MY%U!$>iB+;JL!=`6w0 zUIdqZ3C_5;00;2-$c6;OyNT8txO1EYPJ1Em!EJchqL1YELdttB;MMM<&YY;67g3M| zsX6>7-%J!3j!YsCt-_oi<9>G4WT^g8t%r}T4w6$FDIek8xkU&p(nxAJ8R-ZpxJH{&6T#?f`Hfn zv>Q1nabow!st>B+q%FXIMbl$scANv{@sr%{r#%pSFZTye9$(w?JxipyCYn$C;9gxk zA10o!A|57;6oY)M*Nh8d-MD7M=XU=-#kO%z#NsUD+a2KM$D6;SqgANtu&e#mV64)SU z?0Mk!8ABjgvh5t#xnj|ZV_6Ai8$4&d44x$q;h+qGT?TU<1#`a-=J|fk$sWRccg|NB z!dL%;t32f1iyz#BA;LZ9l5l`1(L+%_usG#UQTB&-D9A$;!w+ed5NS3aaIm^(Is}ZTW)+$U4<*-5Cx?M`De-jq zz-m3A>h%}oVxh>03uB`T6QVFvEr5yWFLRYJGp%11R=>2g0Q%(@)`4h4Pq2+6*v<-U zZv=MG0z1A4O$LP9z6f)c{q3Ul`+-WhyU}ku$KUpR;hurN9r(aHfnegR(7LwY{vQFp zT3{WbM?ml;>g=~6`=em3%b*oNnAT+|{iATvMl#xiWxO~|-{D{cZ_YsM6*Z6ahMiOxW+VA_{U|2+>Spya=F{cv%6QCvPt3te%wb{7 z(NWB?)sy4o+oXzrD@1_Zz$g2IG2iZPQT(^3R_JxUyF_rDqz+);3h+rK1{8O985mQy z^KV2OaHSP@8F;s%5`zMOK_n1}kQc@Y2?XIWu%MkPu<>%dCs=0;2*FB7%l7s7oNFSB zK$VHCq5|+1i4P7^oPc1bi@;8^c{)GqW=f?W?d?DB;F~LyjQR03;-Qy8C5QlQpo95r zTo0}gj9Ks8|4=LLO<43Q-`T3s__e79lgz<%D`|BS54gftx6b`jRG5NU%T}k^)^L~n zrMG>N-Nz?ef318??`mxbz_8C(J4h%CBt62;;=}=u1wh6Ci92^qz-N*r+`&}f&j^#d zDEIb#(VnNYr%KPLup9#7r?GL}pLeNFkO_6N>s|j3_f+<5okKIvx>a`_uP2PW_|IsUp89(S*lc8kbVquYMlRo{Esgqp z%~ujJD{%buVa{{DXM!ec(0q$jI)MVP9Ww4A3rhks0zZ$jHjU8U7>@S{xoUDR=UIc3 ze*w~V4!8Y#vdXa{bSZ#u@vqM~UkooLfno^Qp{5CH!CBrMpNxFYuTLCv)<*V9eR=T6 z=7Df`koV)$?zND=Ej_#83L?E5bWd9VfwfJiufEtmZnb^=Bh0G*xbcgy@1e-3|Ld>Y zO`=Y}TaUkEzkj>e)_=$Ax7~ZY@b|?K9<|~<-=A#i!VxsdBk>Q}5f9G2kr%w=_{Ifx zrg}M;6ZgP7LLJk&T8*S|^uxoaEIE0s{yzDm;H}9uElzzaVH~RZNv&Ot%KQXDymL^R zSGe!zKE0kT1s~76f0|uv|M*sV)j3Tmyz21}@1wQ2;S`y-i6RFw8-cAY;p+i!lzO&; zOSWXTgBE8VZ9O@e|Zg=mSe zoP*=@(_ABZg;V4aESoG;bI<71Lv+48k>PFwU&VE5fXODu!^mg4OKg3fCdCD8e(g9D1xR}>dQOYH-=vw}@w(-EFsgHhd$bz`!2}*c5k0Ffa^_V{nl9^BpZg@LOcXS)$|s74hr(x2&pd@f7M_eZf;!D7(3U6MgkX#S{y>yj2~$4I@B#GkL1 z_kgCsU_h5Z9{(i1sP+8Wr%t5b3@u!?AkeGxjdGq=Rg6J*07d=>@a$7ug`VQz` z?-1FOwgfJ+U1Gi7VYkE~BC+OK^4y-cEZbt}$p_mN;ck6*L@9v?A3c1A=GC4zJla8p zdPwlN)0i~f_b^}mCH#*?!!r5esS4?}D?ebpt^8;PdE<>=Kb%Gg+x=1v{H#kFJIG46 zo@-&Ec;1C$tBB4=NJpZ!Vl4r9wERtm^N%4fQe~S(F?@8kA>ne24~I3h_}S;93d{VnWI=smf+omgUnC+dh!ZFIS(}b}}1G?>8fb@zZhLpb5*76ZJqM z2hxu_w$;qq2ZZT`tee5`5}3p4=O~>YE(u?uc$9#4R z08vGk_&6hVPuCafX2H$)hw5)HVl-S5ml0Tgm8{zyVMmrNxJ{ohs(x<(So8#cSjPLPy!iCKk~K6<(^bvu#0sUTa1k#Fyi9afN&u%;0g zAm)Zr!&Vovt(OEgURkiVam3|c-#sVDH813ay$00eIsUx%73hOwT~UtnMqn6`jn1%&?%^oJbC!jK@&%*#>dLnG568?yR=#uJhHToc1pC`^Mrw=HWkE=YPl>@a@q5 zcU{0A-oSr{fhU|zP<55h`#K&)c6+rUdpz26HHqiNrb&e>8b|TctnoUv`Ms*N|JIqJ z^51Q(S1HjOf3UZnDLQX?YEW5@xKe%8y0(RvZ-{SeZS&#rlckt9bx*!|DuU``@%iFN zj$%o?;wT#8|I`@<*lGiT{||c~`oFm~sF!W8SmoPf2$ycDb~}z+gGhQWq1&s+vtVke zEIKd$+uo-W%%xR8ASrN@r<1FeBoq8{bMj%0USUZT39IgZacfNZk;blbIpyjaw|N-v z;R>>RA08jt%6Ih--lnqZbvLiIJ;j#Yj9B_0o??p|g(oI<>`=K7U|8qzx49PvI!OQH z+;3}d`FuGI1v;7#<7r&%txY+?$Ob}?MVId!t>7S$g@09aPNy3>lf?iid`&Y^O7G7} zo@x*`3yTlZmLqSgUwzD02{VjJ+x_Eey3LR zJKPyHeWtFqr?M#DL`^!012F*RP^rmzxMuPCgPMPnP_Drex4jA8lz~evM5DMWEw^mg zB}Vd?v4+HlNcabpP62uHjyv=N5RFJjztl!d!rJsWK^bTOuerC^W*UrD+r<8iWgnde zQcBG91s5IKAq2HejR{|9SL5@mR9)CPfcK}SAq`iS)|r5aG`rsfa`g zxG8b1Jwlf=$yzhPMR`84DCyw;lT~%IL3>`#M|nS4tt6W2R6T6S(zG-Eoy}Y>RFkMS zT|P$YRAbQXEqNIAQ0lSl3az=mtcB(^SvyE6VT#>Em55Fx%fT&Gdb3%wFu{fih1LMo z7tTFid)<>ET`7jtmEjpa@y}hRK?R!4JW0Sx#wi`0Oz0$CZa;QZ?wsVjm?d&(F4osZ zAXt`=*|oIpe#UPoCez}|vQH9!4pD3&F+S%0FNx=y1JX=ojix#=k?X4aQ?Wem`8Zn) zXAQ5^Oy>@65C_xf78APnS3M z+9f+VqjdQRm25d>Q{>I|hP--8gY!*unuuBqH^w#+8RtTsx0dr~Yo2@QPP{$q#G? z(b|Vob8?difW^wHPr;p!7xgt|VqDb|4o*#sR`39I)@cf;}$^27FZ%W=eotfXts46XZ)i&N_KAQgORWS^7ER!N@Y2& z#W~g3{)sIXFI?0~XMpt+!n2=oj@17`O;nN~i4*F7?5v zSpRBd&lXgzU|MV>%;&Vd{cQ34Rel>?BAc6+06yd#-2KvmvRqA@=}_KEIvq$6G1|oR z`;}E%4MHe#^otfgX>t}ng4i$!iNmg}$8z@DFd1Md8k5u4h-wA%tC{R!ZDw;&tpzRG zo?07gFI-TaHPXVGCy;E7Ub;zVldmF=d@-^hB`~)Aa+|{@8@!T0X3t*V<}uoO5jfnf-( zj$P*VUiI~ANn@DcwB$7K8dhiMNAYmuahO-AYRu}<{b0Jnf(_e{^zU{E6|ROLnQf?g zUx zyd+ica z>L95$v8a!&S7KH;L1n8kgi9ZB2L=h?)4vG<@kUgRQCy!=^|k>8#g@Th-$W}&he7PP zNkMUbBpsv)#8slv?H|`!a|-d+HF~vB^ro{;c;>VIqo~C)3h4%|+s~$H>q|AtU5#cl zKIZ-Mi(E2jx}^1Np;e1+9bp0%Tvq=rq=($BuG40F(E&Ap$KfY8k#Cs~+Crdl*i zb9e@o;{wd)W}L7zWF#vvpk{EOk|bFba7N_+)OBzCD? z)GBIkiW;pZ#0YBdQn6~!nk^cms=Dl=s&i?z;I;@cTg>8?Bs zUb0DW4C$H~APDX~34{oUr^@4)_>Ns^S|YPeKg5&>}&t2nc*Z7K3qeexLx* zbRmVU4y+b#{wn2U2c50DdOfkq#R31o6NHrVnab z9GvHZ5}qnAM|G}zq%=7hcz!0JGt#0BxCOTiAqmXr$9(1&_`<7JK^xW_8?6T-Xtr?! z>)m8^jS$cnqKmPvAajy^d4fvO*_NJJ497?+V7{u1Q~V7SW1bo`&jsd&k%oD;qto|} zFnf=#=x5B;-)82s+mBD{JE}@^%O>tn-@9?4FDCg#L2e|9_Kgf#XUQzV0Pqg^W8D_r zfnWePGczWqBp&Omdd4PxMK ziG(;?f7e6&%Y!GwVH_wL*ns1n8=@l&9x&!SAt*(7&m4_Vt6&)y&vo<2XU2i zy;BX=m4mv&d*T(7VJ8-kNxp)V5PKg8y)9 zQgfLyr6<0ayY#ZTyq()W*=*)WSc{%F(jQi&4wBLonP?6-dTXMmmLkJxIJ%I&BAiAF^bk)*yNlk>6@5G{8sjLQP%ECgT|5&}JUfRG!*HYo zM#BKG&=yJ-GCzUn;ad5NzZOgBty3fhl!R6>^XjL~s+AnwE;)`UIVmXl+g;K?0K9o7 zKrrPVo{mgUW;3Y0iZL$O*yixN;3pNSPl0uqk|9PUHs`Ff&GXK%`?h5LY*) zbh>>Hap2FAK{rFBI)L7zYSE_*b{uxP+%v=9kxd0)HxU0gYBI0ZWZTx{{w<2Q{p3SU zO0@kPf}l75G#Qvt$7;yhU4OstiL>8gy3e&Qw9e5T53_i7pW$ zF#zxyylgBN5mYlAS^uAKq;0V;s}p3o2sWNkRq*8XvuEx}<<%kf^EzO1r9*yagt8UX zBrws!$=$`1GQ^3}ci+Cpz3ygw-O6u7f;l+W8!mmhpmPG7^9A~>iC&`A0jbxht zwf8~nS_)osNF;}JCBo5RA-o4&*BObd@;8eEjkB;+#YpYwwjNIOCE~g?`Dv1Gcg6bLr4e5kbU-g26-@StjRS6(4`7Rj`U>w8CKz7d(LRFO$eUBPk0b9d#KUU9~Vd%w>DG7zz1L zI5Gv0|NiZh`ZrMLK_+>B^%pR0!A{Q=SaS}oC0du%auu?C&5W5Ub)PDo$jS0~Xfos- zB9F5c$D1~$hnNuDIjBZtBt4xgVDB=GAYvi?v=L75=YjMblN#7zsMeUuN93?>2i;fV z!_6y*m8b|vDeQZ9FU$$nhD|4wLE?tN7F?eW)jv(BxqgqlDhu_%5Swl-L2m7TI%anQ z=|Yb6@46tt1T1x#J%5Q-g|1ijH6vZdotCDytJ7mNX{K~966i*o$00acVtO#&*YWlQ zfF~ua793^WbCn37F2P1|G8qmRyX#GV)IF)=0P#7T9D8e@3DRoRNeafGz=Er*nQo5*V>H;@vxQ z8IClbuZ(7+3^|7EcwXY9V~65NuA~h6vCj{s8+b?VwuB(eZwVL2cGg%Lc?)#AveA4W z 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 eUZ8M{nrf=cV}w^?ZQLKD^RN1NH|#RH|C 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

o1(ut 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 z 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