From d385aa2e85bbe446d3ec6a8c98c35eee16258465 Mon Sep 17 00:00:00 2001 From: Wyatt Barnes Date: Wed, 14 Sep 2022 11:36:15 -1000 Subject: [PATCH 01/16] Init web3-rpc-methods package --- packages/web3-rpc-methods/.eslintignore | 1 + packages/web3-rpc-methods/.eslintrc.js | 7 + packages/web3-rpc-methods/.gitignore | 0 packages/web3-rpc-methods/.npmignore | 1 + packages/web3-rpc-methods/.npmrc | 1 + packages/web3-rpc-methods/.prettierignore | 1 + packages/web3-rpc-methods/.prettierrc.json | 1 + packages/web3-rpc-methods/CHANGELOG.md | 36 + packages/web3-rpc-methods/README.md | 53 + .../web3-rpc-methods/assets/logo/web3js.ai | 1516 +++++++++++++++++ .../web3-rpc-methods/assets/logo/web3js.jpg | Bin 0 -> 80258 bytes .../web3-rpc-methods/assets/logo/web3js.svg | 33 + packages/web3-rpc-methods/package.json | 46 + packages/web3-rpc-methods/src/errors.ts | 16 + .../web3-rpc-methods/src/eth_rpc_methods.ts | 564 ++++++ packages/web3-rpc-methods/src/index.ts | 21 + .../web3-rpc-methods/src/net_rpc_methods.ts | 39 + .../src/personal_rpc_methods.ts | 104 ++ packages/web3-rpc-methods/src/types.ts | 16 + packages/web3-rpc-methods/test/.eslintrc.js | 7 + .../test/config/jest.config.js | 1 + .../web3-rpc-methods/test/config/setup.js | 24 + .../test/integration/jest.config.js | 33 + .../test/integration/setup.js | 24 + packages/web3-rpc-methods/test/tsconfig.json | 1 + .../test/unit/constructor.test.ts | 37 + .../web3-rpc-methods/test/unit/jest.config.js | 9 + packages/web3-rpc-methods/tsconfig.json | 1 + packages/web3-rpc-methods/tsdoc.json | 4 + 29 files changed, 2597 insertions(+) create mode 120000 packages/web3-rpc-methods/.eslintignore create mode 100644 packages/web3-rpc-methods/.eslintrc.js create mode 100644 packages/web3-rpc-methods/.gitignore create mode 120000 packages/web3-rpc-methods/.npmignore create mode 120000 packages/web3-rpc-methods/.npmrc create mode 120000 packages/web3-rpc-methods/.prettierignore create mode 120000 packages/web3-rpc-methods/.prettierrc.json create mode 100644 packages/web3-rpc-methods/CHANGELOG.md create mode 100644 packages/web3-rpc-methods/README.md create mode 100644 packages/web3-rpc-methods/assets/logo/web3js.ai create mode 100644 packages/web3-rpc-methods/assets/logo/web3js.jpg create mode 100644 packages/web3-rpc-methods/assets/logo/web3js.svg create mode 100644 packages/web3-rpc-methods/package.json create mode 100644 packages/web3-rpc-methods/src/errors.ts create mode 100644 packages/web3-rpc-methods/src/eth_rpc_methods.ts create mode 100644 packages/web3-rpc-methods/src/index.ts create mode 100644 packages/web3-rpc-methods/src/net_rpc_methods.ts create mode 100644 packages/web3-rpc-methods/src/personal_rpc_methods.ts create mode 100644 packages/web3-rpc-methods/src/types.ts create mode 100644 packages/web3-rpc-methods/test/.eslintrc.js create mode 120000 packages/web3-rpc-methods/test/config/jest.config.js create mode 100644 packages/web3-rpc-methods/test/config/setup.js create mode 100644 packages/web3-rpc-methods/test/integration/jest.config.js create mode 100644 packages/web3-rpc-methods/test/integration/setup.js create mode 120000 packages/web3-rpc-methods/test/tsconfig.json create mode 100644 packages/web3-rpc-methods/test/unit/constructor.test.ts create mode 100644 packages/web3-rpc-methods/test/unit/jest.config.js create mode 120000 packages/web3-rpc-methods/tsconfig.json create mode 100644 packages/web3-rpc-methods/tsdoc.json diff --git a/packages/web3-rpc-methods/.eslintignore b/packages/web3-rpc-methods/.eslintignore new file mode 120000 index 00000000000..94760d2888d --- /dev/null +++ b/packages/web3-rpc-methods/.eslintignore @@ -0,0 +1 @@ +../../templates/.eslintignore.tmpl \ No newline at end of file diff --git a/packages/web3-rpc-methods/.eslintrc.js b/packages/web3-rpc-methods/.eslintrc.js new file mode 100644 index 00000000000..8b7fd410b8d --- /dev/null +++ b/packages/web3-rpc-methods/.eslintrc.js @@ -0,0 +1,7 @@ +module.exports = { + extends: '../../.eslintrc.js', + parserOptions: { + project: './tsconfig.json', + tsconfigRootDir: __dirname, + }, +}; diff --git a/packages/web3-rpc-methods/.gitignore b/packages/web3-rpc-methods/.gitignore new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/web3-rpc-methods/.npmignore b/packages/web3-rpc-methods/.npmignore new file mode 120000 index 00000000000..8a0be70f3ed --- /dev/null +++ b/packages/web3-rpc-methods/.npmignore @@ -0,0 +1 @@ +../../templates/.npmignore.tmpl \ No newline at end of file diff --git a/packages/web3-rpc-methods/.npmrc b/packages/web3-rpc-methods/.npmrc new file mode 120000 index 00000000000..5cc817c4313 --- /dev/null +++ b/packages/web3-rpc-methods/.npmrc @@ -0,0 +1 @@ +../../templates/.npmrc.tmpl \ No newline at end of file diff --git a/packages/web3-rpc-methods/.prettierignore b/packages/web3-rpc-methods/.prettierignore new file mode 120000 index 00000000000..044e4a3df69 --- /dev/null +++ b/packages/web3-rpc-methods/.prettierignore @@ -0,0 +1 @@ +../../templates/.prettierignore.tmpl \ No newline at end of file diff --git a/packages/web3-rpc-methods/.prettierrc.json b/packages/web3-rpc-methods/.prettierrc.json new file mode 120000 index 00000000000..00ecd510aaf --- /dev/null +++ b/packages/web3-rpc-methods/.prettierrc.json @@ -0,0 +1 @@ +../../templates/.prettierrc.json.tmpl \ No newline at end of file diff --git a/packages/web3-rpc-methods/CHANGELOG.md b/packages/web3-rpc-methods/CHANGELOG.md new file mode 100644 index 00000000000..dc93264a3e0 --- /dev/null +++ b/packages/web3-rpc-methods/CHANGELOG.md @@ -0,0 +1,36 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + + diff --git a/packages/web3-rpc-methods/README.md b/packages/web3-rpc-methods/README.md new file mode 100644 index 00000000000..72c0ddee09e --- /dev/null +++ b/packages/web3-rpc-methods/README.md @@ -0,0 +1,53 @@ +

+ web3.js +

+ +# Web3 RPC Methods + +![ES Version](https://img.shields.io/badge/ES-2020-yellow) +![Node Version](https://img.shields.io/badge/node-14.x-green) +[![NPM Package][npm-image]][npm-url] +[![Dependency Status][deps-image]][deps-url] +[![Dev Dependency Status][deps-dev-image]][deps-dev-url] + +This is a sub-package of [web3.js][repo]. + +`web3-rpc-methods` contains RPC methods for various ETH related protocols. + +###### Get it from the NPM Registry + +```bash +yarn add web3-rpc-methods +``` + +## Getting Started + +- :writing_hand: If you have questions [submit an issue](https://github.com/ChainSafe/web3.js/issues/new) or join us on [Discord](https://discord.gg/yjyvFRP) + ![Discord](https://img.shields.io/discord/593655374469660673.svg?label=Discord&logo=discord) + +## Prerequisites + +- :gear: [NodeJS](https://nodejs.org/) (LTS/Fermium) +- :toolbox: [Yarn](https://yarnpkg.com/)/[Lerna](https://lerna.js.org/) + +## Package.json Scripts + +| Script | Description | +| ---------------- | -------------------------------------------------- | +| clean | Uses `rimraf` to remove `dist/` | +| build | Uses `tsc` to build package and dependent packages | +| lint | Uses `eslint` to lint package | +| lint:fix | Uses `eslint` to check and fix any warnings | +| format | Uses `prettier` to format the code | +| test | Uses `jest` to run unit tests | +| test:integration | Uses `jest` to run tests under `/test/integration` | +| test:unit | Uses `jest` to run tests under `/test/unit` | + +[docs]: http://web3js.readthedocs.io/en/4.0/ +[repo]: https://github.com/ethereum/web3.js +[npm-image]: https://img.shields.io/npm/v/web3-core-method.svg +[npm-url]: https://npmjs.org/packages/web3-package-tempalte +[deps-image]: https://david-dm.org/ethereum/web3.js/4.x/status.svg?path=tools/web3-package-tempalte +[deps-url]: https://david-dm.org/ethereum/web3.js/4.x?path=tools/web3-package-tempalte +[deps-dev-image]: https://david-dm.org/ethereum/web3.js/4.x/dev-status.svg?path=tools/web3-package-tempalte +[deps-dev-url]: https://david-dm.org/ethereum/web3.js/4.x?type=dev&path=tools/web3-package-tempalte diff --git a/packages/web3-rpc-methods/assets/logo/web3js.ai b/packages/web3-rpc-methods/assets/logo/web3js.ai new file mode 100644 index 00000000000..669ef50e7cd --- /dev/null +++ b/packages/web3-rpc-methods/assets/logo/web3js.ai @@ -0,0 +1,1516 @@ +%PDF-1.5 %���� +1 0 obj <>/OCGs[5 0 R 6 0 R 29 0 R 30 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream + + + + + application/pdf + + + Print + + + + + 2017-01-27T15:51:37Z + 2017-01-27T15:51:37Z + 2017-01-27T14:51:33Z + Adobe Illustrator CS6 (Macintosh) + + + + 256 + 240 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgA8AEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A7F+an5hy6Ov6F0qTjqMq VubhTvCjDYL4Ow3r2Hz2IQ8x8teevMXl+cvaXBlgdi01pMS8Tk7k0rUMfFTXCr2Xyl+Z/l/X+FvI 31DUWoPqszCjn/iuTYN8tj7YKSzDArsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs VdirsVdirsVdirsVdirsVdir5W1nUptU1a71CYkvdSvKa9gx2H0DbJIQeKtqrMwVQWZjRVG5JPYY q+ify70jzPpujKmvXrTu4BgtX+NoFp9lpDuT/k9BgKWV4FdirsVdirsVdirsVdirsVdirsVdirsV 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 + + + + + + uuid:394c157d-8cf0-f94e-8261-98ccb840e1bc + xmp.did:106820F817276811822ACF3CAA06C913 + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + uuid:1898a391-1dba-4249-9e7f-8804d46504b0 + xmp.did:FE7F11740720681183D1839CF7E6F44E + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + + + + saved + xmp.iid:FE7F11740720681183D1839CF7E6F44E + 2017-01-06T15:27:37Z + Adobe Illustrator CS6 (Macintosh) + / + + + saved + xmp.iid:106820F817276811822ACF3CAA06C913 + 2017-01-27T14:51:33Z + Adobe Illustrator CS6 (Macintosh) + / + + + + + + Document + Print + + + False + False + 1 + + 3840.000000 + 2160.000000 + Pixels + + + + Cyan + Magenta + Yellow + Black + + + + + + Default Swatch Group + 0 + + + + White + RGB + PROCESS + 255 + 255 + 255 + + + Black + RGB + PROCESS + 35 + 31 + 32 + + + CMYK Red + RGB + PROCESS + 237 + 28 + 36 + + + CMYK Yellow + RGB + PROCESS + 255 + 242 + 0 + + + CMYK Green + RGB + PROCESS + 0 + 166 + 81 + + + CMYK Cyan + RGB + PROCESS + 0 + 174 + 239 + + + CMYK Blue + RGB + PROCESS + 46 + 49 + 146 + + + CMYK Magenta + RGB + PROCESS + 236 + 0 + 140 + + + C=15 M=100 Y=90 K=10 + RGB + PROCESS + 190 + 30 + 45 + + + C=0 M=90 Y=85 K=0 + RGB + PROCESS + 239 + 65 + 54 + + + C=0 M=80 Y=95 K=0 + RGB + PROCESS + 241 + 90 + 41 + + + C=0 M=50 Y=100 K=0 + RGB + PROCESS + 247 + 148 + 30 + + + C=0 M=35 Y=85 K=0 + RGB + PROCESS + 251 + 176 + 64 + + + C=5 M=0 Y=90 K=0 + RGB + PROCESS + 249 + 237 + 50 + + + C=20 M=0 Y=100 K=0 + RGB + PROCESS + 215 + 223 + 35 + + + C=50 M=0 Y=100 K=0 + RGB + PROCESS + 141 + 198 + 63 + + + C=75 M=0 Y=100 K=0 + RGB + PROCESS + 57 + 181 + 74 + + + C=85 M=10 Y=100 K=10 + RGB + PROCESS + 0 + 148 + 68 + + + C=90 M=30 Y=95 K=30 + RGB + PROCESS + 0 + 104 + 56 + + + C=75 M=0 Y=75 K=0 + RGB + PROCESS + 43 + 182 + 115 + + + C=80 M=10 Y=45 K=0 + RGB + PROCESS + 0 + 167 + 157 + + + C=70 M=15 Y=0 K=0 + RGB + PROCESS + 39 + 170 + 225 + + + C=85 M=50 Y=0 K=0 + RGB + PROCESS + 28 + 117 + 188 + + + C=100 M=95 Y=5 K=0 + RGB + PROCESS + 43 + 57 + 144 + + + C=100 M=100 Y=25 K=25 + RGB + PROCESS + 38 + 34 + 98 + + + C=75 M=100 Y=0 K=0 + RGB + PROCESS + 102 + 45 + 145 + + + C=50 M=100 Y=0 K=0 + RGB + PROCESS + 146 + 39 + 143 + + + C=35 M=100 Y=35 K=10 + RGB + PROCESS + 158 + 31 + 99 + + + C=10 M=100 Y=50 K=0 + RGB + PROCESS + 218 + 28 + 92 + + + C=0 M=95 Y=20 K=0 + RGB + PROCESS + 238 + 42 + 123 + + + C=25 M=25 Y=40 K=0 + RGB + PROCESS + 194 + 181 + 155 + + + C=40 M=45 Y=50 K=5 + RGB + PROCESS + 155 + 133 + 121 + + + C=50 M=50 Y=60 K=25 + RGB + PROCESS + 114 + 102 + 88 + + + C=55 M=60 Y=65 K=40 + RGB + PROCESS + 89 + 74 + 66 + + + C=25 M=40 Y=65 K=0 + RGB + PROCESS + 196 + 154 + 108 + + + C=30 M=50 Y=75 K=10 + RGB + PROCESS + 169 + 124 + 80 + + + C=35 M=60 Y=80 K=25 + RGB + PROCESS + 139 + 94 + 60 + + + C=40 M=65 Y=90 K=35 + RGB + PROCESS + 117 + 76 + 41 + + + C=40 M=70 Y=100 K=50 + RGB + PROCESS + 96 + 57 + 19 + + + C=50 M=70 Y=80 K=70 + RGB + PROCESS + 60 + 36 + 21 + + + + + + Grays + 1 + + + + C=0 M=0 Y=0 K=100 + RGB + PROCESS + 35 + 31 + 32 + + + C=0 M=0 Y=0 K=90 + RGB + PROCESS + 65 + 64 + 66 + + + C=0 M=0 Y=0 K=80 + RGB + PROCESS + 88 + 89 + 91 + + + C=0 M=0 Y=0 K=70 + RGB + PROCESS + 109 + 110 + 113 + + + C=0 M=0 Y=0 K=60 + RGB + PROCESS + 128 + 130 + 133 + + + C=0 M=0 Y=0 K=50 + RGB + PROCESS + 147 + 149 + 152 + + + C=0 M=0 Y=0 K=40 + RGB + PROCESS + 167 + 169 + 172 + + + C=0 M=0 Y=0 K=30 + RGB + PROCESS + 188 + 190 + 192 + + + C=0 M=0 Y=0 K=20 + RGB + PROCESS + 209 + 211 + 212 + + + C=0 M=0 Y=0 K=10 + RGB + PROCESS + 230 + 231 + 232 + + + C=0 M=0 Y=0 K=5 + RGB + PROCESS + 241 + 242 + 242 + + + + + + Brights + 1 + + + + C=0 M=100 Y=100 K=0 + RGB + PROCESS + 237 + 28 + 36 + + + C=0 M=75 Y=100 K=0 + RGB + PROCESS + 242 + 101 + 34 + + + C=0 M=10 Y=95 K=0 + RGB + PROCESS + 255 + 222 + 23 + + + C=85 M=10 Y=100 K=0 + RGB + PROCESS + 0 + 161 + 75 + + + C=100 M=90 Y=0 K=0 + RGB + PROCESS + 33 + 64 + 154 + + + C=60 M=90 Y=0 K=0 + RGB + PROCESS + 127 + 63 + 152 + + + + + + + + + Adobe PDF library 10.01 + + + + + + + + + + + + + + + + + + + + + + + + + endstream endobj 3 0 obj <> endobj 8 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/Thumb 36 0 R/TrimBox[0.0 0.0 3840.0 2160.0]/Type/Page>> endobj 32 0 obj <>stream +H�lVI�9 ��+��TK"���cN����(�rh�4P@��A*���n�(EJ\�A*��z��/ϑ>��Lۯ-RN%7������޾�����[��+��E���L�D�����}�~Q��_�,RC��)i��%�����m�R�=�V�{uS¡,��YHz���eۓ� �Q�!��5nJ�����9�P�5�"v�[ �u�W��vU�7��nێ�,F������P��^$$5DDp�Ɂd�4ڋ�ۙ90��q��|�dDZ���� a1439�<��0}�f0{ꖐh�E#���R 5Y9$� +�z�X�]�@~�3ϋ�̬�3L�>�س���|��c�Ώ�s%��sZN�V�����u�Ac��p�����~R��c阏b^A�й><\�I��/wP��;�bJ@|��n[����fDڍ���^� �-[D@Dňށ(�TIf���йk����UE�'Gx"/�Þ!�Q�LwBq�:��p�.R�Z�[�Y���h��=j��{9����� ����A��C�I�Y��8w;vuu�-ӹ�2/;@���r� �fd��k6z�1��FM���ǯ�k׊x���]*C1�yl��DTA��œ��u&4��`�pv)�5b�Ǹ+�� ���+VEC04�,��Tp9���p���)�����1R�ِ�9���ֿm��Xѭx�h���Pxʐk�e�����&ډ�AeL�9Jl1|��)Y�|z�f*ѷ�.G�%:�o�]���~��Lj�h�(�����e�MBC�����#��\f�ch�\����ij\m���r�#�Jܢ�o�;oَ?���I� <��h];��5%�5��_�)f:���k W�5Mq\��ù�[�3��� ů +4��x_� N��Fӌ��W]�������}r��b֙x�2A�'9��� ����5��'�m +y��po��fZm�4�$1�G���|m=�o�4�����`�u�� endstream endobj 36 0 obj <>stream +8;Z]!gMI$9&4O4Loo+g]Y:Y;L9GQ$:@3.,T.n*;fRief@%Sif_3dV)Ok+/'6SR3bl +9q7Fhkme7N\oK:^?"i4k6BkiO2r#nub+]#^#o2T&%;/3"U%t=#DK/;5(hd<.rJl^nXukH^04p_5&"H=J0K1J +F,$ endstream endobj 37 0 obj [/Indexed/DeviceRGB 255 38 0 R] endobj 38 0 obj <>stream +8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 +b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` +E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn +6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( +l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 29 0 obj <> endobj 30 0 obj <> endobj 41 0 obj [/View/Design] endobj 42 0 obj <>>> endobj 39 0 obj [/View/Design] endobj 40 0 obj <>>> endobj 35 0 obj <> endobj 34 0 obj [/ICCBased 43 0 R] endobj 43 0 obj <>stream +H���yTSw�oɞ����c [���5la�QIBH�ADED���2�mtFOE�.�c��}���0��8�׎�8G�Ng�����9�w���߽����'����0 �֠�J��b�  + 2y�.-;!���K�Z� ���^�i�"L��0���-�� @8(��r�;q��7�L��y��&�Q��q�4�j���|�9�� +�V��)g�B�0�i�W��8#�8wթ��8_�٥ʨQ����Q�j@�&�A)/��g�>'K���t�;\�� ӥ$պF�ZUn����(4T�%)뫔�0C&�����Z��i���8��bx��E���B�;�����P���ӓ̹�A� om?�W= +�x������-�����[���0����}��y)7ta�����>j���T�7���@���tܛ�`q�2��ʀ��&���6�Z�L�Ą?�_��yxg)˔z���çL�U���*�u�Sk�Se�O4?׸�c����.�� ��R� ߁��-��2�5������ ��S�>ӣV����d�`r��n~��Y�&�+`��;�A4�� ���A9�=�-�t��l�`;��~p���� �Gp| ��[`L��`<� "A � YA�+��Cb(��R�,�*�T�2B-� +�ꇆ��n���Q�t�}MA�0�al������S�x ��k�&�^���>�0|>_�'��,�G!"F$H:R��!z��F�Qd?r 9�\A&�G� ��rQ ��h������E��]�a�4z�Bg�����E#H �*B=��0H�I��p�p�0MxJ$�D1��D, V���ĭ����KĻ�Y�dE�"E��I2���E�B�G��t�4MzN�����r!YK� ���?%_&�#���(��0J:EAi��Q�(�()ӔWT6U@���P+���!�~��m���D �e�Դ�!��h�Ӧh/��']B/����ҏӿ�?a0n�hF!��X���8����܌k�c&5S�����6�l��Ia�2c�K�M�A�!�E�#��ƒ�d�V��(�k��e���l ����}�}�C�q�9 +N'��)�].�u�J�r� +�� w�G� xR^���[�oƜch�g�`>b���$���*~� �:����E���b��~���,m,�-��ݖ,�Y��¬�*�6X�[ݱF�=�3�뭷Y��~dó ���t���i �z�f�6�~`{�v���.�Ng����#{�}�}��������j������c1X6���fm���;'_9 �r�:�8�q�:��˜�O:ϸ8������u��Jq���nv=���M����m����R 4 � +n�3ܣ�k�Gݯz=��[=��=�<�=GTB(�/�S�,]6*�-���W:#��7�*���e��^YDY�}U�j��AyT�`�#�D=���"�b{ų���+�ʯ:�!kJ4G�m��t�}uC�%���K7YV��fF���Y �.�=b��?S��ƕƩ�Ⱥ����y��� چ ���k�5%4��m�7�lqlio�Z�lG+�Z�z�͹��mzy��]�����?u�u�w|�"űN���wW&���e֥ﺱ*|����j��5k��yݭ���ǯg��^y�kEk�����l�D_p߶������7Dm����o꿻1m��l�{��Mś� n�L�l�<9��O�[����$�����h�՛B��������d�Ҟ@��������i�ءG���&����v��V�ǥ8��������n��R�ĩ7�������u��\�ЭD���-�������u��`�ֲK�³8���%�������y��h��Y�ѹJ�º;���.���!������ +�����z���p���g���_���X���Q���K���F���Aǿ�=ȼ�:ɹ�8ʷ�6˶�5̵�5͵�6ζ�7ϸ�9к�<Ѿ�?���D���I���N���U���\���d���l���v��ۀ�܊�ݖ�ޢ�)߯�6��D���S���c���s���� ����2��F���[���p������(��@���X���r������4���P���m��������8���W���w����)���K���m�� ���� endstream endobj 33 0 obj <> endobj 44 0 obj <> endobj 45 0 obj <>stream +%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 16.0 %%AI8_CreatorVersion: 16.0.0 %%For: (Ian Meikle) () %%Title: (Web3_70.ai) %%CreationDate: 27/01/2017 15:51 %%Canvassize: 16383 %%BoundingBox: 1170 -1782 2670 -378 %%HiResBoundingBox: 1170 -1781.6396 2670 -378.3604 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 12.0 %AI12_BuildNumber: 682 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%RGBProcessColor: 0 0 0 ([Registration]) %AI3_Cropmarks: 0 -2160 3840 0 %AI3_TemplateBox: 1920.5 -1080.5 1920.5 -1080.5 %AI3_TileBox: 1517 -1359.5 2300 -800.5 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 6 %AI9_ColorModel: 1 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 2 %AI9_OpenToView: -1717.0015 636.9985 0.3333 2078 1150 18 0 0 32 191 0 0 0 1 1 0 1 1 0 1 %AI5_OpenViewLayers: 77 %%PageOrigin:1614 -1476 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 46 0 obj <>stream +%%BoundingBox: 1170 -1782 2670 -378 %%HiResBoundingBox: 1170 -1781.6396 2670 -378.3604 %AI7_Thumbnail: 128 120 8 %%BeginData: 14636 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FFFFFFA87D7DFD7CFFA8FD0452A8FD79FFA87D527D527D527DA8FD %77FF7D525352525253525259FD76FF527D527D527D527D527D52A8AFFD72 %FF7D52527D5252527D52525259527DA8FD71FF7D527D527D527D527D527D %527DA8FD72FF52535252525352525253527DA8FD39FFCACAA1C3A0C2A0C2 %A0C3A1CACAFD2DFF7D527D527D527D527D527DA8FD37FFC3C3BBBBBABBB4 %BBB4BBBABB92BBBBBBC2C9CAFD2AFF527D5252527DFD04527DFD35FFA1C2 %98BA92BB92BB92BB98BB92BB98BB92BB92BA92BB99CAFD28FF7D527D527D %527D527D52FD33FFCAC9BBBA92BBBBBB98BBBBBB98BBBBBB98BBBBBB98BB %BBBB98BBB4C2C9FD26FF5252525352525253527DFD0CFFA87D7DFD23FFA0 %BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB92BA99 %CAFD24FF7D527D527D527D52537DFD0BFFA87D525352A8FD1FFFCABBBBBA %BBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBA %C9FD23FF5252527D5252527D52A8FD0AFFA852527D5252527DA8FD1BFFCA %C292BB98BB92BB98BB92BB98BB92BB98BB92BB92BB92BB98BB92BB98BB92 %BB98BB92BB92C2CAFD21FF7D527D527D527D5253A8FD0AFF7D527D527D52 %7D52537DFD19FFC2BBB4BB98BBBBBB98BBBBBB98BBBBBB98BBB4BB92BBB4 %BA92BBBBBB98BBBBBB98BBBBBB98BBB4BBCAFD20FF525352525253525252 %A8FD09FFA8525352525253FD05527DA8FD14FFC998BA92BB92BB92BB92BB %92BB92BB92BB92BA99C3C3CAA7C9A0BB92BB92BB92BB92BB92BB92BB92BB %92BBA8FD1FFF7D527D527D527D5259A8FD09FF7D7D527D527D527D527D52 %7D527DFD12FFC9C2B4BBBABBBBBBBABBBBBBBABBBBBBBABBB4C2C9FD08FF %C9BBBBBABBBBBBBABBBBBBBABBBBBBB4C2FD1FFF527D5252527D525252A8 %FD09FF7D527D5252527D5252527D527DA8FD10FFCF9ABA92BB98BB92BB98 %BB92BB98BB92BB92BA98C9FD0BFFCF99BB92BB98BB92BB98BB92BB98BB92 %C3CAFD1DFF7D527D527D527D52527DFD09FF527D527D527D527D527D527D %FD11FFC398BBBABB98BBBBBB98BBBBBB98BBBBBB92BBC2FD0EFFC9B4BB98 %BBBBBB98BBBBBB98BBBBBB92BBBBC2C3CFFD19FF525252535252525352A8 %FD08FFA85952525253525252535252A8FD0FFFA1BB92BB92BB92BB92BB92 %BB92BB92BB92BB92C2A8FD0FFFA1BA92BB92BB92BB92BB92BB92BB92BB92 %BB92BA92C2C3FD17FF7D527D527D527D52527EFD09FF527D527D527D527D %52537DFD0EFFCABBBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBBCAFD10FF %CFC2BABBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBABBBBC9FD15FF52 %52527D5252527D52A8FD08FFA87D5252527D5252525952FD0DFFA8C2B4BA %92BB98BB92BB98BB92BB98BB92BB92BBA0FD11FFCABB92BB98BB92BB98BB %92BB98BB92BB98BB92BB98BB92BB98BB92BBC3FD13FF7D527D527D527D52 %53A8FD09FF527D527D527D527D527DFD0CFFA87D75BBBABB98BBBBBB98BB %BBBB98BBBBBB92C3CFFD11FFC2BBBABB98BBBBBB98BBBBBB98BBBBBB98BB %BBBB98BBBBBB98BBBBBB92BBBBCAFD11FF525352525253525252A8FD08FF %A85252535252525352527DFD0BFF7D525253527698BA92BB92BB92BB92BB %92BA99CAFD11FFC999BA92BB92BB92BB92BB92BB92BB92BB92BB92BB92BB %92BB92BB92BB92BB92BB92C2CAFD0FFF7D527D527D527D5259A8FD09FF52 %7D527D527D527D52A8FD0AFFA87D527D527D537D99BBBABBBABBBBBB92C1 %C9FD11FFCAC2B4BBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABBBBBBBABB %BBBBBABBBBBBBABBBBBB92C2CAFD0EFF527D5252527D525252A8FD08FFA8 %53527D5252527D52527DFD0AFF7D527D5252527D52535299B4BB92BA98C3 %CAFD11FFC2BA92BB98BB92BB98BB92BB98BB92BB92BA92BB92BB92BA92BB %92BB98BB92BB98BB92BB98BB92BBCAFD0DFF7D527D527D527D52527DFD09 %FF527D527D527D527D52A8FD09FFA8527D527D527D527D5259527C99BBC2 %FD12FFC998BBBABB98BBBBBB98BBBBBB98BBBBBB92BBBBC9C9CFCACAC2C1 %B4BB98BBBBBB98BBBBBB98BBBBBB92BBCAFD0CFF525252535252525352A8 %FD08FFA85952525253FD04527DFD09FF59FD0452535252525352522E7DA8 %FD11FFA1BB92BB92BB92BB92BB92BB92BB92BB92BB92C2A7FD07FFCAC998 %BA92BB92BB92BB92BB92BB92BB92C1FD0CFF7D527D527D527D52527EFD09 %FF527D527D527D527D52A8FD09FF7D527D527D527D527D527D527DFD11FF %CFBBBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBBCAFD0BFFCFFD04BBBABB %BBBBBABBBBBBBABBB4C9FD0BFF5252527D5252527D52A8FD08FFA87D5252 %527DFD04527DFD09FF52595252527D5252527D527DFD10FFCAC292BA92BB %98BB92BB98BB92BB98BB92BB92BBA0FD0EFFC992BB98BB92BB98BB92BB98 %BB92BB99FD0BFF7D527D527D527D5253A8FD09FF527D527D527D527D52A8 %FD08FFA87D527D527D527D527D527DFD10FFC3BB92BBBBBB98BBBBBB98BB %BBBB98BBBBBB92C2CAFD0FFFC3BB98BBBBBB98BBBBBB98BBBBBB92C2FD0B %FF525352525253525252A8FD08FFA85252535252525352527DFD09FF5252 %52535252525352527DFD0EFFCA99BA92BB92BB92BB92BB92BB92BB92BB92 %BA99CAFD10FFA8BB92BB92BB92BB92BB92BB92BB92BA99FD0BFF7D527D52 %7D527D5259A8FD09FF527D527D527D527D52A8FD09FF7D527D527D527D52 %7D52FD0DFFCFC292BBBBBBBABBBBBBBABBBBBBBABBBBBB92BBC9FD11FFCA %C1BABBBABBBBBBBABBBBBBBABBBBBB92C9FD0BFF527D5252527D525252A8 %FD08FFA853527D5252527D52527DFD09FF5252527D5252527D527DFD0EFF %C2BB92BB98BB92BB98BB92BB98BB92BA92C3CAFD11FFC2BB92BB98BB92BB %98BB92BB98BB92BB92BBCAFD0BFF7D527D527D527D52527DFD09FF527D52 %7D527D527D52A8FD08FFA87D527D527D527D52537EFD10FFC398BBBABB98 %BBBBBB98BBBABBBCFD12FFC998BBBABB98BBBBBB98BBBBBB98BBBBBB92BB %CAFD0CFF525252535252525352A8FD08FFA85952525253FD04527DFD09FF %FD055253525252A8FD11FFCA99BA92BB92BB92BA92BBC9FD11FFA1BB92BB %92BB92BB92BB92BB92BB92BB92BB92BBA8FD0DFF7D527D527D527D52527E %FD09FF527D527D527D527D52A8FD08FFA87D527D527D527D5259A8FD13FF %C9C292FD04BBC9FD11FFCFBCBBBABBBABBBBBBBABBBBBBBABBBBBBBABBBB %CAFD0FFF5252527D5252527D52A8FD08FFA87D5252527DFD04527DFD09FF %52595252527D525252A8FD15FFC992BBC2FD11FFCAC392BA92BB98BB92BB %98BB92BB98BB92BB92BBA0FD11FF7D527D527D527D5253A8FD09FF527D52 %7D527D527D52A8FD08FFA87D527D527D527D52527DFD17FFCAFD11FFC3BB %92BBBBBB98BBBBBB98BBBBBB98BBBBBB92C2CAFD12FF7DFD045253525252 %A8FD08FFA85252535252525352527DFD09FF525252535252525352A8FD27 %FFCA99BA92BB92BB92BB92BB92BB92BB92BB92BA99CAFD14FFA8527D527D %527D5259A8FD09FF527D527D527D527D52A8FD09FF7D527D527D527D5252 %7EFD25FFCAC2B4BBBBBBBABBBBBBBABBBBBBBABBBBBBB4BBC3FD16FFA853 %5252527D525252A8FD08FFA853527D5252527D52527DFD09FF5252527D52 %52527D52A8FD24FFA0BB92BB92BB98BB92BB98BB92BB98BB92BB92C2CAFD %18FF527D527D527D52527DFD09FF527D527D527D527D52A8FD08FFA87D52 %7D527D527D5253A8FD22FFCABBBA92BBBBBB98BBBBBB98BBBBBB98BBBABB %BBCFFD1AFF7D525352525253527DA8FD07FFA85952525253FD04527DFD09 %FFFD055253525252A8FD20FFA8BB92BB92BB92BB92BB92BB92BB92BB92BB %92BBC9FD1CFFA87D527D527D527D52FD09FF527D527D527D527D52A8FD08 %FFA87D527D527D527D5259A8FD1FFFA8A8A1C2BABBBABBBBBBBABBBBBBBA %FD04BBC9FD1FFF52535252527D52527DFD07FFA87D5252527DFD04527DFD %09FF52595252527D525252A8FD1EFFA8A87DA87DA199BA92BB98BB92BB98 %BB92BBC2FD21FF7E527D527D527D5252A8FD07FF527D527D527D527D52A8 %FD08FFA87D527D527D527D52527DFD1DFFA8A87DA87EA87EA8A0BBB4BBBB %BB98BBB4C2CAFD22FFA8525253525252535252A8FD05FFA8525253525252 %5352527DFD09FF525252535252525352A8FD08FFA8A8A8FD11FFA8A87DA8 %7DA87DA87DA87DA092BB92BA99C9FD25FF7D7D527D527D527D527DA8FD04 %FFA8527D527D527D527D52A8FD09FF7D527D527D527D52527EFD09FF7EA8 %7EFD11FF7DA87DA884A87DA884A884A799BBC2FD27FFA852595252527DFD %04527DA8A8A85252527D5252527D52527DFD09FF5252527D5252527D52A8 %FD08FFA8A87DA87DA8A8FD0DFF7DA87DA87DA87DA87DA87DA87DA8CAFD29 %FF7E527D527D527D527D5259527D527D527D527D527D527D52A8FD08FFA8 %7D527D527D527D5253A8FD09FF7DA87EA87DA8A8FD0CFFA87DA87EA87DA8 %7EA87DA87DA8FD2BFFA853525352525253525252535252525352525253FD %04527DFD09FFFD055253525252A8FD08FFA8A87DA87DA87DA87DA8A8FD09 %FF7DA87DA87DA87DA87DA87DA8FD2DFFA87D527D527D527D527D527D527D %527D527D527D527D52A8FD08FFA87D527D527D527D5259A8FD09FF7DA884 %A87DA884A87DFD0AFFA87DA884A87DA884A87DA8FD2FFF7DFD04527D5252 %527D5252527D5252527DFD04527DFD09FF52595252527D525252A8FD08FF %A8A87DA87DA87DA87D84A8FD09FF7DA87DA87DA87DA87D84A8FD30FF7D53 %527D527D527D527D527D527D527D527D527D527DFD08FFA87D527D527D52 %7D52527DFD09FF7EA87DA87EA87DA87DFD09FFA8A87DA87DA87EA87DA8A8 %FD32FFFD055253525252535252525352525253525252A8FD08FF52525253 %5252525352A8FD08FFA8A87DA87DA87DA87DA8A8FD09FF7DA87DA87DA87D %A87DA8FD33FF7D52527D527D527D527D527D527D527D527D527D7DFD08FF %7D527D527D527D52527EFD09FF7EA87DA884A87DA87DFD09FFA8A87EA87D %A884A87DA8A8FD34FF7D52527D5252527D5252527D5252527DFD0452A8FD %07FF5252527D5252527D52A8FD08FFA8A87DA87DA87DA87DA8A8FD09FF7D %A87DA87DA87DA87DFD36FFA859527D527D527D527D527D527D527D527D52 %7DA8FD05FFA87D527D527D527D5253A8FD0BFF7DA87DA87EA87DFD0AFFA8 %7DA87EA87DA87EA8A8FD0DFFFD05A8A9A8FD22FFA87DFD05525352525253 %5252525352525259A8FD04FF7D525352525253525252A8FD0CFFA87E7DA8 %7D7EA8FD09FF7DA87DA87DA87DA87DA9FD0CFF7DA87D847DA87D847DA8A8 %FD21FFA85953527D527D527D527D527D527D527D52597DFFFFA8527D527D %527D527D5259A8FD0DFFA8A87DA87DFD0AFFA87DA884A87DA884A8A8FD0B %FF7DA884A87DA884A87DA87DA8A8FD22FFA87DFD0552595252527D525252 %7D5252527D5252527D5252527D525252A8FD10FF7D7DA8FD09FF7DA87DA8 %7DA87DA87DFD0BFF7E847DA87DA87DA87DA87DA87D7E7DFD24FFFD05A87D %527D527D527D527D527D527D527D527D527D527D52527DFD11FFA8FD09FF %A8A87DA87DA87EA87DA8A8FD09FFA8A87EA87DA87EA87DA87EA87DA87EA8 %7DA8A8FD26FF84FD0452535252525352525253525252535252525352A8FD %1CFF7DA87DA87DA87DA87DFD0AFFA87DA87DA87DA87DA87DA87DA87DA87D %A87DA8A8FD26FF7D52527D527D527D527D527D527D527D527D527D5259A8 %FD1BFFA8A87EA87DA884A87DA8A8FD09FFA8A884A87DA884A87DA884A87D %A884A87DA87EA87DFD26FF7D52527D5252527D5252527D5252527D525252 %5952A8FD1CFF7DA87DA87DA87DA87DFD0AFFA87DA87DA87DA87DA87DA87D %A87DA87DA87DA87DA87DA8A8FD24FF7D52527D527D527D527D527D527D52 %7D527D527DFD1DFFA87DA87EA87DA87EA8A8FD09FF7EA87DA87EA87DA87E %A87DA87EA87DA87EA87DA87EA87DA8A8FD24FF7D52525352525253525252 %5352525253525253FD1DFF7DA87DA87DA87DA87DA9FD08FFA8A87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8A8FD22FF7D7D527D %527D527D527D527D527D527D52A8FD0AFFA8FD12FFA87DA884A87DA884A8 %A8FD09FF7EA87DA884A87DA884A87DA884A87DA884A87DA884A87DA884A8 %7DA8A8FD22FF7D535252527D5252527D5252527D5253A8FD09FFA8847EFD %11FF7DA87DA87DA87DA87DFD09FFA8A87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA87DA87DA87DA87DA87DFD22FFA87D5253527D527D527D527D %5252A8FD0BFF84A87DAFFD0EFFA8A87DA87DA87EA87DA8A8FD09FF7DA87E %A87DA87EA87DA8A8FFA8A87DA87DA87EA87DA87EA87DA87EA87DA87DA8A8 %FD21FFA8525252535252525352527DFD0CFFA87DA87DA8A8FD0DFF7DA87D %A87DA87DA87DFD09FFA8A87DA87DA87DA87D847DFFFFFFA8A87D7E7DA87D %A87DA87DA87DA87DA87DA87DA8FD23FFA87D52595259527D7DFD0DFFA8A8 %7DA87DA8A8FD0BFFA8A87EA87DA884A87DA8A8FD09FF84A884A87DA884A8 %7DFD07FFA8A87DA87DA884A87DA884A87DA884A87DFD26FFA8A87DA8A8FD %0EFFA87DA87DA87D847DA8FD0AFF7DA87DA87DA87DA87DFD0AFFA87DA87D %A87DA87D84A8FD07FFA8A87DA87DA87DA87DA87DA87DA87DA8FD39FFA8A8 %7DA87DA87EA87DFD0AFFA87DA87EA87DA87EA8A8FD09FFA8A87DA87EA87D %A87DFD0BFFA8A87DA87EA87DA87EA87DA87EFD3AFF7DA87DA87DA87D7EA8 %FD09FF7DA87DA87DA87DA87DA9FD0AFF7DA87DA87DA87DA8A8FD0BFFA8A8 %7DA87DA87DA87DA87DA8FD3AFFA87DA87DA884A87DA8FD09FFA87DA884A8 %7DA884A8A8FD0AFFA87DA884A87DA87DA8FD0DFFA87DA87DA884A87DA884 %FD3AFFA8A87DA87DA87DA87DFD09FF7DA87DA87DA87DA87DFD0BFFA8847D %A87DA87DA87DFD0FFF7E847DA87DA87DA8FD3BFF7DA87EA87DA87EA8A8FD %07FFA8A87DA87DA87EA87DA8A8FD0BFF7DA87DA87EA87DA8A8FD0FFFA8A8 %7DA87EA87DFD3BFFA87DA87DA87DA87D7EA8FD07FF7DA87DA87DA87DA87D %FD0CFFA87DA87DA87DA87DA8A8FD10FFA87DA87DA8FD3BFFA8A87EA87DA8 %84A87DA8FD06FFA8A884A87DA884A87DA8A8FD0BFFA8A87DA884A87DA87D %A8A9FD11FFA8A87DFD3CFF7DA87DA87DA87DA87DA8A8FD04FFA87DA87DA8 %7DA87DA87DFD0DFF7E847DA87DA87DA87DA8A8FD11FFA8A8FD3DFF7DA87E %A87DA87EA87DA8A8FFA8FF7DA87DA87EA87DA87EA8A8FD0DFF7DA87DA87E %A87DA87DA8A8FD4FFFA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA9FD0DFFA87DA87DA87DA87DA87D7E7DA8FD4EFFA87DA87DA884A8 %7DA884A87DA884A87DA884A87DA884A8A8FD0EFFA87DA884A87DA884A87D %A87DA8A8FD4CFFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %FD0FFFA8A87DA87DA87DA87DA87DA87D7E7DFD4CFFA8A87EA87DA87EA87D %A87EA87DA87EA87DA87EA87DA8A8FD0FFFA8A87DA87EA87DA87EA87DA87E %A87DA8FD4BFF7DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DFD11FF %A87D7DA87DA87DA87DA87DA87DA87DA8A8FD4AFFA8A87DA884A87DA884A8 %7DA884A87DA884A87DA8FD12FFA8A87EA87DA884A87DA884A87DA87EA8A8 %FD4AFFA87E7DA87DA87DA87DA87DA87DA87DA87D84A8FD13FFA8A87DA87D %A87DA87DA87DA87DA87D7E7DFD4AFFA8A87DA87EA87DA87EA87DA87EA87D %A87DFD15FFA8A87DA87DA87EA87DA87EA87DA87EA8A8FD4AFFA8A87DA87D %A87DA87DA87DA87DA87DA8FD16FFA8A87DA87DA87DA87DA87DA87DA87D7D %7EFD4BFFA87DA87DA884A87DA884A87DA8A8FD18FFA87DA884A87DA884A8 %7DA884A87DA8A8FD4CFF7E847DA87DA87DA87D7EA8FD1AFFA87DA87DA87D %A87DA87DA87DA87DA8FD4DFFA8A87DA87DA87DA8A8FD1DFFA8A87DA87DA8 %7EA87DA87EA87DA8FD4FFFA8FFA8FFA8FD1FFFA8A87DA87DA87DA87DA87D %A87DFD62FFA8FD13FF7DA884A87DA884A87DA8A8FD60FFA8847DA8A8FD11 %FF7DA87DA87DA87DA87DA8FD61FF7DA87DA8A8FD11FF7DA87EA87DA87EA8 %7DFD60FFA8A87DA87DA87DA8FD0FFFA87DA87DA87DA87D7E84FD60FF7EA8 %7DA884A87DA8FD0EFFA8A87EA87DA884A87DA8FD5FFFA8A87DA87DA87DA8 %7DA8A8FD0DFF7DA87DA87DA87DA87DFD60FF7DA87EA87DA87EA87DA87DA9 %FD0BFFA87DA87EA87DA87EA8A8FD5EFFA8A87DA87DA87DA87DA87DA87DA8 %A8FD09FFA87D7DA87DA87DA87DA8FD5FFF7DA884A87DA884A87DA884A87D %A8A8FD09FF7DA884A87DA884A8A8FD5EFFA8A87DA87DA87DA87DA87DA87D %A87DA87DA8A8FD05FFA8847DA87DA87DA87DA8FD5FFF7DA87DA87EA87DA8 %7EA87DA87EA87DA87DA8A8FFFFFFA8A87DA87DA87EA87DA884FD60FF7E7E %7DA87DA87DA87DA87DA87DA87DA87D7E7DA8A8A87DA87DA87DA87DA87DA8 %FD61FFA8A87DA87DA884A87DA884A87DA884A87DA87DA87DA884A87DA884 %A87DA884FD63FFA87D847DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8 %7DA87DA87DA8FD65FFA8A87DA87EA87DA87EA87DA87EA87DA87EA87DA87E %A87DA87EA87DFD66FFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %A87DA87DA8FD69FFA8A87DA884A87DA884A87DA884A87DA884A87DA884A8 %84FD6AFFA8A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA8FD6CFFA8 %7DA87EA87DA87EA87DA87EA87DA87EA87DA8A8FD6EFF7DA87DA87DA87DA8 %7DA87DA87DA87DA87DFD70FFA8A87DA884A87DA884A87DA884A87DA9FD72 %FFA87DA87DA87DA87DA87DA87DA8A8FD74FFA8A87DA87DA87DA87DA8FD77 %FFA8FFA8A87DA8A8A8FFFFFFFF %%EndData endstream endobj 47 0 obj <>stream +%AI12_CompressedDatax��y��u'� �;���i`�2c�Eo0��ʣ�Բ-c0hP�R�c6�`��������y�VY�7�\ 4����Y~g����W_����ww��M����o��^����;���Żw?���#.���?� �MO7�1�7�����~x�s���O���������������'?�˿y�����_�~�����oj���O�?�/���~�Y�i7��7�~���?������+����Ï�y���Ç�M��߽�9�ˆ�4�=�����~ؾq��2��o��'z���͏�ݽ����������û����'|��o�7�w�z��݇�޽~�o�C�����;���^� ����>����7���w�������k��~���[����׿���|u�� �^�I����a�En?�����-/M����v����߽��oxv�* c��s�w���7w�}���Wfa �M�y�g�����O_$�fZ�WC� �bO�Ͻ�V���o�������N�d���W�b)�S�����?����O��~�����Ȥ�Ço���������<܆�������D+��ݏ�x��������;�\�������������-oB���^7M�p�����Ƿ߾}��a�0M�,��}|�MY�)�f��_q3W�-��|�ŧOw�uzhw���-��?|E/>�����;,�8"�M��z��[���̿���^����5�ݯ>�}�>����_��ݏ�������������I��7t�iy����w���A�w��7_����~��zow�q�v�Kz��i���������������}���֯�~���_^��������w|�{����߼��*}�k��v��49�߲z�=7T�zċ^��������}�?ہ˵���� ������?�a���y����w��Wq�_�;~����{���7� �7I��{ �}� �˿�ޏ�߽{�������훭l���$�������~�����+�����?�}���?����G/����["rW���|��?���߿�������{�������_����]���}�f��^ǟ���|�W�a��HM�_����~wx_���>���-1��n_C��}�o�iW��XW����G��L�4�������h7C"�k�H�~=��C�v���c��Ξ��O��ɝ=Io�w���� ����O���×�b��2�Fp8����o/�/?�~���ߪ0J ��@�eY�����j��r%5���ۺF����|8N������1�1��t�����x<������? �pJ�|O�i>-���x:�Χ�s��s<�s>��y:��3�9���2��?�U�m}G��/��?��{>��v�h����h����B���T�!��g�ic�9�I|M��L�{L��OK�ӔƔSJ1�4������=��f;<��׭����l��-q��f�p�s����̣��<�Ӽ̇�4��~���%/�2/�rX��i���4����i?�����H�{{�����a:̇�p8���t�a �F#�~3��yv:���BՆ����o�V���ʝ.�|;�i�G��=��L3<Ι�:�a�~����]�iO4n���MyJS�)T�x;�iގ�a܏�(�8�6�|�m�am��lvV��V��z���=Uz��wUg�n�o��)δ�4�3u6ЁJt�&:b{:lG:v�tC�tG:� ��[:��o�c<���i�N�m7�4w�fq��\hf�4÷sO�M������x�N�������p��]n���v�����D�f!�JDv:�DoSށ�?=>]^x�������o{oK�foS�Fi�I�U� �Rb#��D �ñ�W�������t`�C�����pޟ�X�� �i?�aOt��~���mG��D���*��D�!��K �!g�?������0 a�ĨiIo���T��p�É��-m�!�C +9�b�)�a �p�p +�pK�d�b�1���H��e� s�m~�l`"\��m�fܹ��%�� i��U�آ����m [�۾|qۊ��T�3>o�����f��y�yN4�3��g�|��܇��TG�j�왧{����c���ܘ�A[Ж��;Z��M�MX�|��y8�|�����O 1���� �g!�Jl%����۲�y�K��?i弔3���aժ��m���fg������ҕ�?�u��M��]����rd&b^N�ѵ��e�O�� �;���+�=v�P �CG����ەgWV��M����-U�;��6m7�'�"��L�4Ҷ��i�i(G��{�38�D��f�g y8vt�D��t�>\�^蘡�����! ��O/�H �N]j�q��]��/�9%h=s�I0cMhH`�J7я�!L)W�P��=C_��a��zWsd���x�3D�� �"��R +oR?� / 1ӵ��<ߐ�V��{�q��+���{��(���'i��ç>/��q��s\�>O26K���!��>�Q�Z��>�=1X����0��ʕ�=O2�H����)��l7�_�cE�/����?����Կ��{7~�ILF�~����O��Hi��;zWtP���,�#�dJ�!A��p�!-�|l���?�k�S�,���쬛�u��nv�MY/�����n�.O7PH+��ٻH�i�ތy)S�q���>��f�����7<�����=c��s�������}��V/�:i9��W�@/�f ���A5�[�QN�'@Sس�}t�c���Q �B�s{V%�L@��X��R�")��� (�_�:f��J<���P8�rPcvO���̑n¯3i"k�Gz�L�v��M�!��4���uO�'��TG`@��S>t4����D���ϑ��=@�s a@��,Y�Y��Di"B� ����#i!�t0�p�g�~�Y}�A<�T@��*�'V\�}D�V^ a��\Xq����D����}d�����]�O����YV'�G�th��v -�v�֕��^o[z�7��:��E u����Á1�3)� ������� g��93�6� m�m�SG����`l{E�Ό� ��km[o;)�6(�c�������C ����d����3扏�H7G&g��g���Ĥ�����YJ߳�~d��aj�{���C�ّ��Q?Њ�� `w������e��Ec�5~Vf��Yݣ�k���? \�՝�δ{X��;�+PN�BlfZ�H��V:�X�ϯ��$h"���{�Ue�%��+� +�yD-Xt�#��% $�� Kn$��X�/s_ ��|C� ?zjG�)g����HT3��B �igSV�����yj@����.R�zf�$��A�af�?�l�V���j��sv�#%>�XuL ��z"�;K�=K܁��o����d���\>M��7���(�C�YM^\Y��Z��65�hoQ�s��R�b���_Ңj�����ZżV�W���녻�\�%����� �UK��6UM8r�����H3%��FCكJ�G A��F���,$AL�%2|`�  ( 4��"�b�Hqf D(*`�Q +�T��,���Gf� zb���y�{��@�ak�� ����m����;������g5�Y��<Lpb�K�H�$����m�h��192P (İ�I�C �㤉:����^;�C�� +8494d[�7_���*b�}�LB+�l�;�2�} +�X� 8g��� nb.2��/ c6Ik��~G#��_ f#������F���?����>ڻ� S^ \G6p�yˌ[Ŵ%���ۣ獡��Xay?����l����-���0nɒc����1�w�������� Է�*f]E���Ft���&��C�^��j�����_:�u� ?WH-�ݥ�����V-� ���Xf-m��ܴ�j��z5t�C��pjZ���$Ԍ�س;�_m�n-�+}�jc��,�5����Za�v�+f�0��?��Geծ�_�̿��͠��xfoUՂ�%�Vb�(„Y�w 5U�:�{�h�a��e�.&�2��l�8�b�]Wܻ�h�Q�U�>v��Wlܿ�+0w�j �']EY�������y�{z�{��ݪq얩�I�>��������ꊐ�P��Z�8o�"ն�-;�9R,�1V���͗��k�����ͩKl�W��R� ��^�p .p�v}c�6k[���ڡiǪ��[��:�R6�򶨚w������3�[w8����򳃓#���ό��کL�J}P���>�d3�$c��.86���#fvW�Z�\��/�u�N��G�b�6s���j^���fs��m����i��X��(����+m����ܪ�穜�נ��w��qY�>��t�F�A��=�Ǭf� [5P����o��� Le�|�~y�tJ2�9��=-K�u�j���̆��2�J��z�^eN�1Dܕ3ma|������&���\٨m���z �&.�\> �J��T���q)��>�I "��O���q��V+�j+o��qX����Zr����k̈́wX����Ǥ�{j�� 1O�MD Ah,�Boi�� +�-�D"F`3��������ρћ��3�9�P�+TXx�̓��2s�����jf.�0��v`�%��\�PRQ�*��y��ú]���4��Ɗ�i�׶ ��>i������8^���T��&�m�`�(2v0( 9(L�ݑ�jȧ�G�#�����ҩ*j�\��4�j�ipq���e HZ�����.N� d��:H|Ҙ���9�-���N��?*�l^^�����~��W����[�Z�߯~*�Y�P�֎^$�E�!���"h�>{ө��iD�،j;����K���טC��X5�nG_Ա{� +�^�v�0�Ε �S��թ2�Nj}��?ؗ�ض%�O�m�M�ۍ��]nEl���l&��/��i�Kh$�u�Pvv)젒��V��Z��`��VWQ�+��F�p�$Ε�S >���U���]�?Wş��S >E��ԥ�Ԉ;��37��c#�D�mui}��u�vj�Z�����_���5-�l�*4��0�����J{1�͗��ם�)�f���q��;ea�|ϻ���9�;�`c~b�\�l���S�8O^x��ߑ����;�݂g����?!���`�I4���HGfFI��_�ٴ7�y�jas ���-*��~�Im*�f�Ü�e�"Ζ�1��[~��x\�0��M&J��81V��Yd�k�p���� ���:��(�s9�rʩ���D�;�q�H�H��8���&�Y{}��f�4ӌp���f`�VX �f о �؝m��72�8@[c>��*��K��?B�a�J��� R��9}Dѝ�Fw6�9�C����{�8�sw� �Z� +��T���Ⱦ�|a�A�P�),��B ��P uT��� 8�y��6�ܺ��m���s�ǹ��ō�t[�n+��[�߅�®����^t�ʩ������"�+��2�A3\�j~ �%'����u��X��Yξ,�DFw���ш��١u/s�2�!�uL1L��U�1��v �DfΣ�A��yV�f`"�^���,Xq��vX|�jO����y ��X���<�9�u�S�[��9h��&Z''<���͟l��˧�=�g��U̝W���{gk�4���.�fZ,^P +�uE�.�d���R��j���h���m�����Q��U� � ��u��,�Oo����SZ����StX,S���[�g�q�Y�I�5�$�$~7q�CO�2���; =����<�~褚Ѹ�.�%��hw�L�*�f}�iƖy��2��ļ�ļ�ļ�ļ�ļ�ļ�ļ�ļ�ļ�ļ�ļ�ļ�ļ��<���_bb^bb�S���ݽr ����MF�� +{a��I�w�}���(}a���[�Q���mN��jP���}4s�͢)��d3�]Ҭ~�a�`�S<#u<��~{f�`���?�;��8��f��&T��l 6�u���z_����0a�Y���T"y�*��8`�/����l�R�#c��^�"MX���xi{��dw���������rK0��*ykWf ����S뱊����U�aY V�t%�_M�*��\��GI��U��KEk�qU�8v*y���l�yTxS��v{���&�Yw��Q3�!M�+'�J����5��ह2W�2ݥ_�!���ӷ��5_�� �Ԅ�����ƭ- hh k˜aQ@�;�k�8Z'�k 46ߚ��u��k�MxM ���6�� ��b�U�5uXM�A��6��4뒍�`��Ln$ȫ�[���֩imq��Y��h����SV�)���"0� JY����(m���*�� ;IM�Ic�F�xI�č��!MxǶKM#G^���iZI��==�ko����6���� GN�y�o7\;��A��T�n��U�r�|,L�X�@u�'dd>��bau��IC�ͭRF:�yR�w^ծ���d�u�4� +{hi�ŊT���8@C�OS�y��MDz�C��WBU��-u+T�� iT��k�m8e��<�� +�/A�M��ђsf=bȉ�DP��[�?H�m�j[�gx��+���z= ��$@�4�f�i�p�ɚ W2isd�D�%��m�� ݊{�K,;�%�c�N�5L%â}�)�W%~�E'� ÝY�b9����lX���A�X��U�g�4 < ��(�8Ah��u��g�Np�*�����I�Y�2(���>1O)���p�K�ړ�S�f���RXΜh��c�W681�h�E��g�OǶ�LD�ӡ#��C��ʨ�6�u\�`�߬��<�=�wl���%A�K���E/ �^�$(zIP����%A�K���E/ �^�$(zʟ��$(zIP����%A�K���E/ �^�$(zIP����7To�4���[e���(��JQ�7=����X��7��VS箱������*�����b�fϝXY�ظW��A�Ɠ�YY�I]���_�����:���g�Z�j�<6Q�Zb�x �����Fj���^��k� ���Ԡx�_�X�42>�M�i���#���Rh�R)��<�雨3�A1�Uf�z��[$�Hdc1���N-��m�����qV�kT�K�U� g)l.y�o�O����H]=o���„�\|�$�1s��!, ��C� {T 4m +Y���S��NhK������f��Y��0Кqv�,ym��*�k�k���z��2x[�=����s���y��tm�AW��$�xiK�R�$�ǁ��Q}n����4�$ �������gp� +p�$k]�Rٞ��^p��L��u�V�`y�X�'�*@n�(��B�A����?�U��0�l�>J��� _�})��5�c �Ck�8���W�Q���l˥Z�I�d&��*� +s\i �3���Zkp��sK�Zo�Ådy=�ƭ��Q+�m��W�Qk�U���W��+���hx]�{�q��4�{�i�y��@�sB_B��;��9 �,>��+PB��4‹���l ����J�kch��Etk�׽�����a;�ָ]a^�n��WV�]ۭ3�'��� i�u߬k*�k�W�����@�+z�*?���W�H�:�1�n8ϙk��� iO�o3��ٺds@���'�ssߋ�:[��Yu�VY�x��8�n����Ӵ�Ͱe������Ju ݆����X��]*�]�5>Zg��2�kX%�*��a�5�3kQ�;����Ʊ�U����{U;�.V���Uڡ���b���蘏�+ku����ٵ��B���%]�\y|v�.�����d��I&�%-�\�K�=( +��;�SX��&]�?��q��O�k7gS(;�,E�� �F���1��Q���5��S+�]�c��cN�i���+�����vA��g闌ho��]�_��EV���(\��� �:�Ա�9��f�>�J�Ҷβʣ�����5�*'EF��d�u���%�l.�S������)�쯺��솵��&Xp�awE�l���!��!#��1Z�Z�Ze�6�����{U���Y��^WY�G�,E]� ^���{c\�w��������{��n�:|x����c�#��'�y����3xš����Lz�'��6r�c�l:c�J:4j� X��.{�� 6�!�C8$a��%��酬V��K�p�>v���~�X�*ҙ��6ѷ���?U�n�S�꠹�u�ڹn:�Y��e�sc�-^i�ZW~����v񧻼��?�HS�� �ϒ��/��rf%��&Y�V� +��z]�u��#�N��3KG0vz�M^y��&y�/� ���hGF�ĝX����ȝªX6֡eM5%K�^R��j�v -��s�����^�c���]�9�����Q��2��Y�E��Q}�KO���KҊ~v�Dt�z#�zn-zKM����U������Aע��n3�����Ukѓ�ۇ���12��D�۟�F����J;tM��h�V�6.^TNz�U�;�������]�ŗ�k�/mݗ?���_T�u��:O���m3%ne��|�u����KX��݆+Q��V�|��N�C���Uɷ���V�|��[E=���8 b�oh�Qƣ�z��^��<� +z\��.k|l����.�~tW��<�mV �^�� �_i�vfqb:��霞��,t>3�́���J�����g\������w�C���(�U�|�\��M���Q�Эt���5ƍ�!PA-��e5v� �6��b�Yq�W�����A3!�z��Y�V�z���:�aY �4.�5*+ylV�|���n�VE�]d_�T�m;m�+%�8$�iݕ$(�/m]�� Z���{�N��:,�~�m����@G?r~�����)���$Z�`�=�6 ���ᇎ��Е!"��' +a/����3f��8���d��8��<�}G��D��0�Ý6�_���O�*����� +qӢ���E��"�4E�M��4<: 6?�R�e���R��Vs�4��^����Z"��@��H}�8~V�����@�%�B$�L]+�yJͼR�z�:y���,@� +�1h�PI>��<<��˶� .�0��8��k��}�y��/i��ьk�$�t�&�\��t'1�i�G�8���$/n�0S��Ǎ�����������Ow�;�{����d7���^����X����>�@l��1�E�@X���kۖ�=m垒X�6]�6j�b]ݶ P;\x�^���U4��hE�9=o��z���j���B����t ��i�9�7]<��_V0[/���º��:��=+۩��-n��UWzXWh�|�U��Ηy�x�u}&O�q�>SE�]�k +��u�*W����r�K�����u�6k���~_�����Яkl�J��:t-e%���*��/jmuiUl끵,���'Z1� ��;nbL��g>����V��?��ׯ�V��^Ẏm�2ӓr�uW-vYI�����}���$��X2�T��m��"2���X������m9kF��f� l�֌2l�þ���Xd�b�(;X�F0�H]��K��ć6q����[M���p�1�ϯ�r��a�Y+vu.����'����kM�����h�=O>Ng� M�ǥ����=m-�Zk�}~^��YV�JJ�=~ -3���\�f��S�����L�jv�s"e5�:�D +�i9�c��) 2HEd�! y�+\+��S�s��� U���qt�����W߾������^U�]�����o���W�?}��������޾���T>�i7��&�Դ�����./�fX����|C�X�������;��G�q����O����~�_t����w������}#��`�����}GW/޴���� ���6/6Ͽ��~������ͧ�޿��������Çw�����������>|��@Z/��׿y����_߽�������7��_�K��h�2 $� +l�(q�)�½����!��v��U��H�����L@DZ(��9�� �#��'�t7L�~�B���t3��;�s��2�'�bc���(Ceo�J -��BS��`r�lu��a�}�F�15� }�<ѕ���|Dm(Z<��pÉ�1�t^��h{�~��~��I��ђ'�י��z����H��&��6��]�Q�2A �{2�q �i�t�qn�2�D�'��2���pb�73�laf��:BW�E�1����W䕘Z��$Ѡ>�؜S@_��5bx>֑�P�q$:�4Z:AP�4��~����>�Ow�8 �L�#���$��'&�jؑ3�:�w��@盤 +���[��U���DD^�GM�D�2н�2S��h!";d��E<�أ��H��fz�)�o��u�]#��<�t���ޏ�J��3��+Z�y�����~:h$[���~�a�$y$�����Y����~V�{�����x؇���J����N��~}���?��������w?9�a"�o~���w�+��<��𻻯��X���|��O�1��� ����O��7���q����~�/����?�Ŀ�c����ج}Y��h(�.Q�<ѯI�#@B��N��`yw��NlnZ:�DB��Ǟ�4�x�*�caJi7ұͨ�Ir�8� ~��q\z���Lć�?/��3CD��Y9���# �xѭ���$q:���h�-[t�t;1�� ;����e7�_zj�n���t_bL��1���:7ج�4�T�<�⧉lD�&�U�3��� ��n"�����)"4tP~��L�Uy�����7�XC��F�'��-��_.�'o��q�K�R�^iD�hSQ��i���O%�=��4�Ԕ(���F�'@��fX���ct$3��e��&��h�,?Dm����0�L`e��8��z7���v!�b ��0?���. 3 +��P�ݒ�O#[����S�O",�va���cvQ�7Z���q�7�+⻖����O>~R�e�m@�O� ��˅�v��i��L�C�S�DJ���<�B���!�I�2���='$���0.$��O�l��4�B��L;�8n�� �!C�‡�,kC�)|6�s�y��c��;LxjF�U*��z�����[�4U�B����o\zZ'���q�Vw�8 �X.D����K2*)��Ә4�LAgP�I�0��JEp��v}�� S̑� s/3 �� R5�F��h�Co��P��qO/sG{}�b��"����Y$9�D#{.͊r�H�v�C�� +�Ɉ��"R`�"�/�#s��8O+�����³$4SN�E��6 K�D�0?=ޅ��,�,����JL}h�����X����"9>�y��BI"s��?ϐljM��!��N�ȋ�f����� � &���� }�%�����/0y�D��ԅ��g�]�����N�+���e� { �/@��#����Lo t�\���%���=1>�����~�_��dH�#Qqj��j�~��ÿ��9�Pf�k`u�f��:ݞ:��2.�ܣ����S=mB[D|f��k�L�EF�l��e[���.�S��d�˪��q�i�=Y]������g���P:���Q� $���Bj��~i�Sk�~-����{���gb/Щ씓x#���� �jLE*21����Ȯ�d���)䱡K�6�Sr�0�'N�� z'�٩!��+o3J�����)�w�R� 0��,g,�pC_N�_F�e'aj�2��YH����D��q��������ۧ�aJXǙv�q�L�Y�Vֆ-܏LZ +�#tv��� !���_�٭_4� as3����X��1�z��c��g%C�54�;�|E𝁴�F`���9Ww������!m�4�qq� �"F0�2)+cU0��,�A��n�c�a�L�0 ӘZ���3�Y���kM���U�Wəăn��4��z8���mż�j��&��#Eb0�8�e:���C/]�� �?�q��q=�w�����c����J�'"�j=�'�p�K0Ch�45j0��H�++��4ud\bj�� Ĭ���e J��1F��t�03�C������&2B?���_��� \�����"��z��N8�uͨ�Dr�9��`�@�hK��k8�"�`�G��fӓ�� �>�uCà�r2:C��qZP�=��CO�򅠨����)�K�}%M��Ĕ$PG`����L�m%͉7zO\�黽�H6��o���A����#��Wf;�����'ve*�d?�S�w�j���F�������@|y6t�p%b���43��7�l�z��I]���.��/d�D6,;�a�Ȗ�oÁ��i�ěu���,6�~ږ�w�m(�r��{@�=臝�$��1��b�=��i�����4�s='�3t>�C�\b�����/�� ���G*ȫ�f *� ��h����:���YgLj��@��� �� F%���������9�=�&�Co��ƶ`N���,+z�bl�&�8$��K�9/a��P�s�y�m���9?h� s?��c��a ���v�����/pn9/yv�ʪҢC5ދ=Ǣ��������������}*s�a�������Gh�.x�+&�`���a1���A�tHx {կ��7bj%"� ޤ.Z�ql�df�+k�&�lϠ� P&��[L��YcE��* ����=X�Ɏ�]0�w9�'� ӆ�-E\�+�����R-� kX&�Dy;�x�+(.�DW��aҺs)����̕0�R�f8��i� �bR=.�̅\�'�cMG U�F +|��h�ܸ�B�ֵ��}h$C�: �p�E����IF�Q�LLE�%��Pפ0Ա7U���C̓k:� �չ��V�8���z�TSe� ���}e���F �^���t4H�M5e�bi�:k�0��I˕\6����0h$��EpU��s��~�w�� #%�J"���H�� ���p�\����Y��]E s��q���+ؒ��jq�"Ф3v�F��� ��t�}��ʕ��媏͠�2~ChV��0�M��<>_5�jp�M��I�<�85���TYnî|K8ĵ�:���s��7�#j�fu��7�cs���k���|~����xas$V��[�G=����@�1�X���á5�)��Q'�U��9��P:Gi�"�k4��ކ�:$�$�Qc%�-7��h'��QSp �yDZ����8(��ܽb�α ]w��|���w&�`�3R����g�n=p�]��L�\5a��./�M��+�����F��T�LuU%7ƸP�6�Fxr�N�Ϭ?.�+Q-��%Ʉ:74�����F>t��ˑn�rY� `�D�V2\ݐ�­����r.+�����b��n��|�B��ݞ��nv4}� ��2����,�����A]Iqci�̸I�t7��Z��Jyr��Xn�u5�M����cW�ܨl������f���]�t[w���I�u�b67����k5xk���̣`�c*5H�LE�z�)�<�8� ������KVku�n�A�`���2���H���C �D�x� �g�_Y0M\&a1mL,-C�S�c�7� Rc$�.�RJO��7,���7� �a�}�`Ae* ,*SV�Jej |��7|�W�F�|1 �*�mpإ�^ו��>+�{�C�����������J_{��p������Th������F|�2+� Q����^ �~ E�}���g���l�r  L���.�����٧6.�����ƋO|���N �3�̋��ګIT��_]ʿ!f��A]�5�Y��ǯ��ޘ.�W�� 1����N{�}�Kߴ�c0�gb=��gc/}�����f�� !5$N�ǩ�L�G(�v��d/�# +G���_�Wc��ȏ;\b'��7�MIG�ʨKyeM����>�Q��_��`Gqe���b� l��AE�� �;� 9(w�I,���Է�i�����!���>�Yf-$��O�~V��BV{�t`+V-�Yh���-\.hmp1�Y���g��9|{� ���s��TC/a�xMO������Azh�p#��$��:�O��� >�(�̬�A x%*p�vypP�\^�#�:� �1lB^ ����`� �Y�s������K���cG���܋��r E�yWBӾq���`l�G�����J\�l���$u���/t�ͼ�Avu��ϳ�����#! �Zf�{��|�3@�Gl_� ����v!�m�p���N��z� H�뻼�n��hH yQ�� ��y��a1�a��O�U�2`MI]Md��2���M+ ��l�'u �r�~�e��a0��\�`��7�>촲%h���v�%�,yN�ׂ�Ⱥa +m"��5%����r���ҍ��e~�lL~�l�v�o+֦�j��r���,D�f�[�Bp�� ��t!^��(�]S��m�Kz���o6 �V�%(`�R�C��W��%�j�D7*!"�����?��F��̡�����C g�[8�1�����J����Hl��ۤz���U7U&5x�pd��6h���.Nd!E�r5P;�3Ũ� 6r�%�v�� �n �#���j��iL>���Ǩ�l����臄'��3Yp&�q��`�"����1�p +A�'�N���a�����8O��F2Gq�`� &G��#H8�"�?8Ѵ|�|Ҡ%8^�l6�X�c����`�[8��E~_�nϰ��Ƽ^P#΍����\f��fY웯�w���,���=0r��-4�OA�dvO��Og����xE,�&�b�/y?�@���>�?��$��m�Gi�4u�g��C��9q�9I9�Y3��~��K�˵v�Or`,pd��E��~b�o�8p��bb)�~�9��)��C�$1!��^�]ѧ<8��,��z��!Y���0��,�w��  ���^|i�JM�%kZ{�W������ ��ꕽj:0]a����3��B ����2�|f_-�,�ڃL_=�pe �O>b��wG�Z¶+��i��tD����&`LA�2b�}���0V�H�]-���r�]�l�}��ʬj��Y�ه�aT�V�+��o?��'" ^�MQ���ӾӶX�m�2~ۭ�w������s�'���r�l ����>���]��6a�⇯}����Ow߀,5dhqr�@�`yd�c�l���1�H� +@�W� �R�#�=��v�:���$,A�ӡ���]�D���!e�ֵ ��J� 0�̆Kr�������� ���i ����4@��OM�@4;� -�ύ#�X��f ���1��]y,�O��]����y�u��u[{��ʣ%�\�GI/�C�)�p�Q�6x%��Y��!S�j�=��P�����^ͯh���k� �}���t�X����HWГ�4N�`����p�Γ�X,�_��O���0�NUf8�I���� p��[S�Ӓ���^���R���i����;Dԩy�E�� ,5^ȊB��j\��l�y.�o�ypV�Mjhe�vxj�9p���!��5�y�¦\R���Am-5 ~<�&5'��:�y����S���O�<��<����Y�-5f,�ѧЛ~�f�9�Y�%恳�Mbx�K�3�%#�*1�@ +���ub��0Y��<� ����{!��7�y�~8y^�t����r)���m�T52��i��+S�\��1Y�0h��sd�Ls��2�^e���B� �c�&C��82^���V#|zhPd2���ܖX�l�����#�#��a���9��E��4d��#xR���_ �/�vo�6P��T!8�3k�� �����\�/F�W��z��j�� +#\|π�<���"�W;��]Zt$�Hb� d�������_:x>\�/i�s�u����UF&�1W���MN���Jf�L~�K��[�H�dq� ��F_G{�] +%^�5����:��i&1ҁ�2=�U��P��HV�M� wŗ1[�xX�F�Y[�f�!�Z ���| 5"f�Ct�AǴ@�@r!�.ꋙ&�fh�!�(K�Qä +J4���M�'� >fΐĽ^�膏��0ÙH�iK�3x�X�4dO[���Ȝڨj'�| bɒ��g�C +M7:g<�B�A֙!X08� ��&f*{+[h9��e� >G�^P��cP��v�}3'TQ��.����H]p��`�7�2���{�lV�·�26���ۿ��f�X� �*�f�Z'����Z���/ M�������J ؒ�$ �$X2^�:�+��|�| +`� ��)u0c�`�x�3�I�8�I�*�|�X.�D ��f���p��tLe%kI'p��j`i) 1�R'���;����Vˁ9B�J� @� N���3L��m��y7��١J��A��ZflL�:��� +-I�f�ciD�%Ь�����$����Z�P�}թM�����'�8F��0d���*� +���X��V��Mǂ� +��-��y��م�bQKS��|k����ay����q�Ԓ� �U�h��r�|5EB e m�B���/��u�!*�����K�p�=� 6A�����v�GB̄��Pqx8�F�=�����]a��y����S>w��]j� �l��Ҭ=ő\���->_l�1 ��q��Q��U���ƹ��t�%�e�Y�BA ����|�2�v��rМ�eI�Uގ9���T���G��S۔X��U-o��$�)��P �o0��QE� ��31k3|�dx�,n�' ��^��#����I#��v2�os�-|�4x09©4�@9�J�I��{#��!b^'�Yf�l5�a��[��S�h�N��L�tb�*p.�A5��!}I17@^��=��Yp��J�h�u�i2�����7�b��F� �Ӆ�@=_I��+ ^������@�8%zPwWd�[�cm�z����&��o��G; %8RLC���#-��y0��&`S�n��ԣ�q�z��T7J#<�ԈHIt����s���cV�^YT�Ѵ&���E�]��B>�X[����4؃v�N7��F�=�ɽ� �PE;��c�/��l��_vn�q���,��^-��ѣ��z䵳�&B۹qu�2l����TQ��U�7񠺠BD���8�1��J�^�Z���?F�BRnﲔ�廴��*�5�&�y����Z�\HuVd��Ո�ns��-f.7�Z-^���p7љ�F�w{� �nt�� �����EW2��z�[*u�홦Ԙ�ӵ7�V���N]}r�kXn�m�07ֺ���\S���ۨ}�6S�|���-�mѮ�{��Ů]���\F\��A0�1 ��-�D�G͡�ہ��������v8�NS�2�2��ZW)�V����1x`h;�,U�]�D�C�N4XB.Y|X4g%�����ҏA$��:�����2�:��� 7e �)�U�?eR &�7�ק�| �*+m�ե�^��~%� �u��H { Дpc�$�+����# GN����A3Z*���{�C��M[��,�Eye�$� ����[��|��i+�ؤ�)5�L�}$?����bsy�& ���+UF�r�2πqD��-;M��b�d�u��>z�j��o^6��F�%����* 5�$4��P�f�R�t��=�Go��O!�>�%��(�G�X&��B��ώe/k�h���(���^(�J`��J`�-�CKM��6w�),�詬��5�:Sn� թ��T�����~V�BV*�X%��N�vQ�������P��@�Yy���@�X_�$%�<�榉L�pa���̿ QY����ens���X.<)�4-]�h��9�.�o�s�@C�L���/���L2�*`�%�a�Ŷ�$���Z��UI�_��)} R�}'~�Sd\�gF�L��@ iy�M"85y3�x W ��ʬ��"!�j�|���4p�,kN/�������?\z���*Ʌ];D�� ry�wd F� �D$e`��� ޒ������2�$Ŧ�Ҩ�I�ӭ�qXZ��@��������mi`ʖ�L1e��e|�Y�߅���7k��Ʒ��d�޻��Ѽ���Jϙ��Nc�u~h}�`�D9h&� �O�_�9� +:i�v�����'���.(抬��$���5#���%{�K��� +�$���4M��$0+L�$��J)zb�$��J�a��fNc�����^�c��FTea�mv��d �C�40])U�r>�&�U�h���4D��U� ȩ2X�� ��$���WFe�6�AK���$r����p��>K����T�R�.�� ���g{�.�9��Җ��4}A��R�֩��,eB��U(�X�_(sai�l �n�Z�|(�o�!� +Y����u�����>��/�<�;u���|��}�6�i[�g�w�Ϙ��ff�� +�sf��>����9�L�IyM�Mw% �*���GUOw�E�l���&���R[�� +�,.���X��,,��j��~��]�QK�z��q��h���?"�-�J>q&V�w�SU���]e��]Az�T0��j��{��b�� +r�_�w��H�����W�B�K�+��9o�'���#5�,��f���3^�<�U�+���*]��{Z�+NdzId@���$�Jxu��j;Y԰HA�:��2����ݫ4����Z�f�Z'��~y@JJڹ��9?כ)r�|dƅ�#�$`�]C!�ٙ�V�E!�[4��� �S�؃���)9� ���G�@$%b���59������Ұ��+�9���p$U��fr��(�z����/���G���4���j�D���1�dJ��L�I-�[�ա������ժ����*�DZs�����]q��q"���C���M?L*y��!�jZ5���5̥fOD����Zm��tH����9�{���v�ZOZL(��F�JVo(���,QX�f*�Ъ���y�o{��'[�� hO�B+��/f�B-�� ��*/E��ͩUh��� +.Vʼn4Nb��T�=E�}��'�*�6ם��Qxe�JZ_*b���Z��G{PKUa�v���� �dU���U�_&>AJc�"^>�R)1�g�+7G�T,��[���.ŏk2�5��Z�2�FQJ����F�J�f�b^ṡv^ ک��v�Y�J�֋O;!���N���uCԽܵ��� �+g;�����o���?��`��//��<΋7�Ћ�;��B��V��x�~�0�qi�]\�~�j���Kw���72��_wY�J�o\���hW�w�+�7��W�/�YzʼZ}#�yQ{��K��x�kic�ؤJ��\�dU ���P� �K�,t=�p�u3����md�d��mMv�}=*d�|��'���ó +:&�CW����@���C��^ �`<�o +B��9g�S"��ʎ赪��g���HH}��������nő!CW�@ +8L��$!��ԪS@���]��C��Ԫo�d�T��c չ"-��Fa,��Z �3,�)����H��� N��j,c �ئ�欉%]%��M��3N�s#`�� a�3t�1��F ���bHr!!�HR@�JP4G�o4K�^�Y�^�T� �L�9w̨��H�b� sn�ȹ�!���?T���T# �,a�i�Ȯ�|�?����qB��A�Q��ad'�P����;�s��i���*)�'�^��*��1K�����ǭL^4��L/�*�7_��ܭL�m�;�L��mEdUC�d�I�bإ� 2`�w��x�h4s�uڶc���l��m�&�l�%��xp�ퟐ(#kP@� b�+������`�ʡ�r|.�-��Ы�eG���9N�ӱ�a��~��;\]8e�R�R:��L$2����'!���h0&��((��4&�V#��9#�i��N���C{�$�A����eY�Ѥ>Hr�h���& �6:?i� �?s�2c�D�;`�2q\�Ye� ���ec� �k�Ơ���5&�8tf� +��+o��PP�S���1+��(e-]$�����Ĕr�ę���M�4�]�@�G�#�_�c8/�����]KXB��Ԇ�ʇ�d�nN:��$@\�\ +�$ń1���Y�D��У� ����.�&؏�L�MH+�B� �����~c�hBq�J�¿ δ�%ϔ � �]Ƞ$�Wq\�C��z�IY� �i��$�E���y��\�TP�F� +��IU7��L�L%I0x�(j� mj�5<:�!���n�%,Xҏde)�8�I��)U &L&�x�1�9�4���%|��L�(�d�����(��h��Uq_���L���Y,0%����b����a���~�ijc�/�~(dž ����>��D���ƕ픃�l2Q���4�:���'��mL�O����b_g !�0-Ś����)$P�RzQ?2��5p"��D��+� ����a8 ��ڈ��ˡ"�ɞ� +��}�x_�J��r��f�O�D�W2��3�(�M�aQ͔*`����/��^�:^�$���9�M�./��e�b��eo�j���O��Bڈ�nIu�����9�I��/�r�Z��v]Mqp�θ���7&�j�F�F�r㴫Zn�6m̭܍���pW��`� +��E�ܧ��[�]�tK~�����5��`Jn�����<�\i�A0�1��Vf�V�G�ztE}\�:pKQ�'�� n�J��Z �Z�������0"� x� �Q�� �gMc�E��� +oL,,C�2d���7PI�� �җ�.�ϼi�f0N��{ؒ�j�P���ʴ�S�^��| ��Q-_Q�ʪ@v�[�W���] ��R Nþ{���'�G� H(��8��ƓK� �@3⦐E��B�>� � �#h/��z������cx�$:e7�]��j������p���6�kY��YqF�� NY�U�fl��CGOm�~e�[X�ڸM����������5|uB�&-�ɵ�`%�A�� �,:{AvB���>|�k��o^v��n�% @r8�����|������l;�Oi�5��_M\����x"�7�c[���'�t������Be`vW�����^���'NP�k..��0��2��S]Y���T��Q,=�}ߛ�����ø�cN +�h�ox" �d���?��Z}� 5Xm��R8����nUv��]�3g����Q�سhƼ���s��D���"F�$��B�7o#kӃj3�0�l�pRa��gvZ�9hz�2x����OP�"P;�Y�gV��:��ۀ�c��?��Q."������/�-�� +��Ѧ�9�8�40.�, ^���q���0Sݕwl߈��A6.8߰k���S�����}"2���׹BW������ ����}�-���V N�֬#�81�-7B�8,�w����8l��� ����b�0s���R���qq��z�Ϟ�t.������<\�,��Z�)s�9��2_��y���j�DǨ�Q� +!N�=�l%�1�+ڊ3Z:I�o�c/&W�9T�z��O�������T��˶*|�l�I����t�W}��h^�HVΙ�ݎc����T��m�U(@=��R��jb+T�N��:q�/���DD�w +=�-�A3/h�M:����c��������^))�A�(��߿��?b6���>lY�/{�A�ٓ�V�#�9�s'��� �@L�' �%@ ��!�s� xo�A]6z (� }���Ϩ���,���݁Lh`_pHdT4 �����HR�>�c'�g�c\�gSM�c +�9�g�I�'qW(���^=a)����T�4���˹/�}H<V$F>��7[�,Ilôr��� �� $6`�y#�ٳ+Pu��LZ�6rNԓ� +�/DQ�%��"g��� �F�~���8vO*�nۭ:&D���q�V���DGQ�|GʝC�� �6��}��R�KeY��\~ �LN��>J���^P4����,Wj�:�����e�nbJ�l�� +�>�Zzt�Mbb3��l�d�M�_@%٧Vg����t�tӨ3l���4����,�,2XY�˚���_&�H��~ �_�̑ � +1��4���B�(`��;���T(�솳����c�3餏V�LD=v��)�����~��2����`e�Ʊ�[!,sl�y�Ȓ�m�)JO�y�7�&+#��XFo��J��>��}���f��%[���*]K���i@� ��B��"1��]zx� B�u��{D���m V^:��m��-�N6X�o>��7�7�ָN�j�n>Ku���>��;Fa�Z���^�t,<�g�\��uΌ�q�#ֈ���_�y�>��ȹ|���s�uq���9I�Y�3}2��ɟ�9�EC�̀��be? ~�2Rѐ���]H�t�Hq�R�p>yR}e��Q��E�[�sDN����=���?���'��hIZB�J����{o׳;r�����> 0�����3kǙq�A �HbAC���t2�dY��}x�룪��RK�O&}"��6�<|�bժ�q_�O��|��l��y??˾�`����7%�ۨ��C�]�*��~T��,��l���8��3i��u.�E�Y��۾��Y���b�9j@"b�!>a��q�Q5�цi ���9�N������Ŵs��o�i�}�8�pܲ�ô�*' HN;��lR����m}ځS!���v���y�Q�Ӯħ�S3�YG��jg��$��f�n���Y��4�䩧{�6�C�<_���O��I��f���r�N���%~����~yohq�Ȋ���9���o�f�?�����7�����������IZ��,DC�^z{���IͪH�Q��Y����݃�J{S��e�_M��X-�������ߪ5tT����V�D��|�Y�� +��Y��Ҿ��r+���U�u8T9w:Z�Dm�W�9Z�Fi+kʾ__�-\�������K��Y�@�M� +gJT�h�g�\]]�V�B��Dr�&p��,ɷ��tChĔ@m�R�B̘�T�Wh��ϸ�c7ڎd� +� @p��������͗�ܨ����k.�j��lb4�}i_Z�c#�A� �D�P��'-2�CMY[�Ь��d��'?aA���@B�h�P��!_�l=���C�����C�������Fq�I�ڽU�|�������6� ;B���ھ�$U@v?xk�����c*+�R�.���4�ۙK���!h��iM�&�C/N� 3���eAa1�)��`�Ō�$��$�2������B M + ��{j�Nܛ� + "���'���n�%��E���u��  oM�4O��6/V�2���?��m��>�5*���O1���+y�F�!�e<����#�z<�N�"�K�]���#�׬��|QY���V�X��/��`k�;O���$�8��E�Ҽl�8�%v��@�����֒��$� �!j��I����Q�M�E��U��jL��ax�*��Vc�� �jL���\�U�"u�q5��!s5�k��1����q)F-E����^���Xt�6-ŬF5�X���&Q�K1�ojd��b��گm-&} +Sk1Gح�b�i6K�#8j,�X�K۬pZ��!�g�a-�L{>���� �G�Z��+u�kqQЄ{�k1��v��Z�*i�>��ŅJ�K+�����Y�%(�k�c���~3=���RV�3�psb)�|�U�|��{Ow:��� �(���l�۴�� k��W�O~?�`!a�q�����/H1u�X��϶���N��g��IJ�q1n���Ĩ/�M��c�17�-ͼ7�� +�b�˚2�/�t��˸�#���P}1VW��#�Ÿ"֮�����b1n�~�_�Ř&6 c�b�D]׾�_MK�"�d�&�\�yO��dz;����+��j�V���:K[��2˱�Q��<��1�� q�������1����|=nT�����F�&�c��؉���C7kZ� �H1�cz΄l���`��C�17�R �ӌ%��X���1����ϟ�r��+)Q9%�IneTN�3�FT��N�b���=.�r*;rfN��Tu*!W�����Q�k��P�9˱��_��G�19�9��T��N�`���$l"&ǧ��p��1$�tP"&��+��3&Ǘ/��5����H�19S�Y��\e�_J�<&���P#(ǥ�ѽ�����j�ž|���dd�`���������z^�I������]mz|�#0��#2�=�����p� t GA�� 뿈�w� �~��g�߮g�b����cn +���6 +������j��[}�w�����i 2� +�b���^M�[�*z����v�C�����%!�����Z�A~êL���iw�I��rw������Z<�=mo �Kd0���R�y��[�e�����E�TRIe��Ny���r��J��VT�˕�����7'���,G�]��oń:U3�\��}/��[��� �[1���'����No���-@���-))m^�1�ӗ�7E�MKM �9�������k�IH^���8�Y�t3Z:X�,�kʇ��.��d�V����uBCCN�j�=GT��q��c҄ ���r���n����,��IG^�\vNښ�)D��� +;�}���)5��ޕe5� ~%��U��޼D�����d_Y���X"?|@�6�5�����푲���PBދ��U?���>/��+����.��T��-^�ׂS�� }pg�"��!lP�%�� Ӌ� +�ŧ�m��@��|�iN�}v����9 �\@l�3�m + +u��%E�p(!�P����^�}���y�-A��D������BU+Iq�7���D=�$��1��y��p�ٯ�^�m"-���~�7ǭ�-�-R�-����}�@���s���h���D��t�QF����W�W�Ɣ%(��会M'�%PNzu�׬*�A�@e�XLI��x^" e��NЈ� +XW��x�����z���;#��;�u���%lƒ��:n7͆���m�6��F�cGd�VZ�/��X���6i!��-���i'�C�g̯5�x���v�kM K܇U4���&KTs1���K(�#T���lr�UUosĹ8Y�m�Z�B��E����)�w�9u%�R��~ý�ZlfX�r���^�4D�N�؄pY{�=U�eY�����Wd�Q���;v�Rr���ʣrN�p�;/k��gQA���� <�k� +�2�{�x��q8<��S<6='����6�� �� +��2�[gQ�9����oX\��3eA�fS���`�P�}`�Mp$K1��k�q�v0 g�vU�����ċ�nl&�c���qc��_-*i/J���К�>+A;�f$�.��韔�� Ӛ�Eh�ǖWN.���~a���hT�k��ݺ?�8��ME���u���{���$ʺ<�V��?p.�msP ;؞cgGA��3�ю6C�R@yN�u=� +�Z^�M!>�-���� �Z5�Q�H�ITb�/�TM/��Cw;^^�����_p>��?a�h���q���n��sNA�]!�i�)�L�3�9����y ��&H�8ߑS�NH΋8���ɹ���w�m�c9�.*�b�� ��Z���Y�ay�9��pqr��m�dS.$vk����UM�Y�K��ܯU�xUI�����K8���%�!��U�!���.�1������eN��ƅ>����y/�e��7^��Z��͚�]���XJ����Ik�=�Dk�5R��\��n���8z5f��<�?�l�p�S�v��u���5���&�i?�d��é}��*&Ǵ^�Y�X�Iw#�\�)7N�0�yX�iVE2�t�uZ�&�����:�tA�әg�������X�&��-ۇ��;�i�A���܍(G 0w,���O;^��Wn��\��/7I6S� 7S̖�|�%@@D?��E��Q筛hZ�c�'��9��l��M��~\l+��S���z2)*�:mQ��%�[Y%=y����h5�b[lW[M8�@)=��`�ၶ{A{u,�!�}e믜%��Y�6G� h���&�6#V_cIKھ���JP6�s&c];�k�`~A�^1�_��Ԟ3y0ۢ���I���r:,x�}�z��gV �� ]+>k��Y-�)�L����f�wދ���k��k��oP��eA��[���n*���|���[����]�?Z���gE��ⵋgz8�?����R�Y ���~}��{e2�a�*b;����i1?�����'h��\���*��a��_�I���-�հU��i��C}ٍ� Qu)��(S��ّ��Q23}2嫥��cC� �)�fm.Wn +I +wQ�/�kӭ$�,�7O^@���V%��-P��P?p����!��:��b�Ol+�3_^��{�w4< +�"�3x��[��#�zk�b����^�J����͝��e?s��t3>�oJj��s�B7���r���^:!5f /��%ƪr���}_ų��!�^ +����M�����q�UH�v�f�aS�ty]�>�7�<��R)�o0��� ل��\�(6� �{�|���z.�ٷ�L��ڶ�w�L��`b�2��Ծ��nH{���Wv�<���,-'cs/�ζ�.:8sEw7��K�9 +��~S=��a����]��vK[�.i +a�d8$��4��M�!��<�c/�c�0}[�"��/n�q���Y��n�l��-�Y�ؾ�ʀ��� +�q+ܢ�<�̺ +-=���t�{1n���G�ַ�td��޷��������2dd��PBFX��X� C��V����[�z�B3"`�9#���+���8�L��~\T�gEХgg>N�A�� �Q*5iĄ�݈�Q޴1���m�����PUNcH�?�}�g�wu ���x��}CnYH����g7���eєq(lRF��_uٹ�ޤ��P�q�ShU�?����$@5��~�eW��{r*���w��F�_Z֯����W�8(>)� ־�w{ ���l�@�M��^�;w�9G|�m�|��m>�[� ?��Ƭ�z�]߫�`��LW�b��&yX\{~��7~�q0|r0��)�o��H���oWQ�0K����"BN/j��7}[y���K�g��j����|�M��qB�ז�������;�>= ⵤV@��o'+ +��F��D��� +��8���s����~�#J���k��P�C|8�� ՘D�a��G�~㏳�S>�]��\��p;^�`�U�_��$�>=rn��[(�YP�Z���!���'���f��0�����X����J���)��� q!pK�`;���|��G���~��������\l��Lk��D���] ��J'},J�k��T;��-�Y�yX���|I���w)�,߶��|+�_�ooލ|���D0�ל0��礒�('��Y�$��<�y���y1��{�|ϱ?9�N�{DwpZ���`���� M�Ϗ"�?�����B>��e y��e y�����-[ȳ�-[ȳ�-[ȧ~�l!�~�l!�ݲ�<��޿��@>��ey��ey��e���� ��� ����Sϛu�g�[v�g+[v�Oo�A>�}���S�[v�g�[v�g�[v�O-o�B�[ޢ����E���-���-���-�S�[��g�[��G���A~��k����C^mu�b�W#�e�]�W�]�W Ⱥ��*��K^�ai�ϐW[#�cA5�W[)l����jT��g��e��m�WC�S�ؐW[O�wNy5>[/��h�j�t�5>j?}��G W���Dkȃ����j�K}5����N}�u�e�뫭�O���ؙ���{Aڽ+����\J�AΫM�5���E֨ -[��= +>��s��M`o�� ~J�=�.�f��C`�S +g/y��?�����OWX��?y6�j SN��e��|���6�,'$����ϫF��[��A���'��E���KLŌ�%�bFJ��iFJ����Bb*'$���������(%�b:� +S�t�S1��TNG)15MG)1��Q����kL��Qט���kL�|�5����kL�|�5�b��"S�|�U�b>�*S1u��q>�2S1u�����c�Ϝ��,Ǯ�hT��"S5��{G>�L���4��A��1E�����jaF��զ������iM2�_��?�C^ +F��F����&#��'m�����:��ߵuBg�� ��^���)�����N��wi�P���:��?K��~�� ��.�*���N��wi��J�!�*���N��wi�P��b^�=I��~J��~j������*����2���3=�4����?$�����Ӣ4�U?��ֽ�)}���|½w�����{�=���|j��L�:��>�����c�ta�?�C�r��&�;����455bjhES$l�99�>��-���_z:JX*�]]���&+�I��Q7�,��𵧟,๵�k{�� BzWvb4�l�e.� ʢq�v=IO������nm���v���I�ߪy�F�xPyet^Y��_�ꂲF_�����2�lEv �@�١ ��.?p=�g������4S�ey9�4�VO�[��i i}ce�� yt�h�]��[����>!��,iz�=!�~��ą�tUI ��R��w�M�j�/�㹤�V�d]M��`%��^��0��R���%�u*�� 7i'�� �b���쳬Ͻ��Չ�,�E�Z*���jY����_��l�x4�� X��� ��VI�K�ş��l�=��&�d�^��j&�bBaQ���5{�qj%��R��^ �$�.>�[����bVͫ ���US �{������ر^ޏuOD�N��ITS���b;��3%��n�i��D�MJq_�n���l�2�X�l�l�rF5p��;V#(�����Y��Ta��{(�����=�j�sְ$4v\�3�{��ֹ|]&ġ+i��P�Wc�%�\ҝ���+�O��(+/k9��H������� _��^4?��䀝���������$wf������=��gh �՜Z �DN�0����m�,��pwH�6�r�MR&~�Zm�CY���n4��&|�޼�^4���T��^�Eq��'�����f��*HH�u1?X;_ � +H�R|V���#����� YW�̂�������`��D��,���`�*��F����H�Y��NF�~�yٍՙ_g�³܎��j�yMwY��ۉ�u�X��f���@,(�l;L���~�Wn�YhsVWJ��͂K�شƅ�íj���^I����޾��'Ǒ�6�����Lߙּ6fW�����5X����1B�~���e�����w)6��O�^�}��S*��V����KM!�zk ́qϙv��ZD<��v5��1��1�1{m���C�+����W�N���ͦ�*��8�@�۶Ҫ�ڰ�������i�����b�$�h2�9W��T�ل�@�������&mU�>y�Twn�ǶG�O1��+n�d�{A��4���̔S���1;#���y�\% f�5���� ���Ǫ��H������(VP�B���e�����J��_�Tt�cգbL��\���kV���i�]]�=����KvZ��=���Z?�G�_L���K�N��B�H|�2�/iM7������Z�ғ�T�7��qu3:|w���B��������SK��*B���3�m��Vz��k-��I[�T�'ot%����D�w�_K2�z���t��Q�6�~w���E�&w;��p�/�xݺ�NrZ$�wvZ��m�=�l�{Y�ʰ�@-R-�����ŶD��e޼찳���� uyBF� ̀ǼU:њ;*J_)۶�7�t‡m���رy;B�=�w�&�f��A�Sd�Qn+����H�e�p�YE�L�K*�#��+���b����t��rv��2i��T � %u0�lV;F}��$�$7n,�.sT���u�h;7� ���S���"1��2��Z�b������@(���Alg��� ?�}X��ݿXm��592Z�|ͣhs۴���x���7WP����Ze��ΐ�c5N�G_�j�����P;�`a����0M��}��`p���ܳ�� �ڼ��_������f?G�ŴȄ�D ��7ұb����n�;`�%��H' ˆ�rh]�P< OuǷ�!�����o�{_�� ���fò�*% +ʾ���Xm�ܣm���Or������c������,5 V�p�U���� A���Q� +��Qro��3S���}sbK@��*�b�� ��]�� G*�����ٯ21wt�f#1�2��j�����E�]�~ŕ޶�Up����+��y޿0�`|�Y���}������'�v�~O�s� ���P}�e1�V���c�������/ +���?�w����h�y�h���F���ؑ�6��عS74��MAk�*|���-!�vN�����;PU\y�h��g�3�я�XG���Lߙּ�����8��+=Z��Et�vE�g���w?bH� E�i~���O<�V}TD|k<�,be}FLm�{�q���Ǜ^����{�!�x�"p8��]�� ��8���g<3'��y�<���i��j�Ie�i+����Qۜ3���dF���4��9�f,9��9O3wƦs~��u��Ε���+J��s����{_�+T��c �P���eH?�� ��53���Y��{����a��0�y��D�c�"O���ȥ|�2�,��M�o��y��M�|P?.rF������E�{p���^^�fo0�^�k��Xz��C��Wa�~����z����a�~��hP��4ʛ�a�|Hc�)�e���� ֻ����Q��{��x���CG�/`-�s��ι*[�<�z�.�E�n��G���QԹ+��r,���:���CL�,M~m�U(��°�`������_6�޿��!�Iu �����o�Q���P�} �]��MˮC�r|�˺�'����om�J�k��� �e3�L���'���ڏ~�_{���/���H��H@iC�G�p�D���k�mF�{��(�3����I�<�t���/;���3���(�9�c|j��柼 ��+�i���~� �g&𗐜;��o'�Ž^C!�s˥C��`8�^��A����aޡ��^��/��VG�J�I���~���p\�������qx�vԪ5g��VaV��ֶ&Q�j�?�J3�x��T��c��l׈�����&y�ɹ�ȃ尢���EYg!� ��ѱUy(2ʫ�n���D;����� �`i܌Q�t��٬�@U1��U~��ZV��Y��@��b��v(�0>�uF�ڦsᒼ�#v�Pq?n��L������l���+C�YE�y��<���'QIAފ���t���3���C<����Ec"��k3�)I<��~|��rb����1� �bܞd��Qٰ�hTNtoN�'�sK%I��N����bu��%@qњ�L���TW� +Ne���BF���*|�,��EpI������ +W�ڧ`���="�Ce��`QuuAt���m����w[���?��u�����1$7]Z������Hzr���sL���F���O�.õ8����ޡ�O��t�yT-�4l( +� Kp1��j݆�sJ�w30��/&�o7� +��^�T ƣј�ͭ��R�3��=|��� ��{��_u�xH�콼��@2�#�??�'Ь�׮Tlq���"�ns�.�q �S$����99�аYѰ�r�߱{%Gp���.oȾ�3�$L���,�_�N�}CU���毇�y��'�{{D?�c�~_�o|@���~T�O#���{G}l��M�c8<������N/�DE�w�A�KFC�l�鲫>���%V��C̸fS@�%��M�J��ha'��_4�҅�x j8�|$ڳ����fK|nK� �7�� ヨ=�����o��u���闎����HN�0T�m�ց�Y ot��{Zo��{G�j��|X��.��������YG�.��;��&�viR�5/��V���3��xo[��v;�&�� i8���h#�[kO`�8pH�>��/��&|�����b����c,/,�a^|��Gƨ�{��>�W?����Q�����3z���l|Ϧc����w���{R����o~�����_��W������o���4!uٍ��<���¢q�п��7����_��?����W?���/����_���u�������Ύ�kjE��>�ᄍ'����_��?� ��}ϐ����_�����Շ���?��k����>�W�|��_��_��:�g_���|��/�����/����~�8������������������7�O����/�{4��o����{ ���}���?�?�K���?���>��s������������(����W�������/�d���_��7�t��ſ��������?��_�d�os���� ^³���Ȣ��/�����~bR3��ަ֟������m����ſ���?�/~a��m���tm��7}�њW���>m�>�?�%���ӟ��y�X��3������~��$/�n':t�Ė �^g� w��:�f��J�6��|{a��M)1�k�F�oݨy5�M��{�" ��K�"�4r� �e�3�� S��Ad�;CV+�#R�2:�H��*�D�=��b*,���E����y����� ���0����s;�V�D��H�[�j�kJ�ņ�Bg�L�ע��߸Đ�4-.|�����WE����; �^�����`�eJm���|��1b/��{�#�3+�B��R�],JM� �s�(��"����J�-Vןr�0u �BX����UϺ&�Ү���rD wJ}�u�s�o�������$`K��@�׭�� ��Qh�`�5U��ݻ���2A��ޙ�xV��US|T+�; D���2=��;#$�G���%�$���^�7����4��U��֕�x��nC��t�J�� G-Q຺l���T� H�z����t��r����W�ê�6%��H������+�fi� ��y|ӻ�[h�/�ld�/!�{�U��_��U3���v��w��&����u8Ԝ$7� �ý�4��.j� %���k�= �mՠ��(B�>G�j7,J(�Yn�u�ItN�JM�K-4�tD�[L�h��x��PL@��M�F3�Ӕi��C�� +��^ق�t����ٽ暠e@Q�-���� ��3s�^,*·� �w�䪁_-����p�g�<��SG�Q�4l޸k��񾏋�8~�|T�$*M�#i]G/7�5��W�#�3���EN��A ����/*�K��j����F�>��]��,z����[|�LE��%i�h�8:ST�)H�~X��(���u�S�g�,�|�uQ�^�1B<��)?t�w�̯{ ��^�e��j!?B��5��J���<�f����C�L;�l��*'pZ�~c�7헿���yS7���x�z�7"����v��TH�z}��7����OBn��� ]� xNu1��Mz������ +%� +��n�2�2�O.\d����p:S��0B������[�E�U�Ê��4Z�W�ߵ�;���(�֬'n�6p�b+ͦ��{�P�s) �؉&�9Z:70�r����}��| �Hӷ����ՉR�_�����Z�0"��Wkc�Kf��MJ$�$���R��G��!^2�4�l�f4 v���| K�n=�20.QԽ�l�O�����F�����9:�0h��s�oe��v;zOd�7Z�Φ5P :{K��V�d�1YZ>� �>XR���0.�T�� y�����v)"�A�!�۝G�ݶn��x��@�S���x����X>\��{d�ڝ��Z�nq�����BY<��F�3=�e��Z��IIܶ�2�W� +I�Fކ�l6g�����V�[*�n� ����`؛t+���˜ �Ѽe�J��o�e�=��[kGH� +�������zX�u��g��F< �z��_�G]� �ꐏ�f�1��������/Ei���|�A��O�Nk�+�s]� +_]R���&%Jk7������O�tH�7}�V��|+�[C�m�� ˣ����ݰ���G_D͗!{�l�V���D Y�HK>�]��86<�ֺ�3��Py\�N32E0h@�N���W��t�|#��'������0 +�VT ��0�ovi|���dg'��E��4u�0�p��b�oD��>�� ��w˝�Na^X���FW��4K����LB �%q 3��.�&�'6Ķp��IT6^[�����/������~��J�d��c0]��J���[\檩��N�m��7���G�X|g|W�x +"�U.x�i���N/��%�8nm�*m���}�u)����H��a��C��H���ujj�4�( ��Ŏ�fPl�h�Y�%@j�/�5���|�P(s�4 �R������5�p��m�ܸ�Խq��j��NW==�Q6�� k ����d�����@�~���xY$��ܗ��U^L�KmQp,o���x�μ\�� �y��(%��>t�1��-�{7e��u�6��yϰ��D=@�K/ƪ ������UB�E��Q�w��Z�;�6j۳.+t�`�%�5P��?���#j�,�����A� G,7�4�\�f��/��&5�U����v;��y ೕb���Wmr�S̶.!ӼY�,�?�OAK��W���`J�-��fW>"�Y���Zf�,�_ڣ-�[������nS��nY$�D���$KD���ӟ>o�oP�u�c��Vt�c��{���]����!��e>�Q*|��w�ai�[�д��_����Um�͕�CZ>z��40�8.YU��#���"��P��A^F}Ud��M҉ʊ40�(>!I��j5L�6Y�m2��Q(���EZ��!�R������(�C�"�6����\�Ė�OS�Q�Dg�a’������z��EN�Rb���p�=ަ��h�R;�D�~� +ķJ�G�JUQӏ����"���e�U����%�CI9�>kK8e �8�l�nޑA��E4Icg�RnfU��, +B�@ę�_#�L{c����r�L��;U��c�=� �g:� +�pQD���A�̰�R?Z��n직��I���氓<��QOk=). �LQ2Nk�3��SH*���a95���ğS�'V��Z�H� �|��4ܰ�Y��X���� ��uf5���rY��� ���Ҁ�C�i����5���ڊ�b-�,~�(j�P%����S�+e�=�k�&�j�m����2�o��t�(]�W�Yj��rX3���E��l���.S�$�<[�Z����q��� )b�8���ҝУ�5nq]+Y�gٷ�aȱd�C�J����[1PY�s��LQ�^1��z%$���n���R�y����D\�ӈ�a�$��GH]qy\-F J>Շ��z���O��������1ڑj�K�-�D�Z�6�v��_q+7�a��hȱ=�u𭟄N!"]*@�>�W¦�n�:mz�z���$j�Az`�(�C�3��[��ʿJ���'i�h���LX�w�-J�ř��)G��\LH������,��++�P��F,z3Eqx֖��]���D��X�-/Z9V;S?��)�h���шv�hE"H��ȶ�.NOo�ޭ�,��ÔH�O)\�l +r��e���GwLg��q�U�`��WI3�,��njU�i�����e��}�C�"��&L����u�e) �j���P����� �3*Ӹ|�m_Y,�'����TX���a^tA���ZcT���2�ڌ����8��OTJ��/)�;�����Y��� �ן������PTnW�8�GIW2�(lm��v8{�~V�W�1\�g�!��lϼ����^���:�`��b F��Q��\*�d�Lg�i���/��,��N< +�� ��$�j{srSW���b�4.�x�(5����$��J��󉥳A")�Ǎ�lŒ>u��+�i�5�)�k���*RmS��TQ�ך�#;">��� +0釯d�SjU�9E����MzS�y��C��Y-}l̛rq�lӷY�����,Z��k����ų6\�)πZ$R��5A~�EY*0�?ŷv�}��{��XӔ��z �#���e�R�V��0�I�Z7����(̭��JL��1>\��cmWV���U��D��#�`�K�ˠO�Abd���og���UN|7AZ��z����N��e&-LPB���- �&���Vz�q.fT��uZ�V �L �,��$�Z�j=l��+��X��>I\$g]l9&=�^)�1�n��(�RuY)��`�(�ݽ��T�Ԕ3<��k�D�2a���2�VHy/*1q\�n����WO�81�bJ�!�L�s9!{����7:7k#�7���gj��W8(�ǿ2�J�yi�&��jF�Z���F�Wq�R�sU$���*`�]M;J��;�ߨ�#\#���� ��j��|&��Fgwq��Z�FZ�����*��Ĕ����$��7�r��e�������ꓳ4��Z]Qv�.G��%�6+UE ?�%:�����\�h8K +���l��,I�z�/�̔�zt�����a=v��R �J>�0� MR觊�, x_�jҶַ��rȈ(3\�|���d��� �Q줚�{P�8׶�F���pV v�l�#��ekÊ�%e4옘/��1�jӌ�rE�BT�nV>� �5�R':� +)K���l��F�t�`"Rl%��l�ee]q�B0��u<t�@ ��3L�. \�f�Z�3�^K*ద"�]\J'�� �O+�*���qߧӨSJC<�_�{x�� DQ��D����$�UI��V�b;")b\�K\�F;m�A�.���y��0M��X܇�1ժ�3�i���4|rP�I�^�*��b_����[8C�m��PlU��/�p$��R��&^UtK9�i�7Ͽ� �DhVT:�8 W���<0o�a�R;�8rg��Kw�Z�x����:���2���P ��8%B�Y8%�����3����}�H|�+�Yo����E*�1��N�Q�>I6�0ьؖ��)r� �p��ɶzs���gj��{Ж��^���mN"cLD���'�~e�� �U��-\��b��Xf�F�ڷQ��y�E���q�(/�%�����&�jB�Ңv�@�?��l�b��|�MR�q�G��g)�����jr�\Ȣ,E9by��ː��9U�CN/���L��²J(+it��{S$A;�e(R�3N�ʣԶC>��<��3bP���ӯdΰ��Ui�>67_�Qh͔1ha�����k�����W�^V�\��g���Yi��'�!*(b�,�pZ)���7�}"��*p�y� +_��8S�����f��!#�@��Z*��T���)nD�e����&l'�T��� +W/� f�z�H��4�ͻq���EVҽ�� +��Y�Zc��J��N\�;�xת�2Ab�Ε�ݤ ۼ�/z�BMA�� <��q����Ac��!���]H��ڙ�V'�*�WS�Y8D��y^G(n!�oP��=A*��uK����8�;w�0 +��0fsg߸G��<��Q�f�!�C٤�jd�}<6�<`�{!K3����U�g�[��u�m.߈�9�%a����5���ژvwM��6��4f`���}��S�7ѱկV��BV)҄�d��fD{�k�6WE2Tvo%KW���&�qI2�͖�T�,,�2�f�3M��qZ̫�t�Q�� 'ޢ��Բm^dz�B(���� 7&G�"�SI�ç�{{T�V ��h�r�^gʕ��n^k� u�=Kz �r)�3��a���+źSA�毾�ʍ�]m��6�[����b�‚㝹7�G�]��e�)��K̝30�戤�f�$"$�U�� �b����w�:lu��O$��,XC~��%9/r(VUB y��W�rp�7E�T�J��3���>�m]B�X��Mn�i�o�+�,��x#�wS����4n�R��L���l��L��*_�,i��L������~� ��OI���F��o(�Nd!Ҙ��e��l� +��?�Ũk5>i�E�[ Is�Zw�E9WS՗�/�#��x]��[�զ(�� -yzsb�JScS�+�Zt�$�� +"�Q��I0������T�%��c�,�M����qYf]�8W��'�Z/�u^� r�;p;Nu��D�Ԫ�����D!�u6Y��E����p�~Ir��;�x�� +��׎:��et�Nk��_[���*�>>��?��!��t��Մu�D� +������طn�7'���G��az����+�ڗWVӃ��M�@�ͦ�V����!���� b�#�"��Z�tġ#2���b��^_U�md�=m�AY= �o��B��������"��v��K4vBWcCe�o��W%h�S��:f�#ʔ���Hh�|S��>K�=; �����^k��{�VD����.�n.̲ ��YV����IK��Kt,;�S�U�0RdK���M����d�Yk���A�ќ�R�8J�bޗwC����N ��s�=i�*�Vng1�����vnKڸ ���`��b@qԤa;Ԃ�> ���%�1h�W�!���r����&��R���=��^�QX��ͫ*w�Y�q��e�a +#�]][H�K�f��UYd��k"��m_� ��.~}�[�F�j*Dy�Yt/�N��k�'ɑ��a�T^0 ����w�������JS��I�����x���bc)<��iK��A틗��Ց����YQU5Eq�� $WJ������r+/ʃp �]�Pu�r`K��՜�bt>,Lb^$���?�`���U4���P��� @J� c���{"mj�i�Ԯi\UIh�gqYrJ%��ȁ��J�` �[Cu�� ��I2��P.�e���� ��}Ϩ�$_/X��z6%�:_��k��7��QF�� U(���,-JpŬխ��W3�B��G�H� ���oB���q��l�����SVå�."B��Q/�5/�hS��8W6/3GOd�V�o�-�S�""�Kq���nTʪ�F �H�M��p�V#جSD0����3/Q����N�b,C�D��mW��i��D�;Vvc��6f]�E�K�!v�,�i ��2"V)������0�k�WK�JN�t�aN�Z.��ts�i|��"��P[� M��癕kQ#��&��f�% w��K�VP��3�B.��q6�Zٽ4i��U�"�,V��±m�F1���N�l�tXC ���hK��/��71��!RXb٤�4��� z�=Q~��Ա�LBw'�m�C�T��~:`� 96�Ke�/W��"oV�I +��?�����i|+M��f�sTę9; �ˉ����s���^�~U��q.ߌKݽ��� +���Jǽ�v�6}��"�П�n')�S�}/�s�K��o-+SEM����Å%�������C��jJ;�X +���}�Qv��v�ks| �ZL�Xp�[�0�U�#/���F�E�cJ+^�?5*�=��83�H)�P�UP���������FZ��8v����f�J"�A_Ra���u s�̲{wz<�4Ji��!u)ʰi������æۊ7�Y�lNtNM��+_u Y��n]�/��(i�]�{H +�%n�*��q��K5zU�|W,�e᠈rzT�~=l��T��z�2estVđ��2����ߴ��[��u��;����mM��968�Ʃ��?6Y��O�z�+ê"-M�T�Pv;X�)��L+=0*4t�����듷��u�e��˄QB��V���*Y��"'Z8QX�v�qZ��ڏ,^�Q��2F���>/��� +G�x��rZ�����fU��$���Z8�e�;�G�^�2��i�J��tWgq��J�{R�A�6)ʥZ��t�jҐau��^�nC{G�A�q�.�����9-�L�V��Hߢi��� k��"V/Z��{G���� !�h���%&�A���6%�#�L��u$������Rc��� +��j'�U�?��W�jVp�|��'���/fq�u�[f9�rFy� pY�b�e E4����Vs�ڼq��%R���a��0�we�w;�� ?Z t��B �4�8[#J�<0@/�>n�,�Y�P�E��v�uɢAF�����kS\ +�T�4���sXͅm//��(��S���v\z ������I�1J�����h��~P���h�T#�3�z��Զ@��0��L콅H +#�x3��zXtp�M��m%@N[ +���h�_�M�CD��Wk��c��t�†�k�bT��osy)���� ���S��_��ܣ�*)]1�КK�E򫧯DfjԄ����ɸ�Q�j��q-Mx�����(딑��@�j68�MQhC�],��_,S� +�P�[�w�{�� ��Pd�G��C%�Z�\)ȥ�m�j����ZJ���i�]��+���D���d��<� �hV��€tF4̧�t��!!�ǺF�y2�i�f�~�b��$� +�G�z�~��F�l������.�B�����ջ`�n��*D¸:���7�������ɒ��R��|}ZY�����vÍh��������@wA=n��m��W��QZ��%P���yȰ�2,{�:� ���L։@&���>���@VR�,dȅ�q�I�'�l=��@F�m&� ��w5X�@�����@F�E [�2ȸ��@v�`%Z0�d\� �e�ayȰ�2,3� ���'���GbS3�l� �n �{�y{�L�r���pdH��[�G�Vc��d<�7� 9��A&�s�f��#�L��A���Rf���2 Ȱ�2+Sx"�Ph�d�U2žoYYCi&��'S� A&� à�@��&�X0��F�rB�U:�'Y-uF�U�~���҉ �eB�U�?d��� A�eF�ay#�jiY-�Av��O �*sB�U5���Z�A&� �eD�ax#Ȱ�2,3� �AVig�dUBA#���(?�����?d'��d�2l� Ä �'�'���6 Ȋ�;\�H�� +Tw�2� AV�z1�2���� #�����@�a��-d&� OY����B�pD��t����u�[ԷH*w@��aD�u�g�J��.���� c&�d�z( d��dis�~ǀ +�2=d�n3�L��w�N{"ȊZ�Y"d@�ax!�J-3���Xs@�uÀ Kc ��� A���B��FY!h="��0"���"I�AV�� +���Ba� +l����X�� ��Ɍ +W{#�0N��b1"�겼d'� AV�<#ȰM2F� OYQ�a@�1�L��,+U,/�� AF�΄ C� �8!�$4"�$0�D���d:iD��c�2v������ #��D��;&gM2m����Zl� ���� �� �q@���A�/{ �����k�didi �AVQy!ȪV�AV�N�d�o�M2�h'���/�8����0!��0"��2ɧ����#���kF�UR�#�, #��AVًvL�����k@��m�dR&y"�dd2����7� � �0!Ȫj�2�iB� [<"�lL<d�m�̠���PQ7zܻ��q@���/#gB� W<"��0"����v�A&"�AƳ�d8�A���4���d`�_�ʦD��6L2�ęd�d&Y=�A��� �0!��AF�rB�U5}2�m^2�&3� �A֍� ���b�2yo��`$�a d��y��6�t�H ��> d�#���q"�u�@ KcȪ6�#�L�/���D ���H C��E �T�H ��d��ؓ@���H c�2��0��a Y��e$��u{��r���ԙ@V�;��FYQ�a&��;��@v{�3� 7�I �m$��a ���A �8�d d2< d��=�0�2�~� +��H +�"��R�7����S��{"�i��$�a�dfd:� �H +���"���@F��E c�0Ȋ�:�, #�,�I ���r�� �)��B��D �/�2�3� �L +�xȰN2 �LG�dE�m#��H�$�Z)_2�� �L ���O�d�d:s$��_2~�D + ��@���@� ��O����E +W�dL����da Y1}$��^�B��D ��6Ⱥe$� V'��(tu�~Ƌ@&�D �2Ȱ� dXg�,�L�� �D �R'Y9ۛ@�sp�|4��0Ⱥ5d��#��]�@F�u&�)�8���dD��#�, ��[�@V��2o֙@�e&���� dXg�,�Lg�d�*wp&�u�H �� ��*L�r� �iy�d�ef�`IY�:��l}$�1�� dp���l&���O֙@&�D ә/����H�|$�ayȸ��@VȠM��2Ⱥ5d�(|Ȉp� de;2�����KȊ�GN�L #��"�q�H +�K�XI��@VJ��qT-O��2Ⱥ5d%OA �;_2��'�'�@&ˋ@&�D �gM2������L #R.': d����Ȋ�-#o���@V�5�d�^Y��'dX��«I �c9��@ �� �"�����M c�� d�%fY���n ��L #�"��� dčf��7��8�L ��7����L C�v&��H�$���q"����H K�H K���4�$Q�$���q$�х8�^�$�AY��‰@V��A �q�����I �t�O26�3����&��ʚ2 3� �@��8ȰL2��^2�� �d/&a���h� �{y�*����� #@3Ȉl�dX'�d�2YG�'� �@�\� ���@V���L�� @F4i���� ��=����ѱ<�Ǫ��O�=�3L�h�q���1�3 ������?�����e����a��cj���cܞ7����va⏁�|���u��cb3L�1��?F0l握�=�ǘ����f�?F����:��x�f�X���?�u��2��d!�2�ǔ���c\Ą�7~�n�?VU�<�ǘ��1�*G���� ?���c�|�1K<�cLf#~�#�c�hO�� ?�a��ď�8��d�c��1f� ?VL�cUr��s���B4�ǘ�_�1M�#~��x����ďa�c�{ď�'~ ?e�Vg���}������úۀ���ڀ�">���U~i��da�L��>k?ی�?<�Ǩ��cD/��1��?�ngQ�'9�ǰ��2��T3��t ���u���,f�C޼,�e3̶olP�?F����c�ɞ�cE��O����?V"'��1��7����S�s�)f��'��c%���+��<�c +^L�1,3L�' ���e���=�c\���vM�1E^�1�=3Lqđ?VDSy��8o��4f���7����Ӑ�cd$���Bjs���c|��?���c|��+��_�1�d�)�4����7L֑?&��+��'�X�����5�ǰ��c\��+��k���3��\��^��"�r��1���?�/���# �r��àd���x.���d�c�%������^����#����S�����P�@�#4��a��cE¿L�N�1�&]C���M,+Ks� �ā?F��l�`i��cd���1&��?F����d��#�1�LjO������c��c�Z'���'����SBm��� +|��|�c�r����)�7�NJ�a���L�'����c���8k�1!M�1EV��1��K��c2<�c%�g�?f�u���⏕X�(���cE}/��f֑?V���cE0�����6L��g��1F�|݁?����+��?�5��c�����#��䏩"`��q���z�Ǹ�?V�i��c*}����N�1ͷ#~�����mď� �Ǐ�so3~ �� +'�����{MQ#~l�š�1u=�c�*G�ت����c_^�1��G�;� ?�n}�~��Q�������1 �>�NJ����H�^3.�?���~���U;~L]I�@�1B #~ N2w�#�����cE��~L��'~̚��wv��1E46��?VR�4�c�$o��R�~�E�cE����njS�m�������%~ ����?��=���q}?6[�B���+%*�&���~��?&� ?�uƏ�jF��7~��sƏ)�?��X���1Y'�� ?���8�ǔM��cX��1��?�eƏዼ�cEX�?F�gQ(���j����c�:�~��̌2������"Ό�1Y\�J��N|��0N�1 }�?��1�Sg���9}���a��cU��>��M�:��t'��,O�XU�s���E��cUԙ>����>� ��c*Bx���y>�c�9�Ǫ�k��*���>F��L��� �X-˃>ƙ3}�‘{��*�]}��=��(�|��0��1�����Ĥ��:�ǰ��1,o�X 9����e}��xC��1�oN�1]�D���>�c�;�c����c4!>�cL}�)g��Q����iS2��J��}����Hӄ3��x?'���%^�1YG���>V�������b��)�<��dy��(���c�O�1e ��1 ��1����12eo��$'�XW�u�� �/�y��>F�}����I3��HS�~���o����'��:l&��.�E�<�H�e����} �lj>�z��>V��2���V�15�L�1R(o��Μ�cU1��>G�M�*`�cU^�HS"�I�BC��1z6f��o����'�1��h9x�Ǫ�(#}�=���a���Y��H�2�ǰ��cXG��z�&��,O����#}��Z#}L O�?{���.L�1R�/�XR��>���1��M3�>F^}��1�g����^�1R�r�>&��>&B�>F�x��陎�1F� >�{0�ǪF�c�~��T�3�Ǩ ��c,�/�ED|�j6~��p2&�y�>�/���+ʹ�1�#�𱲭3|���SW�>F�h��)�0��^q��������$�SI�S����j\��1F��[��8��d�cv�>���c&��|��+�cu;g�S� >��?��x�'��_/�k��|d���o��=��#{Lu"#{ Ë=&���ad��s�14�'�Um{��I�d�IL��q�vGg�u����5�K���;WL��RF��1�ʑ=�M�1I������+��cE��'z����#�>��J�G�� +V&��,z̊Z��1Y'��,zL��D�Q23��x 3z�[F��YG�X�۝�1�c�1��t���F���/���&����F��'/�Xj�Q�x����@�uc��T�2��(�y�ǬNqD��U��n�c���ce �@�ͺO��tF���c*:z��d��c���1 o�XQ�sD��5G��7zL�=&� =fC�+R��c܍=6X��`u���P'��ro���['���'�X���n ��0���o��`F��O��c�2���:�Ǩ}��cEoO�%�3z�D'@�Ǥ��B�I�q@�I�qB��!���:�ǰ��1�B���f����'�ؽ]�z�inF��>kB� �=6X%�'��1���u��1 3zL�z̬#zL� =f?�+���c��3zl� �n �XQ8aD����=�zz�4uG��{/��Ȅ�4�cux�Ǵw��cT���n�f��z�\ی��'z�d�F�B�3z���=f�E#z,S�z �tB�U 7��1z���1���1���1�<�c��3zL�=��_�1e�G��=�c�F�Q�2���e?%�E�'�cXg��=�m�=&�� =6YT?��^�1��z��� =F���c 4�ǰ��n�cf�c�� =&U�'zL%=#z��6�ǐ_~��0N�1�4��1z�_�1�#z��'��x�Ǥ�2��ȝM�1�e^�1�z Ä��B��8��tڈ�?�cU{�=F�݄��ˣ=V��u����J�}@�1u�豴��4z�-ބ�h�=F̈́��c���K��Lj[ ���=&[G��u��cl���1l#zL��1��1>yB�qq3z���=�'�< e� =��=��@���'z������hB�)�:��Q��cĀg��"�z,-#žzLE�#z���=�qB�a�c����8������YO�nD�ե��4 豴zL��=Vq���1[>�� +$�X�{@��1������� =��5��x�'�Q�'z ۈ��#zL'=�c2��1 z � =�u����X�{@��q@��JsD�)��D�QO1�Ǥ;�Ǫ�g���[G����#��B����c�K��r������1��y ��<���<֍NS�Hӷ=�cJ���1 yL�'yLƁ<���cYo5�Lj�N�1� ��n�c���)�`�d~��T5���O䱪‚yL�'y���c��F�X7 �4y��Mc$�1; �1էy W"���AKc�Ǥ�7�����c��g��8yL�cO�1��<�^�'y����ȉ_qQL�����޵&��W�{�� ������P3�:���-$�����Ij��yR���߀���$�D����㍖��e�����Y�� ��2M* ��y�%J �4?�F ���k����lg��� +c㸧r����\�\�e��>�WTV�V�_�=����x�&��y >�'g�{��/����_w�#��!��:�@~Q�G��6��� �E����j�ך1=ȯf�Y�_� �zv��Ǹ2� �%q̡|��?0%�ı{&~I�;�/��1���=G�})m���.����w�K�n��H���ϻ�K�|����%?W]��b��|� Lg���j�|�<����RsA����S�_�/l�ſ�g�.l�{|�9{�s�4�]�Zx/�����L������ p�߅�W�;��B[`/�V�^k�]G�9HɎ�{-�н�t/��;����7^�L���g�|�� +�.�fںeOE��#:ދ��-��{-�ྲྀjx/�z�����4Y�^��r����q�:�����F �{���O�$b�S�}+�K������8�RQ���J�{m5�^z������{s߽�l*}������Y9�k ���r���K���rڋ����:N�nO�d/^��m��%��W�M�B9���/g2(f����׻�^R.VSA���� �W�����L'{���2MA�JJ"{m5�^� .�]��g +�K�����Tl�zG��K�Lj>S�ԭK&2�^w�E��%���|�Fzaq�Zw$L���%�Bu�o��D/� �g�x���c���_⦁�2��6*� O ���B����P.���==�!��u�KX�Y�t��Md^�z_���uQ����.F �� �e��ܴ.�R*����c���h]�?�B���tM3ZW{=[��~x�-Ẻ��^ �%�= J@G ������������K�&Еi] �zȃ֥{B-`к��� +�K�8�u1 )����=����'��TTമF[�U�cw���ZU[�8� ᵿ����ȸ.-SNE�ץo��,�K�{���P�R��B�g����Q��I����|����A�@]e��( ������X``�4mG�Ko�����E���%�%�q��p���Ѕ���n@�C�(_���ҹ���|��.�s]2�|������C��0�� <:�����J�w;��s�̇�s�;�Id.v�|��r��\/.�V��XW�˅�73Fp�U� .AO*�2����Ehp�H�~m.� ��� �"��c���X�,�\(�f2�_�?ں�7o� s�'����=��ͥ+F�,�\� +���R�u�h.���'�ţ��1���Ϧ���\�V�d��� vsɲP%/����(�� ,���m3��\�A(v(�;�24�\��+ɥ�u\s��N�jM�d��=�wN<�G�o�8�ז ƥL* +3��x�����y�M�D��FqY��H\\�|a �U�����O�xNea�n10»���L����VQM+��yX=��飊F���:1�v[�DiSn���R}��N�R��m��k\���amX�LB��R��Wer��w���J$[-�ni=�Ʒ��R%�� +�z�I����H����sKզ�bN����~pK�~�[x[�&ϳp[���h[4&]�����;ۻX[�W;hڵ~ eN��6j S�2`[�΅ڢm���d�ӕ~� ֖·�j���EY��83l ҁv �j4��m�ž��m�ĘBVA�"�u�JJ�e�2mK1�f� +�Ht\gж05�2l��V����������SEG&m��BU��z+9 ���X}h�l)Ģ� ([�ю{A�@E��0���T�/4 ǚ(��u�6e�+�]|-�1��Z�aOG�k�y.�փS��d���zFk=^�d- ��jB�!���o��Z�4�E ��JUa��K}�f�L-� _#���j��"j=�ʽ2PKQM���R"�{<-�Oz�2P�|�� j�4�p��sY�/��n��iv�\<��;ڄӚQj�4-�Vc,���_.ô�i�,-��j}��Nz�F!i��y��R`M;��h���O�M�\�5�EKz�y��=j�Z�I8͹�5�J���E��ҽ�5<��, �J�>K���w�gIS�E���|a�{��d.��hFg���g�YZ�i���߽P�t�zs�5�����R����Y*���ЉY� Ι�YTe\�� ��,Z��i/ X�̨��]�,:��E�Rռf�e1��Y8Y��aM8&��3�digo���"1N��)Y,T��,V@� ��EN���M�"[��hQ�l=:0Y@�ξ)YpkHgJ�qr�A��+k ��d��3_�dUU��)׆d��]*�,Tb��B!��,�d��2$�5 ���d5�=}�T��=��Ion HYsv&ɢ@��`�d�RZ�,)�$K��u: $ l5��"';#K�m�7�����`3�,)ω��� �!1��:��@cd�6�QtFΑ���fd�n�܌,<�Hl#������b��5�t)�,�����TFV��2�fd��HgJ˔,�DG&K +S�a��ϋ����R���$0YQH�&Kގ�YL�T/��>�oƋ>�O`m;(Y5//H��C@�P��.�,���������uH�e�gː,����ސ,�T[$�T>�n�d5�}nHVJD���T%[�dᒨ�`@����Hn��E2$ �[��юpF�i@���_�I�,�)���)Y��k�M�2C�CMצdI�KbQ�L��U�[�,T�Ҁda�E� YR,�!Y͌���dѕ|�wC���geH�����[�xwA��[�tV�d<�T�A�(R���7�[�x4���di �5 YX�RK�,bq�3$����0�բ-$ Y�|� +#��y"K�� d�\@yL&d�^m�k"� endstream endobj 48 0 obj <>stream +�87#K�`pȐ,�^?�f*R��!Y(���$GQ�[�PP��9J�:��Lɲش-�ij�9F�GA�Rrʲr����`� �͈�݋�ʚ1$S��9����d)��~eQ� �z�J�2�56%����A�ҟ���dJEؼvAɢ)��+(Y��~�J�"MD�QP�,q�Ʀdq&��L�R��8OP��q�S�,���RdJV{"'�,k����)YJ]X�F�dq&���d�!���,����ߢd�{غ$(Y�U�37%��-k�d)��)w +LYG&��d�=tK�ժEi����Jz[���4���L�� �h"Ԫ M՜S�hJ"��)Y��d�ƘH�����7>(A��Z�� Y��X��!Y(��%�1��dYB���1Yt90�%L�~� d�,2ů�g�m]�AY��eNqP�>�Np��lLϜ,S�)��n��?�����6�ɢC��X!q�����Q���e� +R,s�2*K�Y���ŝUW}��H`��&��ܚ�-V�s-A���1�y��U���ލ�������Ҝ (���͸�����i�YPY�(��,����+��٩�5q=�X���YYZ�o V�`� *뙾b�p�c���@���%�j�%���Ё^zgd��q����>Di��諅�" �3*Iw�5Gd!�~➦i���΃�����`dQ��?e�0�W�%Y*�F�q���⳴O F����j�M�YY�����<� D��[g��q�%D ���SS�����~-#�4�c��,lp���W�����3�9#�ڌ�K��$P�Y�T�9# Aٜ`d�9G2$Kn�b��� +��~� �K�YXVeFVg3�Y[H��-:# ���������Q�uL�`[0��"V�91��T�,͚�Ȓ���Y�t�Y�԰��Pk�`dI�ĒY �k��������!k�A��$r�d�s���v|��^YK(�=�d���du\0* k� Ȓ�����Y �����2 @dI�d�Y)�,�,��������Y���@���û���E�;�L�B=�~e�%�"!�;x�'��%BQ/=�����_1� di/J�-Y̑��L�1�8! �̬�8�hS"dI�h��h�քiy�'�hH�,KɚE�X���Z��ը�����f��,����8!�f*%�3! Q�� d!��沈�a9� Ȣ����c�f���t��q2K{pb��ҥ����>w�?��C�4�5D$<���U%8�㸳�ǒ��/e<*7��"v9f�cI�pl�ci�d���ci<( �^ +�������Ѣ +tx�+�7��z,|,T|���%��l�P�X�X�V�� >�Ṉ���r>w�c�/��6�XT�Tu����ޒ��K�j���ౖ��X[�|:��DGz��c;��Ҿ��!�b��v"����� 7 +&� c��9�E��#=2 �:� c�� +2���N�O�^�E��\'ca]im���ycO��j븼�+�XIIu [ 2���m�b^�B[Lfca�@L~�h�Cs������X[ 6�|�s J�� 8�X�f)��!t��WL;5�@�p��ݮM1�lj����:��f����Rp,6^�}�E2�v�L�Bm�������=��Jmִ��XDN  e:j�ͺs\�@� AȢ�l�<��+���yF�bdMmD���:Ê,�X�['8�yy�]��X4�����:�=4��0�aYk-�u�P � ����"��l�P������b��[�ba�D��3�Ԟ%f ���-�$m��(ҁXn�\v'@��mn�%�94, ��� ��X�� �� XX�au; ���L�B��a)���Q��F. ��k#5���Z���:� ��/N�a��i^l��Yv0��C?4���:���� +)�W�!c�牺д��pޛ{E����^m%s���ܫ���A�Y�"Y�}�^A/x +롏�m�J����hu��� ����1��J�V �9�J�:��vؕB�f3�X�gG���L�s�x +4�gЕJ�-��+���� ���f��R��xgW�-�^��q�u���x�=^M��L� +-�V���,b�j���+؊0?_(T-��!�V[�`+S�d ��m�H�;�J��e����g�`~Q�.��)P+�2�:� +Ss��ċV��+�J�z΃h�0�X�t��.�gu�-q�T��"pVjh�e����"K<�w��j e�EHV�[G-�������J_�w$8V�� +�Q0VX/g��cƣl���G�`X�˚B/�� L\N���l��j �_���W��g������ԁJ.��F��5�W {^� �̀ ^%�1e<����fR���>8����ar�r�^��読��{����K�*%�X�8/VbW��x6��ʟ��U�h�n4��Uf���xwF¶��H!��.���M�R��{�Y�U��P��ǝc��L�Cy����� +Ů���P�"��� kxwt + ܁��c�Wp���W��y�œˬd��a��P�\4���-OX"Wa}��rUQh���3�O�\���Y'8�J#�����=�Wѱ�= p�ۮ�j+\e��,p� z�\�_Fk \E��x��]�g�*�V���[%�-}p������ſF��l�4�sn�����j� +���[�8��[�*A�VI��.�U8}��'�Ut�k��*Ds�[�Y��^ԋ��t�WO����l��ý�A3E�V����1[� R�R�X��$���8?Fu�O�HP2�j�A��R�I����~=c�0{�U[G�G¹�UK��-:�����^�]�"���Uh89�ʖ� z�ŧex�$��W!���U�[�� ���v���׽�TZ�َ6ӫ��SW'�Z�ZJ�W-1�U��sѫX@�V�U4�)0��B�7�U���-ë`V����p(�\�kYJ�W�h�A�;S\�mV��,������ ��WI����U�[�� ��X����U���^EG�k �E�ҝc���*]�a1[�<��Į +)�U���[ %t�'��8JE�F���'t���F���J坍wAW�X��y�� +� ]��#�,�*3��%��������&vbw2��*�]!�� u1{aW�+�ibW�� ���U�߉]e�LN����"�E�nBWYG�z�u��J�m��2� +�Q����:���st�b�,�2�JG1.:�����$A��TH�Q�]�P2��:�yee�����U[tv�)�� v���*���d��C�߅�BP'��u��]�瘱�!e��2� +#�-����]����ڢ��z�vJ�(pl��ذ���$�]��u�tK�*D�N2�J��-u��X�Ƀ��U�� ]Z����aQ��<�*�q�yTY�������R���p�\��m��'�q[��WѮ�`U��ԼO'�s���}�[ha��i�lP��w�ָĬ�p//�@V=Vu(����@d�U)�|n��v)�:�*�]hUK Z�X�k��n�_XUj���x帿�R� U}B��f�����UM�s:J ���� +�m�R�f\SK��;&�U� �|�`�aʪW���E��A�86�j�no`�Us�"���r�c��`���O;� ��&59��jb�r�1����+&{�;�1?D�V�:���5�>�WM%��im��� Mk ]%aR��,���� `5T�!g)�2��oLJV�����%��ZVn��9�J�Nv�C��%q�$�U3 P[h��@��X�Lv�g� a��C����j!���X����o��G�D�=�F1�N��l��MWJ�t������������|m��p�j��G�h�⓺��v��sU\����,=���sX�Z�ZK)�oQƒU*�5RI J��8�Ig�M�{>�y���w�����Vl�/����ʙ�VKUg� ��Ic Z Db�rX��ؕ����cЗxm���|GBK��U fZ +�@�E� ���k(�ɚ�n8=O�T�G��������?~�� +w�T��D,��h^N�� �=QN�����^��%� �U�#g���}�2Uk��W��nf����� WX�)�=*����vV�27��}���>�J���������EP����ImQ8,��X廉�0����5����a� K�c�/����f)á+��j(bu�e�Ռw�S��Xx����~_�2�i�?��Zsb+��ܛ��U-9��b#�X�M��b�\����:U}�>N��g1�nE��˰%���󓰐��b7�}/��!K5�*�U����P�m�цƙ|yUƾ[*�[@ +�N +�ho�~�K�O_�硷�^\��q +'434��Rz�\����բ�@�s�FE�l~����Oa7��:d +}�c�h[i�fl%�4���AS��8[S���Z^hK'���av��#_�q[{��mMuL�߮/BTa�f��F\"b0嫅9��D��Z�R[X�����lU�cʇ�����j��ݽ �\��J�)VJB���?=D$�a�Ů��F�~Y�" +։�fݡd�a�u���F�w!�F����1]���?;Y��S!�!�Z�������Z�#e>'��)��Rj�-��B�QV$� +#�̞,n��� …jC++΃�([2y����m������Rk'qWB_�q�NU!���MFx�I�"a�Y@'�f�F�S�Y{i�FqI��D=Y(���D�9PXۨ�0x\�<�n��0��ŧ��&�\:�ȥ�n�C�����tB���] +�Z���&�K-y��aX�)� �P�>�U�p&�����Q���*dY1B.���X�*����ٜh��ۮ۩�ѭpp(�My�vEw�qJ�p}@�^oRӦ���B��9��X�A]D;e.�%��I��ȥ�m��Ǥ��,�VT�.\[�P{�S��d+��(���R��^���qrDy�Y�Se� ^8"�ݔz��,qQ���=�R,����t���*2ч_Y-OumJQ R��������w���M�n�v�ϴ� �=+�܊��)r��4��6�ߜ�d��U��k�}�IX�Z� i�szw�bv鱺�#�-�v�� �]%%y�ou����‹#�����Ү�J<,���]� +}֙��Y8�][UG4w�8�JcP��� p�[��zZ��>N����QWm����"d��K��n��R���\�������RFDŽۖTjA�����ZÔ��o;���;i�'����}u������FO��_��я�d�q��\��c�C�5#�� ��8�-f�߼{3����mBe�S���gN9K��qXMkaλ���r��[ݛ쥙�u��h/ͽ�� �)�� �+�͜N�������T�!�;r��"�T���W�L���jp�|cyʝ�� ; �{Xq ;�S�<><���q��C�>����2�R/%�[U�o�֕R{� +2Us�����E�����\�^��2��*Ÿ�8_S�g,��ؠ��/�e㖦�I�D��.���.��(�7��ʹZ�� P{c�N��^�f� e����R�W����f�p��(EEyR�k +��j��T�)R.[�w�N�OG�ZO���!!���m��)BV�\�÷�]�y��|l'"��uxMQy�4��� �T[Z)�2o;�7�c!�M�ȍFŰ��Bt)����f[)� �l�U'�rWlF�fL�J���� 3���iQ�!Z�&������NF�z]G�}G�����@�q����E��L�Z�i�ˣL��ڄ0����E^�PÆ��A��"l��FRO�3���1���)���²��Zh��E�<���V.������߷Әo�B�IU���c�/B� �u2.�o8����T��Џ��=�g����0����bM�������c �Ў��I�co��M;�a�Rdb&��|D��Q׋���8����'j.C�o[ojZF�������b��G�Âi]��f�����`[[����[֍�l�iw��b�fj��SԔ�5%rԴ}��)��B�ϓ�&7L���@���<�r���U�q�%������'�ڐ����(R��R�n�a�­�B�J�m��c��� CyH�q�V7(+�)7ė��Ǯ�.������l�?�Qw��Yq�މA +簷`j �a{)��V ��qX�*'6�>~+�\Қ%:���[��d��)i �Y�kg�x�&�8N�~Ra���� |�ω)K��cH���;�a�� ζaa�zs�`�.����RW�����w� ��g��4�!$�7.�%oE�H} "��˜���*5�)��_�8�IK�k;���)��*��� 3���f I���m ��<������Z�埒�� ��`8 d�L�y���+��7��[������z��X��k;-l�ws�+���2�m�^�5�s�z�[�ٲ,�K�r�ӆm��H�Ɩ�k�_�L���%�����î�"�)[�� +A*1��[tK�%�X&�[lV�8�$'H�B�U����"�����R%C�k��}�Ħ�G�[���,�����p�vR�Mm�<��}*��+�7IXI��%�'����-���{��b��r�J #6I��RK��4hO�hXԚ �� +)�g �[X�*<35В�Sl�oA�K���)�P�ո����|�(쪧��I��9�AW�����v'���l +�Z�^L*�]ߍwK [i���b_�W�Z�^��O'X���i6�_��e��� +ӈGއ��t5;�<��յ���rWܒ�il.T؂�Ʃ���k��q���n��)8�*��w�͙���D�`@�zXa�m*�J�D(�I�U�� ��T[u�y��i�d6L�T����}�I"�@�[P�Mݕ=*���`�o�/���m���Q6lL.H��5���0c6ZNSm���Cǩ��;�0��!�,;���1���&��5�42��-��i�Deo�2v��K�వ��We((�6��H���e�J��B�rL��@���BU5�6=��I�|,������~�k-ޘ�v�C�;��^�L��T��{ +�V"�R��Ȥ2�@V��Y�p�iQ���s+B�U�m�����'�P*f[ �f봤౓z~Դ����Ͽ��h�{+ �u�b�����R1�c)�7�qJ�H��� �~ UK�N딆)��K!=1��?�{�%3��'bߘR{<���fk]}b| ����¶���d���F��G�=��6�,��Ƥ,U�t��b��/;f��PY��B� ����?��+ً02��7���0�����j�P���|��&����";?�м��S�� �~ڈ'�{$߾�zu)d��� J��5Z �-V�L;����_kB��W~Z��b���Aט;��^^�L��6󲀒"lĹyd�7�K@��N냼|=�/+Ņ��+� � ���a��}m;��� +�lBJ�i���f �u�����O~6�L��jPW]�֏�ٜ�V��4C>핂F��(2`���������w��F�(�@]��L�<l�!gw�(�Q I6� ��Qiinw��n��p��]�j��J�'��μ6I�Y���=�ķ����d�&����\&(�+pQёPP*�SS�B}�Z���o��\lܑKW�ў��}��#���'���F�%�u��y�5�/j��{�T�g������9[k�LD=gP������ui]cӦ�%����+��:5�A�UpI�ܫYU������(*�*j��� Cn� ��q| �P�mTA�Iy)_�E�֭Z,�8R$�Q�� � ��,�D�MO���/7�^3��0����B4)C��������;�p�����J��S�(T��T�j^T�:�Pp_��YL3�A�A ,�FC���A2=��5Ǎ��e`3��]ܵ]\0�k3�xW��:�� �F��*�LC;gT:�Zu5$H5XQB������i�����7���������aŰ�Y?��y�^��7����U��=\��V�O�/T<*�I8u�)�iu0 +:�.�b���hrz��a*7���*��xg:����!�4~�Z��l%��X-j�#�@��uou�?�L�QX�ZA :� �;AMA���_yyH�C��"W5)�1�8��ޛ6�l��Tv8�����BK��d )��QOM���t���b�鳀��t;fs�8S7Se���./�jG\��N��禫 l1�0."�k��.yr�s�%��c�/�� �Z�_���~�z �_3��q���97ӈT�_���[ �DtK++K��M^�ٓ|�c�.tX9��B��ch'��@:=?�†�=�=��H��"�BZ����B�����%�z�BD��rzR�����RtV�,_��E� RB�{{� a���OU���U�̓�C&���5��Uv�f�΂�1_���$�ԫې��|`ؔe����0 W�l�U�� ��bh���rAݷ\K���4����^|8l������a�r����vJ�"�m����o�0J�Yp� + +��F� ��9�����v��U@�������R��K��@����.z*��u��1VJNj_�]�:��I[��ɒn�U� �Q�s}�`n��9���H�TD�<0��V���a;�mP�C�M��� Rh����,����Pl��S�3 Ħ��j�� +�}z3����)g�jI��e���F�ǻ����`���K9�o�yC�n+��!�'��Z�;/��6P� 籓gO��� Z�k춙>W�R�d�ܙT��P�� +M��� @6U>A�`�-B�d�vT�B�iB��v��$�&��� ��k��� %�հ5�j B�Ux(?��}4ф9����3 ��:t�U(��W�����R��T�=��v��@��&���i���+Z�}Ipڨf`*� �Ed�����Nž��7L$2=��������0������<���vE��Ŝ�a��v̊��ydd�7c�Q��������(�k;[x?h��YՇ[�j\&�ؙУ?v\����]_��E���x�vk�\�6-p���]�������7b�咽,;��#�͗X-y� ����NS��^U�Y�r�$X���i��#���YӅx��ކ�aಈ�Q ���kl��>�;�n��}�>�m��˻Ϸ�6Nl�Z2�a�}UW��[ �k��4����R��E�C����+�v���z�x�?�¼R���N�H���4��_�n' {–s���X+l���;� �$�/���v�v;�9p5� +�ڦ �ֵ�n�,���-�A<`+�~l�㻝r ��r�T��`��^!o'M�����>����Fc1�Po�~oF�hCà^A�� }w/�"�S5����$zQ��| ��7=Nl�;��z��ےnjE�T��U��b�~��ڇ�X ��f;���0��Pm��M��15�*����S���`�=��ƽMr��2���ք� (v^L�ڝ�gvO�J��Ŭ�Z���}����y�*� %�M*�L��zu� �!Q���(�}#�h5�b<��h���,l�Ĵ�ݷ���\�~���LY�M���Ƀ���zJ����0�tw��*��&�)�c��N��: �qK��Ai����ӽ:����⩶�R�>5�����!/K����A�S_�KE�p_o���jxQ���uJ��P_� o�J��8]�T%�ƽAp�v�B�=�\4U�vߒO8��B�M���Xх�Y���skBzVy��C�R����N���`ɘ�ݻϴ]��i]����D�A9_��� 2@ ���r���[7�u���?�lo0g�T�Wmv˥o�T\ h[��,��O���e~7 �$E3g>n% �i�4�] ����4�QT�d����%��g��9o+�}ٰyl���_:�p�E�x…O� ���}��,�Tk������Q<81�כ�GTCękt�zQ'^>�c�ćO϶�|0��f޸ ��u�UΣ��_E�c[�h�M�{@�����"?�p����]u��KY��ZN�x��j^� +X�N3�ŵ�D�x,g�����4�7_�� �b (��ww�!T?i�$�������T�Xn�9X��T�$������\�B����8k��f�]J��i;�a�n�ZcZ>F/=�_aV�4�R�K�.�P�fi����E�)�w���q`���JkNV �b�*c��ݴ��r�Ӛ�=h�e& ��ʶ"�� �l�^U����i���� + ��q����㚷�*�|O1��R��}�JK��S +�����;Z�џӎ ��_�+� �$�J2���'��ۑ�7����U'ף'��af�P�b�rZ�=ꍏ����v�I�5��ˌ�)���W�W �����m)�e5{�r������ +��U!�*����[#=���Nv_J<��TȬj�+41-��{5�NO��m��WT{wk���>�V�۶0���'��im���P{z$x���|=���0��@�.�J�m��T3�����?�SZE�T7��yh�/�bO����ׇ71�t�]6� ���m(��8��Y*�e��C���6dn� }�-��űr48�?yq���U�[6��۾��_�.����R��]����JavP� s���K]670��T��P4��D�.:�� +�<7on��I�Fs`[�m���ǽ6'S��������n�`7�x� +��7'8rN���'\j=|���cv�#��>;��\��q�[���饔� Tl�O�@����)�af� +�͜3k&`�uH^�f��F�S*���] �Ι�;Q��[I����.�E +���G���X5K�W3��E�3u�:o?�=�y�L�Cy��ƍά,�7V��v��Հ�͜#Δ�j�f��G�tN��^|9�vN�4�~v��^����ۣ�3�0F���!Š����E!,{�g��k#�*�� ��� 47uN9L8���ee��ZFL!��4�;��7M� ��R̷�ږ�(sc�L}� ֶB�[U�3��>,L 8�zG�FV +q�k��!+�ɸ&'n^ey�-��T��͛�ns��=��}>]DŽ�Tk ���$�*]���؅V^e�1���%�#��tg̗�6 +�jy�f��:�Vq�z�q�j'�R �xs*����,�������Ҳ�����s�������� gw@!y���}��L(�f~s�%7d��h����n�5�cTJj.H3"W�P3������/ �[P��eÅN��ۅ+ʦ�_�u�.��\��#�������qSx�6�$[���շ%7=�H�y��{ɩ�;}@��C�m##�nvė�P�u�p�]�귿���+��x��>����$B��eD�0yM�S����R�.ˑ>TU6I����蓤(���w{����&����{�X��n*� B���ӽ=�K�����]ZJ��F�%%,`�Q��^���E�0�lDZk���m�:c1�S�X��x����h�X<���|���p�Vf�|�he��F��NZÐ�Pr}�T�\�mY����!�!� ��{m�n��24v+�Z����^*5���R��-�[���8ubz��X)-�4^'��N���a赎����,/��*���Qi�b��D6)�7rK�č�40JY�:T��Z�iS(� 6 + �A� em9�P�3��Fz%�n�cx�v +u&{]JQ��t'ce�h5�s+6;F��:��f] A'������_^Z+ԁA�Q."����ye9�����+pvg��V�!�O�6w�AUG�=9(��������Q�J�E�`Ki׆�%��^ �|(�=�ᅿ�}x6؎̾��EY��"nB�B�r�+?/�������b��nу���<o�0�y��Ia�Õ="=��� wI=݌de�@:�V>U;����Kd$�O.e��.�j4.Н>��Y�e���J/�{] +l�`�m�qH�IK��V�ڴ�^s4E��� r +��”7��� �5�c�C#Cr���7��B�c��b^Y�Z�V�S���8��{@z�}�����jؖ m���( ���(��ډӾޢZqZMQ*Zz����)iI}A�zf��v^*v_,�5�albւê��� +�B��Eã㪻�8D<�� �\�2��"^���x�b�D�ӂ�K�#�U�x�#+���r�����x(���K�/O";�E��$/2�Cē{=KA����T%�!�)�Do�"��/D��$"�V����*Hw�"��J����?o+���D#��2܇���J!⡌+�8�CēZ�x�L&�I��(�-D< � +o+���T'��/T"�Vu_"=����ej_�x[�D��:O������/����x` O������u%��m[�x8�~�xdi +���4�}�xR+OJ%� ��x+��P>D�N�$�4 U"�w���R%:_"�R����R�Jē�ӗ�'��p�*D<\�>D<�D��B��?DD<�B�C)D�q����'��T"��/��Bă�]�x����T:^�x�D��$�V#d�:���%�D<=V����񒒈x[ "H�B�c-�!��1�D<�������x[ "�>��(���.D��O&♝��BēR�xR�D@�~^ģ���أ}�x� �)�ǙD�23��S�a��/O�� +����2/) ����u̝3 �������@<��|�xR+C����b�� �(�� �(��M[�Q:��I-@< ����/��83���O���T�S�xK�@�%�3�e &t�@<\�2OCJ�ſ3/��iW�x��_ �� +ij���xII@���G1q��% j�I�@<)_ ɠ����|�xR++�����/�x{�^��Ъ񶒁x[ ��� �������U�xM ˖O�� �#fZ�x[�@���� ��G��G�q��QW�x=�� +��3+� ���OC^�Q�\�x[�@��O�D����� O� +����%�IV�V �n���SW�x�� ���'��P +�3?@<{�3OJ�����U �J�+o+����Ɋ����~�xz�+O/B�i���V �&� +�S����a�G4���2��@��� ���d ^Ro��Sp���7?@<�����+���|�x��g� ��g~�x�+ ��J��/)��E�uI����G����x�xZ�}�x8T�xV���%g�%%�@<�*;�O�_���[�x[�@��OOS����H� ��U����c�)@<���)FS�xjK�@<�\?@<L Ϭ�2o+��U��q��xX�x�� ��?+�͎8���7����F;�xW�x��~�x<�����t�@<��7 ��Ó���q/ OJ�������U��2���\���Sl���d�Pyx��}yx�Bg��=����ȗ�'���8,��$|yx���G���|yx�9 +���oh;���A�(<<ť*��_�4< ���TixV��K���^ixLK��70���)E�� �3 �Cã�.�� + �?4<-b* O_����?���B|�CÓzQ�4<��s&�V�x���J*hx(�9 �ϲ`N�{d�\hx +tܜ O��J��n����,��4<�yA-5@����{�ix����_8�͛'������TVRqx���{8����S���*8<��8<�� �G�~�����p�/8<¢�G����#�Upx}����8��Gp���T�/�‚�CI8<��_&|���UpxD">8< +� ��c������p�/8<ݍ��#,���)�Pqx<��t���Y�d�BA�GD���VqxtQ��Oߤ��?%�j��!�u��&�]��Ó����V�J�XT�;B���5��_BT,�_�G%���Zpx��A p"��2�ѣ'�9�f^��U��u���GIюã'��?8<*� ���p�"9_����ö���P���T�^`"���CQ i��iB�~i��4cU��ef��g������Oi���S����(4��� �8�����3\�/��^�ᑡ�8<� ?8<"X��2� +�gF�8<��g^��8��G�N��)[qxTS}px:������G����#�Zpx�j�������Z8<;3����_^>������qx�*>8<�U��q� +�Ci���i���ã�� �G/����G����:t�;���e�8+4< ]���1���ixԡ~hx�* �.�c&��/ ���B�c /4<&�1~hx��AÓ�OY4<) Ņ���l��Ь�hx����8SѻE��o\ ��/���GyS�᩵ ��E�k��~ix*6�4�N�t��i^���/����(4<��~ix6�.d��z��.��@_�������X�}hx$� ��_��٪����u1hx��>4\���.4<)_��*��'���������4� � ��G�Bf�!|Xx��YxzF+ �j� BCa������� + OJe� :[~Yxc���G�Ka�iX���4?T�����S ۗ��uBe� ���4��?_��£䥠�|Qx���RPx|�/ +O������›��QxX��X���Th;(��$��V�B�P]���`���A��������p �E�!JA�I���f  +o�ೠ�|Qx7ƌ›Gl �����KjXג��(<�Q��wk���@y��Rn�R��g8��Ix7�����2XS���M�xD&�b�$<�vN“��&�!�$<��w/����Hxz�,|$<��J���!�i�/$<��G懄�ZHxR* �;�'��%�� �=F!�Y�M&�1�~Hxf��Ix(��Ǚ��B�#�ZHxG?$<�rg�B���ש��%�i�_Ix| ��� ���P + �B� ���L£������|Hx��nI%�}o�����쇄�b�J��B“�%���L“�%�i�VIxZ}W�"�_=ͅ�G�n!�i��%���J“�%�і_Hxlz o��z!�($<*< O۠/ o\㇄� +�J��J&�%ի�N($<ƥ O��J£�1��L�%�%�Ix��B�W��dj!���/ ��b!��$<�a?$���Ix�T^RR��V���?YIx�ֿ$<�8 + ��[&�m!�����+3 ̇�g��G����M�����$<���7��������B�#9�K�C�$<� Oʗ�G7��2 ώ�%�d�$$<�W^�~�E£��C���3����,$<å���@��u���1^���h`($<���$<ۼdue����D�۪���I����}�%��=2 ���B�C���L�$<�B³�K�cSXHx�E + o+���� �ub���� ��QHx檜Ix �~IxzE + ;�Bƒ�!᱇,$$�}\����&�����4�g�B��J&�m5HxZ�T��$<,D + ��6�&�m!��$<��2 o��D"�!�M³%e"� �%�I,$<�B�C�����g �L����C��5D�0��V2 o�A³?�Ix��?$��PHx�fu���G��C³.�L��{��������-$iVv��V�B��7����� �K����) <���GZ���T����Ax|T᭚�������(�* ��$^R�7V+w�lAx������'˄/����e���[J�m5@x�[L� �c <�)+ϔ_�V��3c�������) eQ�����IEdE������t(�~W��v�Z����qG2�rd�ѓ�G���g��(��}��%"+�Iv�9 J-��S���@vڃ��]9v��l��#�9Ŏ�Zob�s�yo��������tr�8��O"ر7�O���R\�FG�b���i�����ॎ�sj=&�@t�{/z�߅�����AˑNG�7�N�N�7H�~�Ș��n�M݅�,����Şk��u��ޅ�k��ޙ@�,F�6�ŬY�@�(a�o%�5ճ<ǵ tR��� tR��|�����@ה0�l�@�7m��ǒ��@�)8����z���6d`Z�.�����94ʅ�?�»����i�� @'��\�,�����+\fe�&-� @�.���? @װK�sj�?��?q��koh��I���n��ٶ��s͢g�I���=@'�8�tmP�uV]ï!�E�3����݉� A��:��!ʮ�� �˨�� ��{�簒 ؜9ɽ =}N����>���}?�='a����Կp4�乓6�{��.2uw���n����Ή�(�w��tn���c!������a�D!�i��{��P{3#�nnkF�����9U9Q<�as]�VL�G�rg-g�q�Hs� \��Ì2�����aA��7+�̛ �!s*Hk�"?���s[tœ6������n�����(��|����1�.�N�%d���-��H�����2̜�,Z�B{BN������Q��Z����5����޾��V��ʵ~�[�r 4�i�ǀ��r`;�\�6�J�Leq�N�e�%_������Ԇot��,'�a& � +/}��P(�IƧ��ôچ�z�+�cĠAcY����� /��Sa��>��\9B �z*WN���l��J��+G���o�ʡƈi�:��8�3"�>G�d9=N�w��g�d9^�B&��K�=7Z���{�=���=��/�{�ۗ�0��X��\�`9�㰱Ò�R��W��O���Y�>�ٛLN��Co�g�嶒�r[ ���� � � Pž���֔���]�k���.���ub?,�x�k�l�b���r �q� U����m%��`9�bf*�k��*X������t�0#s�,�� ��j��y�����85��M�c+qi��͓�8Ї^��S:�+�_-�j���PGБ�j��u�ȝ�v���*#�9ZN� �-��6�sZ�r+��g�D +3�������Ī���t����!�����R[� �ڗ�mTS�x��?-��z�7'�m�Z.) -��@�5�B�2�x�gE��A`5�;iC� ����r[ ��>� ��q +��V��� ��*��1�M�3S����0j�a�;J-l�w��4Ng~m�3����`9)���8����OMO ,�������X� E��1@�Y�������m%s��\9�n���ӟ���� +���|`9���9X+"V̙,g�6�A��D9-���J�V"ˑ�cz ��^VE�,��L�K���:o�d<��I�O�,��!t���f�E���b��d9����6Y���W�� Ʃ[�><��؛u�e7 �,��V�0�� �5���~d�/T3m&�5��X�Y��o�D�r͈�f<��r�����4�7�N��\�L�j�(���Q+��V˖�X���P\9��fNUК�y��, \�`�Ih�7d���/ՅN�S�-� (��.I��=��t''�(N +���[��#�5LN)�6,A�v_�ʄ��b!$9���c:��N��iI2Ϲ1r�Q/���"'�FӴ�!rz�5TB�x6An ����Q&E���q�6dz��v��%���uz\;N{g =Nj���� BKA�k�/x��r��z��3���j�W���qp{�˲�j��Q�����y/��&x�X9���Ʀ�<7=N +��E�k���]�ǡ��N���[�j����,U3=���i}��^����z�2=n�A�kLa�� +.\S�� h��5m���T +�s��l%3��F�m8\�ʨ(vmT���?v��i"����j@��������T���C�p\9)�+�!r��P9��6D�Uv��I�t@��eƱ��5�_�V!r{L^�)a�D΂�m%C�9� w�p8���� �SP���>N��� +�� d��P����R�>o t�"��L�۪Q䚐��#�*�RL���P�>���"'��9�㸗V�omU�dM��N�Cy��J��3�Z��$ %�A��U�T[P䶒)r[ ��^���d��Z�3�R�l�}�� +,���9Dn �!�%g?�gjP2�F�{��J99��q� |��)z�wm[�I��Um�PNG�a�̙��2@Uo��5�qf�9)��������kJӑI ��V2@n��k2�~���ý5*���Xp:Jȟ�+�;� <� �S�eZ�w{�g��4t^^��8|+_�4w߶�]D8����p����u�T���G��m!Q��8eN潑q ��U�q�;��l`��+��޼��R��I�Qc��"VymXC���+����'�_��L�`[ؠ��9'�t�? �����O�]� �K�L��pw�g%���D69'����f�iٟk�ᶐ�pK 0���xs�ߢ���];04����� ���J��m5�p�'�np�b� ��pʻY=@p�l�*3-���$�-3{��)��ؼ�p:�=�U�pڱ�]�{cᴹ�۱]�&{ީ�j��oi��8�$ +@ �� �۪�ᬚ��,>�j��[e0ݖװ�#����;K��}��������6� +�k�Ì �q�d/0��k ��S|�`8��l��`8]~�_ +��>�p��I�M�����T2�S#�"�I��S��ep��賒��J��p +��Z`���qV2!�ޮM�#(?�C󚷴��]�p��� N��� ������ gi�#P(��8|TE�)�d8T�M�������� G��q6�pVw�������W4��'�&��}�k��hxV�3����d��[�� �I�^��ᰔ�����EG8�!�c/#:��/U�������Ǭ\8�l�}/.J�ͅ�L�S�p�s�� gf�+��n+�̅#^�����Ow� �h����X8��� , j$ ���~e�‘)�^aQ����D%�p$I�*���o�˩p�.��+T8�T�,*�6�c�2� +Gy+���Y���IP�PT}\�p�7�kS��%��.�p��( �X8�;^����5�����p ��[�p6N� �c(e�(�w���߃�YN�*N�M�͡p��n@��l˒3A���A������eD�f����,(�f��>�B��X��1���*���)�O���i:��9Γ�G��������l-N�aV8���s���<��T��ҝ���V��o�z��ߔ�|)�v��;�26�o��,���w\f��p����V�LXd���}��?�DA}{mM��o���z0#���4�����7�޲ K�7e�.\� ���q�<�l�(u�=�� ڛ +�6< Eu��7ga�lj�)�7���٤7��Ƶ9o�V�럂y�85W�����3�c���"��G�oM��)olh�I�]؟��n ���2��ޝ�E���ʒIID�щQ_l7�<_h[h������f|���&��oź�M�~�MuS?��چ�Ѡu��t��e ���m���n��j�W�n�ȭ.���Q���MtS)�߶��'#ݔ��#��}�ak+�`s6�n\�]ӭ���gA����P�����F��o�]P7���Ce��Oԟ�M��㲜��rA�|��+�@�i�Mj$�nz�)=�@7��Pr�<���"����%���LsS���#`n���%LT��iĥ�rG��%���u?���k�W�a~�l)ˋ�i�������Q�m-�Z� =��p�r��{ܞ(� ���f `:7� +��sZ�6�Dy��ަRއ_�e2ltw�@�т�LAl}��`5P,ϟ��l�ۦ�_��ۦ �=�mSj��fn�����LK��M"�^Lܶ�ۖua�lIwnl��]s���U���6�����o��m����@��� +�f�Z1��Xg`ۉ;���x$E�c���SY+?+66r�'��6�O��Q@��`eF����t���\G��c�+n��i��i�X�6w��N#8�ʑ�mY�6�t��MkE��M͖��(���x��,>��_��φ`�� �6���ͦ4�1�F�Q�{ߕ̦% ����!䴟�\6�� +�M��1�f�o %����R����� �F[���� ��1xl?�Yql��!�9�͌Q熱)�`i��b#m�#�0��[N}D����2 Ʀ�Ć����?c ����� ���7�M�gKUg[�p�~/�����Rq��Z�I��ت��ٔ��bkQ�UXl��K�ņB�5Xl� +��>k�ؤ^4���(�~��3Y)�L�Yl� ���JV���|5�S�[Xl�z�M +�F�b��w���bkf��nY�Pl,��Ql ���(6)Z���&�V+��4\X��Pl���L�M�aCM�F{���].�AJ�[�=Pl*��r��ؔ��Q�û���bS�����Ql����ņ�,6�TT��ؤZT&hlRl����c��v�ɖ�W�'�k�t� Æu!|IT�" ��A�o�o��X+��I�/P�u�������3b�'5x�Ɔ��o����p �8I �M*�Ec��q������2�M"�y�ظ����ņ��4��YN�՜Ŧ\��e [�#;�b0j�4��^�G��L��,6�XL2��{�s��t&��bk��ғ0��~~�eB�M5~DG�M�{�b1��� ��{��t�'�<����3�L��5��p��M�|�ih#����3�����6�͔�Yl��bCe�,6)���f�I1�f�5k��7���X��M/�}Vf��ش��Yl| ���bk���]YlT<��t^}s$�a�!�w��+I +���L:�M�4��2��J�o�,�U4��֬�o���sۖhXW��� 6�.�>+� �pv�ؤ�lH��b�2'2�����ϴI�|�snJ|��i$W�E~��d��� Dnn��Y���ϔ�u�E=7�My33�gM#;=��fm�۵`l��toK�`l���� +�^�� ��~?��� |� c3r����D�Val8͇��5h� +wp��Ͱ��Ual��(` ���06�d��alt=!�06\�<�c���[�al�l�� + +S�� [��YR`l��� [#rw�ckd���ケ��Z%`l���=7��Բ��BcSh�c� +%�p���� +c÷�,����6 Ʀ��e��� h��y0k:���c�zˊ���j� �j�_�i�����?(�ؤZ��XlT5� �휷c#M:hl������Z'�~� p86�xǦ�(k��c3�4�5��h86}��c3��cS�����cӓn����Q�G�=���Sz<6Z +[�`�Y5&�Dd�֊��H6�-� �F�l�G�e۴*��dӂ��&�d�n�}��^=l��d�/�D�B�i��3^&��nt�͂�֠���u�D���~oNdSB��p�d�1-eLXK#���*h�լ�3�Mo�R��P?HlG�޼� 6W:� ���.�k���D��bC��(6�q�� +��Y ;�Ŧ�� �w���o��Xc��w{��h&VPl�=EF�%%���(6z�g��o��W��Z���F�j� ņ��-Pl(�/t��v:ݭ�20DXo������8 +�kƝHlz�b�Alf>< 5f2�-��9U�۬ߣsؔxs�hU�8ll �m+�^,58l֌?qؠ�}s�Xa��� �p�P2����ob���(6z�~s��(U�n"9�X������a���u�V,��F���� �pȚw�<=z ����O�+�"Q6{8������c�V��x��1�>� 62i�� �s� b�LŸ +�M*A��H�����r��D�������R-���� �b�-�S@lj�a���Q�f�J�F�Y� bCe  6�Áms�xV9sؔ�!��6J�`8����DҴ}��EP�t?l�����ӯ|Z���V$S��<�Na�8�7�MJ�J�Pؚ���Ma#�:f°I��pư)@cq���5� +W«�͔�@2��E�ȸ�n�M���T��rH�°��N+0lRx��M��2��"v��ac�K_�����U1lp�����6=�tf(6Ft�N�a�go:� +�2�m�n����`��'ϙ�F#�+�/R� ~l�c e�9p2�m�`���&�6^�&�P�� E��`�b�=���ym�X�앶y`�#�U�$[�=��{� �龷�%%9�6�Ƀ�Z���YPy�l�����:����� ����`K�s03^DZl �N�� ��4Y0���p�ӾЊ�2��ѷݮ�B +7���`S�E{a��z 6�wX��FV乏 +aCmNXÀ#�`�5�>�V)lp�K� e:э��9+�M��o9@l +�Z�(@l��W���M���6����#:����&X��v�^�6F��o����F�ԇe��t��C9��#�D���m���WW�`�ۃ勫v�x��v뱙�j��[hСj�y��"3� ��T#�=�"��Q��4�OM�||�S����NS�BB(m�Yj��f��D��'I �HG���n?�������B����'�h*;g��4��N�C�Z�S��iK)�4S�r ~���v.���P9��i"E�,F������n���T��<��4z�{wS�ϫ��Z�LNS�X*r�����ǜ��#̚��ig4�l��\����v�~�24���,KT<��9�i[HĴ%0��F^���R-j�2.M_�pR�KS �h1 -M�� KC���J;n���/kW%�ѿV�m��洖y�����I[bP��h��������pF)��X�_�G�HS�Q&��HP���`�A oc��T��gB�;Z�*��N�����z/u�Z��s"��ѓ�K�4k.DE�#�Ԯ֬�!9�2 ��yw�g�7.|4��mY� ��` ; M���l��L��ˏ;���r�r��;u-@ +0�@���/#!�HO?�"���d5!M��O�|4y[,|4m�l� >�Ь�N�I�|g�Ѥ��! >;/� �F_B�H+ +e�xDenҬ���jHS����GSTܼ"���m +�l�ѤX���%%��L���G�5�TB���)�П�h�~�u��^���h��K\�hR����h����=���F�qW:�D/�s<�s��c y��h�]!3x4%Ҽ�����1TƣI5�_�ѤL�G�G�b�ŌGC����8�9P�+�)��J�A���5�D�>��`���ゎ֘�Z���N�l�њ��$+�y:�]�|�1%�Ѷp4m��,�m��g:�8v�q�V�N����G�j�x� 爴�� ��hݖ�֦T$M�`�=#M��$ ���HC �i�t{������~^~�ݹ9�3$m�{�a��}f�H�Jf�m5i�憤i�L�%3��N2HF�G}��HS,�zNdF�B�n F�T�h���Jf���&i�Cٞ#��P�z��H�j�#��&�z9;# ��Xf�I�nsIC�Es@��Hǭ-H�n��d:$MWqxؗ��"-�EH#�~0�;��i�&U!�1��r}'�IG#�m!Җ� +�%��wA>�8x��[!���Ѧj'l3� �)�K�`A�I}��,�rXM�B�q"/@F�����a�8.��/D�2@����g +�F9�GG�-� �L��;,��k�ψ�Y!t"�ɩ�y~�޶��/@�Pd=3!����L B���B�~���2!M����4B���(�eDujև2�k�" D�V2"-��H�u� 6i��狐F�����U#��! ��ƙ��j�bG��Y������gB�<��A�Jw�����l%Ғꄴ�2KA>��Y�E��w���5��F�s�M����'"�(A��3i�4q 8"-�BH[b�d�c�z��tH��a���o�0..>�)O48g��G�� �q�q�/�K��h���ࣩ�v���i�M��LG��1;�h*~��fB�ɯ � �h���wv�#no�,���� sM�%��8m ��Ā��� ϙhӹ ��������SE5D{��e\��q�_���~�w������ �����M�u���!�iR.U +��I#��O��>vL���0���Բ�">�Z�o?O���S �"���iSZ�⛪��yE=���&ڎ������䠳����8�n;�ڤ9���Bm�;-�茸�4⌎���w*{���蛣6��?��)�����gF��Z�ǂ +х��׽Yjj΃ue�n�Ӯ>���Ԛz�`s��Z����xj?sm�Ü��,�,%՚Q��:QM&��Bq�����>+л���<�h|�\�?sռ ��m���o�,�G�n�����-�ޠ�� +Wi��n!��gκt*����c���XU��>J���� �6Ώ�p�ZG�VTXq��{Q���R +qd�h�++�TR�R`wΨ^�r��mS�f��S�唵s�R��8kKyz"�m��ސ��V�L��H!�OW\6����9�������^B�#!^��d�w�r<�n5 �)~ ��c�� J^�n��SQ栰���att��z��`�~4̜cs�Py3��poلlE�D�1��vf��aL��54$܎��!`l�jskC�̛��� &�� �& +?{(t��^0�L-o�ؗ`���R�ߘ7�C5#8:�(���![�\~��& ��3��'O�U@z�i +V8�?ßϟi[ +����WS.����-�K�$�ަ��Đ e|H��Me���u|�������a��Jo�磑*�g�'�x9�5M��?� /4���c]'5�� �g1�H�����/3���h|,��q��_Vk)�2�]h!~&SΌ��T����u�����z7�F�׭����)N)�Ƴo.���in�Q�����hg/�3��e�H;g|F�%-�g�>]����pW��y�f4�kj��m�_�<��#M� �ͭm(�l����q8_�,ը-���L�0����F���z�K��x\6` 1R��]��ö��� ����o)cx���11 �@���OC�”��!�������.F�5U;��F�<�P�Ǚ|y/�G����҇ab��[���ehiƙ�N���.n�&=4�7�Mʳ�m[Uf�p�pn�%�Т�ݟ���O�0��8���gV�����趤vc�M���*t]o�j,�\��:Q�>�����.��<�� b~]�m��P:T�"m5���N�#�0��L3_"�mRY��8�W��t!鍦Y _€j�Q ����=Oʩx2 +O��"�%!�mo;|�`)�ϰ2Nͳ�լ�����D���"��}�UT'�CU�z��ԙP? o��_� u"����t(��K+gE�ێh>'�  +x^)*XA��fP�y~�<�ޟ +A[ ���?�g�z��M?�����7䣼� �s��2���j�jͤ��C��Y�Q���*�B�L��3��g�޷iA�C�h5˜���67��{���P��x?�qȤ}��V������H�)-������ף_�R���i�9�������1�:��P8��e~�8��e��n�T�V퍆h[�P{�C߇�LfE�YJ\ٓ�z��m�*����e�UD�M�6~,t����x-�"R�M*� T�� u�&t)�OX�>v�jT��6���Z��}�3��l���s+v���#�����Z襤n!I��g��E-� i�s�c+���_ �8ž�{�_���V��6���M����׃�ŻV��c` �P�^)��:�?���޶U%عs��_i%M:�%tƳ������q†~uU�q��"���Y�.��: j$�Բ|��Я������ ͤbJ�K��c�_RXf�1�)����c�f'5��WR +��h����K�7���l:��K�n=[�7�m���i4|�,㬵4����՛uD]�6� o�1|�Sl�C��A3- 4IU�ۚJ��:��g-�yW��Ԭ�l�Vs��43ٺ����o��k�"V+wVT���*��{u��$\S*Q��9e���B_Vq���P�X&Z�h��<0c�5�ɫ�����N�P���c7N�-T���� 3����`�Z�[�� p�V��,E�®�����oSH���4��N�K۳�c��I_Ÿ���֒�K��љh+�a݅`u��w)��'�~� =�i�P%��Y��m8��P�& �L��8�@*vZ��6 ����U�"w��Eq��{?#~����H9m��u�z����,���ػL#�M՜ٶ������Jf����ډH�yS�b�F�`������J*�����[����N{�t��Ш��a�+��l +�����RJ�Q~G0ݴ��Z�G���OYukۤ��U��(�".�~yy�?�tI�� �x4��t��3�`�K�!�G}<�>���T"�+����<=^a{Z��Iҙ��I�p�}^�0fU�������G/�)��4ڀ�ƛ�t7Ѫ���i�7e�ݤ� o��X�K�6����Q�vC�'��ΙW��G�lֱ��_��>���i��ϒc *���� A����M�=�'dS�x&�6_����N��zJ,�����&̟��i�M���;��C_��m)vQ�A��q�OW��b�[i���qX'�y�6��O6�۸�F��(��6�RW��� �%2$�4>�y��K�ǖB.(Zz� [L7�,���l=%~�F5FV2�22�b����8Y�I(�%˻�p�"ĻT-��xv������� zە�)�)��)jj��k5�W*ⷚy(�yx؃qKA�Ko#�&%ʖ2�F�mUn��#�ݒf�u)��t�m!ݤ��8��n��i�[)���J�w����eз��~�s��_x����X�L��]�ؽ��rg+ϱ;/U�I\�z'�fYno�L=)�+���q� �l���f+*!�+@��h9����_��wk�z�cne=udD�q�){��7�\��NLY�_-��T�"�h�q`�k�fk|���n��_�`�>i ?}��@����W>����g^ְj*֬yD9�%�2鮿�P�.�� �';ma��R6���b�v����m�!p�v��3��i~6�i�*�$���l�C���H�-����nd�Aw��g���� �F����Fg<�⡀Gs�u�bz)2WG���>։g�{]?��>�k��x�����p��R͖eQ�,���>lKa���tlYQ�f���$�,�(��,������`o�+սA*�7�"�[܏�ؒr�~�I4o� ��x��ŀ禐yU�N��q��T�CHUEI(Ϲ�U.D�u;��7V�� m��� �<�F���d>Y,&�O�1û$):�z7�A���_=z�N�V2�Mq�ao�����!��[�WK0����M*iA�ʣp�%じ �P���o�;��zB/��7)�Q"�B�C���Qz�����7I���"���/��ġx���2j��K�ZG1"�(������x�d<�V�]Qm.%)f]�~o��qx�Y߃޸�$z��#�p��D;� �I�Q��)�G��8,D�w��nq�t�P�|n����%&�����Z e!��uWl���'Zi�-a��aØbM wP{�H]��/o���-��4�x������%{�3���IU�)�A>(X +���8����#���*9�]�u3�x���F���+�EN*����P�3��o���'�Q�>O��J��'C9���B$I>���[<��?V�͉�������>��t��AC�E�J�9. *��F�i�-T5�ڈqX��{,�a��a�,;��]�8=P�5�/���#C�x��cz2Q|�����Ukc)6�#��K������涹�C(�� �:,"��!�]���$e*�'�u��Y3,�bna�4����43���,�>j���ٖ��gBe|���Ի� �s��Rv�U���>�f'��I(p�x��� �l�T�w�ʅ�n3o��V��>.�H��Ѻia�������,��7�8�e�ޏ�� ��+�Y�k��K!=1�k�^,� 7����4��Jt�ͻ�#����[�iCIJ���Ԉ�eJ�hFYL8fe�Z�cR�_�y y�N;fq�P�2�JM��=�WzU�����|��;z����˻=`a_ږ�����4�h�=�����g�U4}��$� �S(߾�6K8�"y��̿F���ʂ�i�=�c��gQ���~��:�T�U7�+�X�:�N��v͛�M�4�-���-^�❳���Dd�'QIDыX�G�]7��a?ӌ}�;���9N����/��b���7�`�}��px���021���i!\@7lC�E��y�2�FZy� ���T�� ����h"0����#�}>O��pt?�Yx���E;(她��r����9A9�0����'������!�F9�a��^fz%�� �ߞ�V�'͛Z� +b��E,����h�f���xL� ��"!����g���8(9�t�(�?�2`ڙć=(��W�E�Ӊf�±��H�t-�Y��V����97P�,��S�c�~�"�(������T9�8v���)Z�_�m�6^��;<���r\+����L��N�:��U߁�1i�h����_/�ălW�0k���%�?m戀b���o���ǘ����f&�{�&d$���uUi<����g�{���yY��((Fݰt��'ԛ��E�Y��#+�`O�ז�l�:��}������>O}���=�e�Ɔ��|�ع��ˬ���qOT��&E6F)8ۤ���.��c��!z�����!��v���>�_���:I�q����Ϣ��C.Y̨�<6q��D��� {0���9E�n3ĆΝS� f�9 �J21〝��eNƞ�sR�y�.��Nn4V��1"��4�B�1�荐 +|N�5�z�,�s(ݎ����+Y�A�;��������U�-'r%څ譥݂O�$��n2ӗ���´�vLzI���Ǧ/F\(�X��s�$��yw^�C�=��k�U�| ޤZ���Yk|���J�^�2��Z�k"3�^�� �����H�SU�ŝ�^s��H2�>łE��5��C��4��G�"������� �f�*xt� �0v``W��e)T�fkJ�w�<����7� E�\��L��#� �*�f��E��I +�R)��խ��$$h!QhՒ��M����i:�2�rD��s�ئ�6�vC$�a,�]c���^�NIa9|ˢb�wH��a.%����(�;����-�>�f2���}}�HG�7=̈́��7�ܡֵA��d��N��;�;9ԎfP�'��Oj�&M�Xݶ0Y�a�9�����o~6�N��ǮvT��Q=#�$F�|G�y���序n�������Aʛ����nCd߈��+�LS�#�O\D:TV9X�� �"�F])V�`h���6�bj:�����/��6�j����&T�O���t�-��۔,"au��������'D �BZ��� +"��L[��Q� ���<����^�A�c�C ������l�Ԓ��K����@WC���/{���ޤ� Sf���� �U�S� R�j$C.2B4R�&Ȇ��'����w��B�>2�ѫ���t3�rtfj�^EϾ��!�"�{�?Hg�{=��a�4�\���V��DL|w���ЌA�T�]9h}� I�R �6�(+@:�ɞ��XS�����R�ROD���2��qz4�<�����F�:�" �ȷ@:��jx���Hf�� HǷ%�&%ںYp� +�2l͌T��9��c\H�|�������l�����j���.�*��F�y[NN)3��!q���T<�$��܌��#�Wv��El�"�������P[@�[Ϭ�O��;�����P���_3��qdZYՊ��{8�qY)'ElY=@l��..�w\y� �U�7K�3�� +}�y� M�o�>�^U���x��S�>�ئU�� �j�[E�?���}n�� HGF�n�A�,�v���h8�*L���,�8��D $yu,�Ř��e���Z����^���qv G�o`Àظ��3�c�- i� ��s�Q��e�FЖ1ptJZ�jI[.�i�e��c|{������{���4�� �����t)m����n�g��m� hT�[�^I�����m3}��bD�r��Xq3TiGΆB=�J�F����}����c��<)ȯ"II����!� �X�%ۣ��'����ŠEQI�O�zV飉&ڴ2����$�.����n�;�����\@:�Xw�=��V���P_����I d��0���;ClϺ�t�x�Cż����2k��w�M���R�fI��m�vo��+14V� ��{ѦI*�eQ��2����c.;f�e����Y��FQ@���w�[��dXL:�l� �A��*�g*�Ըl�(mzJ� ��J�Kh|�ֺJ��v��\P:-hC�M���p���˥�CTXXF�K��h_�@��y�<$eA�PO�ddR�s�:\�5]���m�N����1��;���;��tG��ql+��/?_�ؙ��I����MBs�~��bj��)YC%UE���M*�F�!�jB1�0�I�{�ۏ��� �Y�W����;R=�׬m�!�'E�XB5U��&lٶ���}���#�o �9i=����ZKU����]��2����E��we�x*�NN�rB}R�����10�!�L�$ �������>Z,W/$����I��t�-6KsCe>� 4*� Ek�J+�:��( #qE�B-(����o�'(Y\(y��<5��P��N�#3�k�.�����f�c�ҀVcc���9�ɦ`������PX��Nٗ�[Ē�χM��-�#�w��������)dbl͸w�E@�ʴh>�PD�-KRo�����ƨ;�[���Vf6�}g합�����h>^���;�"���H�/-Ef=L*D�C����gw�q�|7��2,U�9��g��*��8<=4���;��4�m����rs�Hv7�|�ԮdJ�����l���K�_��"�(G KA*j��SN�l֮{��L��ˏ�&��[�\��a���g�m�W�i�F�7����;2�L r�4;�<��w�~�ޮt�x]�x7���y���]睛�i�`��Sގ{쩼�Gb�Ǝ,�䝤H'+��Ǎh!�6�N�\�¡9iYUG<°� �[S�3��\s�4�8�W�.������[i�g�m�X� +}�W�t��=lj�f'x�� +1�m�"+�ɸ��Kw=1���'�K��5g�ew,�lϡa���&�R�2p���z3N7��F|unMjX>�EB�0N��}(mu�1h���r�!�7p�������ZF�>�g���Z�~��9ޫ�'��=�� �:�E�B]c���[�����;�����6�w[�춱�����~���$�g��U(��mk�j� H)��T�m �g�\8�65����1Y(�H��#�� V��?|a�]�P"A�"��~���(�%����:2� ��g�:��#����X������w ~���WXo8+)r�n.��ia�;��1B��T�� �i���uY-�C%?��?p��17�5��8 +0-3�*� Is�Ww�>R���i�d���+�����vi)�-7���BI�$��ɉJ��{�]�/�֙��qy�=unqO��e h0}Ը�}�@{k�`萯�v}m�������S,x� #��n)"�D�v�ʅ?cz��0t���;ކb�������<��(��%h����FtR�5*�e��BͪaU��z��~��� �,��+���Qi����̴��lR���o���B�@ʢߡjn�JO:����˜N����{�)k�����Wғ|$<ޓp���B���.V��W� pD���o������8yB�f�� -��ik����1/����c��H�f�c�|�s ���3��m���|Z��0��+��P��V���UK�� ����w[UnO�@�|�5"��sM��A��r��k��V-5��xF��������,�-ᅐ��ri?n���<��U]Y��� ְ�&���bgv��q�4����'xi��w�Q8��w���^8f ���5J��y)�<�n��)Y�\�������fZBcB��0;��[��ӊ�'B� �/�\U��`N�� ����x�1�DoAy�O�f�k��~�����-������������w"�5"�Ϟ��xR+�c��D�N+�/"�p������D�� �����[�B� jX2P� ��Ǡ"�HH��ς��j ��A��H����HE�1�$��3�B���� �T$s� �G̳ �T$����W$���������c�,H�E���x�guZ�xK�D�%�3�e"^�盈ןQ�xR2/���x�����D��Ӌ��e�(D<�x����D��j�z�����/y�P OJ%�Iy��3��x(����"�I�D<}�J��w��3o ��8� +o+���� ��_�D<���D<��+��i!�)��&�)���x�L o+���U#� �3OQ�7Oj%�I�D����e"��J�C)D<�|��ӿ�x������L�[�"��(D�~]@�c.D<�*o+������R���4��x��0a�Y�xK)D�����\!����"���J��֣�R�x[ "��J�S��E�S�����D<�F�D<��*Og��x��U"���������D< +L �ZEe"�V2o�N�3�n"����Eģ����z_�x�hvĹ�Y"�XŜ��7��E��Bē�&� 5(D<�o"�.����:���/@<۪��'��ɽ�xz�*O1� +��,��`)@���c�\px����o�����(2O���qxR͠�� ���8F/r���u�� ��Љ9��dD�<<���<�~�7On���똽�+����)�_yx=2�����������dq���#����u +2�/�v���x���n����C���I�<<��ó����{�.W���x��:ޟ��#�yx]��o�Ϋ<<ݍ��S����S���x$2O��7�+�Zxx�U^?����U�>�����/��I��*<<��75�� +�c.<�~��ó��yx�7O_�����cU<���+�뮒������ׅ�+<<���^o�� �r…��y�z��^����� +�ì�<���<���+WxxX� O�K�7O��7Oj��uZ@g��O�5( �B������4���q���4eU�f/�F��Ó��������)oRyx�7W^g�����PTxx�i���`���u:ge)���S����#��yx][��9j��J;�xx OQ���S���ãH'����<<� +�<<�Xyx�*�P틇'�����*�����@h������Ӈ�yx=틇׵��<��囇ǘ\xx |��u0M�<< ~���=OO=����#�Yxx�ŕxx��o�����S����c~��p(d�Ϋ<<���<<��������iT~��T�Uqx ���{{�� �<��Ó�k���V��j��I���R�kQ�Y��5�jm���z���^�<�=���~���ˑRpx]~¼��jM�HI�,^�u�� ��i��qxR�VZ8g�8��MÓXhx O�|���1�B��MÓZix�R + Oʛ�'��𸆅���M��a O��J��|+ �c��u�ae�� �� �4<�Yix���o�h������J�S�⛆7��f�ά4�!��7 o(Xhx�ᕆ'�狆7>� ϔL�+'.j��I�4<)o�X����7>틆�w�M�ÀZhx|�B���ixzf������ O�@��iة4<���4<�:��ף$h���n�hx�<���7���($y��P3 OB��Ix��6)4V����F��C"��Xp%�/jA�Y����{�����/B�h{��:H��³��c�}����JA�q� �'����eZ/�ǂ���3 +O&�7 +OMD* +�r��£@��C-(<�����B�)�SPx�� +�_gE��T��f��>0�d_(�NJ0��8���Qx��G$5��$�Qx��T�j�Qxj��F��+(< �������ZPxR* +O��G]~A��-(��� +��@A� :��'���cH/(�����oR��h����a�:�N��/r�r��L�/N��du��� ͙g��)fy� [Gmc���iA�7*�u�5-�n�&�Ub ���S[��Ϋ��U������k����}� �{ �1����ic�Jb�5��s�U״�~ڳXu�.�WF�53u���C�.��kX��SQu�\��F�I����F�I������k�F�5�&|NG��L�2����kj/���IuMk�c�M�k'��T��!z��Px׃T'�窝�T'�疜�T'��ynR���u�SIu���poR]��ҹAu������2�� -�:���y6����^�NJ'ěIuRv��&�I�Wۤ��GPa�������k�gb�5���V��w��BT_��M���N �稠:��{�ks��9T: 'nͣb����}S�͸�{C�NRHOeԩ��-�#�w<�k�d���Uu���3u1��}�K�Bh �N�EϪ���3�a�DAӝ�'�-ү���aD����mͰt�<��; Gܿ*�ivaj% ?��<��w�H:�Ng�Ѵ��m�YN)[1n�ED�7 d����+4���Bb�-1Pt�xN��N���I��:��D�Z�}�o8�n �B�E��=�G����PgMJ�2�C�i��ȣ]~O�H����=,@הzj�=��5%e�@��o��)�褲tZ����G!�е�����-��i�Q��ר��'��`: uA��z��.mPx�@���9uHmd(�YJ)/�(s�N!���c�1洱,�:M�۵t2��$V�8� +��/k���~��:�4��s�PcĴ6 :��8K �n��ZE�i����y6�N[�:%s��C;�8�uYԔ�B�ٟk�ᇭ��`б����X8�]�o�@ǿ�Ww.��mY�0����B��?�� �~:۳��ӗ�z�fE¡d�A�����*�rMAD�-Aר��8:��M�kXn�V t:�g�qo�c�� �AƾX�%,cz鄪�a۵ �m%薺t��L�N�k�V�U]��~�q��q��t[�����i�i�yΖ��g%5~+ :}���$V]��xۨ@Kuڴ0~e�MtΠC�8���V�A�isǺ����NJ7D�3�0�����t�A0�6�����x�b�V�~��@r_6Q䝔ĞJ���>�h�5�.y1�U�ϓ�{�m��n+�A��Šk�H �l�~%�\<���a�,�����ς��j ��9v�-'����GE�5!fV�����{#���Yt4j^��;J�Ƽ�����r8�X��<�@'����&�q�y]�@���dz +��.=�9.���Q��tlT�����l蒒t[ ]'=�uE��'��z%��Ex��@'�Px+t�,bŜt��k#�8��v���_��J:ML�( +�&_[�n+A��@�u6�W_ax5bxO:�ȩM����b �Zh�̳AGé{����p�y4�Z�)�ȇg{�ν��D!��Ί��R�0�B�5�o���U` #��aZ�,]���� 蚡�gE�i�׬f��r���ش9B*��ߥ8��p���:� C�@'͆R�!0?���0Cp�����dߜ>'�m��$4,.�=��홆�Ö"���F��W�K��sC=ms�Xf��Ν����9�d3Q�Jkcn蜖�z� +s���B��qo�N#���s���ܼ9ͨg?7n�#�Sisf߬9�I��jn �4�����C@=8s�3mȘ9=��f�����䘹&���ق�kT\cc� ��f�Q��.��V^�q\ma�$h� �p}3e�� O�PP暈G���&x���Y)s��aE3'�����5Z�e�*����q������,U3fN?��;0sz��^��%d��3ט��k�b�D�2g�)M�{��Tn��m%���9m׮�6E�ɭP�6��/���m�撒hs[ �\3�n[�9~O��5��P��6mN +�E��2�b�6'��p��P�Ϲis(ZeڜTVЋ6�/{k[��K�I\9��>&���0�DN�涒is[ ڜ��+���n�5�6ט�G>N�O ?_;.����P��"���#�y�h�qs[ɸ��n���yDV�*�4�Z nN�͝ ܜ���tn� + ����j�G��P�{n�g��SqsM#&��7��h;���m%�斺psz)�&�ők� +����)���>����-a��BZ�(ZeiP��F�k��J�99ҏ�8��Is���\�VIsR~Uۤ9���s�w����4�z��&�I9�[�9)�4� ����N�kJ� �˜4��B��j���}�� �=5*�9>-���ǫP՟FA`W�2���eZ2wE�'s����.!��o��1w]��]�8kS?+aNm��uQm�? W�/����ۢ����f�i���gA�)�� d9yh>�k����H�+'��X9}CQP�0�;�mA��)���L9��Wq���&�m̀r�{6%N~��O�]�Ca�8r2F�d�}��9���o��ơN��3�B(�%AN�{ޜ���X��窕���V����΄�[J�m5r�'�n�b� �rʻY\-r +6�66?NQ��ef��8E�ll~�N|X�e~��+��M������cK�8�� +��u�����评� r[���:A�B���,����Yߪ��<��^](#�fA���@�?K�kV9+A��3A�Y7�{䤐]+���EI�䴷=m��9]~7�$�*�} �X�$r����9n'#f ���� s���}V���"|�A�k��l� r +���7#����ύ�S��>XB��q��\!�(����5&BN� bF!׭r �)�v;��^�2A�.Pr�J�,����? ��υ!G�B��bșs�j�!�5�j[^rP-4�B��п�!Ga�ž!`@c�bȩ��R�<r���9+CNu�$C�_D� G��2���9���0�I ҽr���>���i��r(��7@EW��>\��Q�}����c�X�)ne�?�ǁ¸��Ώ7�gW~��2y�?\����B-��8���+,|\���j�A�t^��5^�sl|�beM鼂��� e���=��.|�'�o��P��X�8�� ?������K`�[��dL/`��55�� +~\���͏ӐHߋ���qrnzC� N�{�1~�:z��>g��i �.�F�kO�v��?�L�8�� +��G6G[P��2"[�Ҏ\��-z�f�֬GK��E�c8��9���)���q��4��m�j��Aa��=�)��}��4�cS*�8]�E�k�F�����(�c��"��3�Z^��$(��M�q�yOSV��a�yX �8}[��}/�� �9>�'z���^����������8y����8�,V�'_i��E]O��iuL�0�q��#6��]��gVh)�O��85�҂j!�N ?��D�ϳ�qZE<yÿ�#>_�8iZ,X� $�ذ8���箬8�}�ymT�4X�ޯ�>}̤����`���zj�pN��rQ��WN����-��"��8qZ�O�k����`. N�M��'����ʉS�9݁'�������)1)�Π8��36(N +���CQP���Յޛ����8��O��8}���ӱQq�bd�G,�>:��˙���@�.<1�*��\�����)N���}A�{߁gP����lN����ϳ�~��a��&) q���g#%#�4�snB����]��v��}'>�����p�-*N5'�)3�����o2A��}XB�i��Es2�ǩs��ޘ��_�yw$d G�� ;܌Eu�����||��L8@ ��N&@� A�����h�ĩ� +�b��C�ip�|�����)��5l��6% +N����� T�m�M@p��(�2y�fƩ�1T�d�$Vi�j��#w�)���N�#���h{|Y�np��BDBO-bn�*㙑��h��$&�\�}��<(x��et��z����F�p +��M��\�&?�(�s���p?����~S��V�~S���a���l~��4����[��7���0if��"D�����q^���s�a�k�r{57��M嫟�)4|l�Y�o�/��MIn$�o2u�e,��T�Bi��ߞ��d�M�#F��}�/�������rb��@�C3-�@=J%.QQUs�8���A{1�%��Z��Ӝ����Óqo���{h�+��:�M=���/��۝���鼵 z�?��X������1o���p߼��:;z�`��e|>H�_C6� ��9Nq �S���Q��-��)��?�Qo��ooo��O8���d�2���g]|7���6}ۜ�n� +c���4 +�n ���߲��$�I������v33ʨd��6�s�ݎa���uSK�8+v6jW�{7�nC ��)@ay��0�����Ώ�'U�+��� +�w.@����s��c�v�9�G�*�M����D����F���+ʍ�ýAn�R�)�v�B�7�D�t@ܔ����nJ��!-� ։w��থ�a?�nf���6=r�m�� �A���Qg���b���F]ٵ�m��jn_�A��Y�mP�!�8��:��MmS��'?C����"9��)��A"�m�F�2�ڦ��!iQ�H�M:�9��V�� ���ڦ��3�M'[�5�mz�m�Զ�|R-Զ��u6��ж.�mCe� h�nق�I��c��I= ��ж�S��7�M�USeh�&�9ǽ�m$�-s�5�c�-�6T= �&�Q@�$�\��@�$V ��6��31ۚ-Ge�5ʷ�k3ۤxlɓHZ�����lk.H�8�M�{���&kؠ�!1ۨ�:�c3۔{�\{0��(��6�ff�x�v^ �m �}Wf[����نB� �m�I�l��I%,��mRX5�M�<)���6�W/���� ���5jr���6�����&� )�D���Em��d�6."!�����J��m�4�^@��)�vwʏ���Ζ�m����6=%�=h�ru������m:Ӽmk�I�R3A��<,��m*�#:��m���}m��5����6�i�@ۚ|F�IԶ�MW?�m��k�H��M��Dm�HYɢ��27�����m�,\�&�PhbAۚ��� +mk�#�oh[�.Y�6���Yچe��o���-��ָP���F�#�M��a�'��6�?~��V +h��\� ڦqǢqm�+��� mc�Bw@�Z��,h[�fe����sۖhX WV鱉m�]`���6T +��&��c3ۤ Ɖ m�@��3m�"����� aqVj�l�3RP���(T��md����f�����6j����S۔8#cX�mt�$G�6�OܮEm��Θ��m��Q��m����Y�6�F��CXxPۈ�O j[��ek�چ՜�0�mT�0������U�m�����m(6�8��3��C���w����چ��g6�mX�yK2���g�pQ�@e +�G�ڦ̊YK2��3��AmkD�p��M�f�Q�M_��*Am��m�yj3�Mٸ�++�m���@`�Tqz��U�q�Y��c��G����*��x��uH0�#�km�>��Q�E5t��Y1X�жNg�Ϲ�mR���M��0 �FY�E>چr;nQ�H`S��6�v�����&„m����ۦ7�L�mSn���f@jL1n�G�� n��� ��fj��)�N����I�-Ep�(�ë��mJۂ)�m���%Nn��cXݦ�5Nv����n�#LRa�鍠��۴೵I��4��|_|�W���d %ӽ�m�� ?��m�]��j�@�50�Ͳu ݦ����nSF�� +sg�5� +i��mZ[�e�۴��g�۔ǣ:&��4:�����C����*��l��\�6�!�� f�+��+#��z�6��Ql ن��=T����lC���=�SR��ݙmz6�d�6�$zh %&�"8�lCQ �b��1�W�,4� +꒝�&�b��l��۸0�T���@+�ǫ��Mc�Y�2�M��-8٦���*��k 7^A�i�@���l�󄋿�m�(8/#se0����"�&�_a��bq f�8�f��Y�>*�M-���>w` ��֩��w{1��:V�m�=Ef�m%C’��6��gf\�of[g��i��a�`��ۚ� �نH�`����%f+�%Ca�I5�B0ۺb<��M����lS+nJF��&��� �%!۶�6���1d���� l��}��}�%%ߋ��ͺ�'`��� �=����� lC-�6� l���!`��l����Q��6�Dr�����L)Om�G�c�� � �Q��)�P����S�E/�����y�_Dl#�fg"�)�Ik�Elk�����=ɤyVb�4��ub����ƙ�qb�T��Al#�zy9��;T�D�?�<��T�b;����,b���.'��u�M�"�Q���)�m�³�P{�7� �p��Ŝ>�U��6�g�;��Z<�b�k#�3�Uqm2,XK ǵ�~�"+pm�;��_��(�j�" צ��CF��8Nw{�ڤ4�� +� ��ƵD3�ڤ0y^�4^�⼶&�%Q�aS�)w���9�#s�:\zw�b:Ҿ�]NS[�6T�i�M +��u:d� �ymT�c�^��6��kC9���`5^[��ݳym����O+��mF)�p^�L{����ڶ�hmK XM���!ɶ� ֦ͮ�C�7�9���=+�m�Nj���i�Ԧ�Ԋ`2� s{��P��M�}�Ljc{���c��W����֥�X,��:ﭒ.AjӾ��Aj�J6r$�Im���`��B[�Pf�Ѹ���:N�6�e:�m �ՖT�f��5`m�ҥ� �6�I~���w�b�Zu^��)@I�r��n��֦00��k#8l�+����c;�6�"�}TZjs) \�J� +��.q�ൡLG�!�c>g�)p=�p�Ma_�<Ķ�X�+��.� l�>���qm���[��û`X��T$��e��7����Bj�òVc:���ܰ4��p�H��ka�p�sS�0�a�L���x�;m���:m%y��M�v��&�r���4mT<�D,Ag; Gm6�����fS� ���f;>fLZh�%d2�57�M���=��AЍec����]�(�fDj�3�����2p?�� ����:d����ޔ6��b%՝kl�۵ kj}k}���#l�I|��;S/��yXG��W��q� +]���,K�V��9�jK�h�-BV;����)J�V�� ��޹jǽ{̂U���9S��gC�$0�S�_֮�T��-��NT��z�-��2Om��S# ��շj��.�� 8Ǧ���W�S�>>+05a �6�aj���،4�c������|�Veqۉ�Զ�_�J��{;7@�X!����R��B��8KM�Iq;I�ّ�Ij����+�H��q�i�ho�:��^�'��j�9۬$5SG���㎱Ij�\��a��V]����*Xj(�22K���s-���MVc�Դz�� +R���R�R�6�����z�$��T�n� 5)'�Rk��($5r���V��9��� �)po�%��� +m��RSTܼ"��m�ݳ�I�][�Ԓ�@j�^���Z*!@j4�Fw ���gܛ��N��]55��%.5�^��5IO��^@#�p�Z4����q�Q�rY_A�q��#G��+dƃ��D��GM��2G��:��I�����֬LtT��w�Ɖ��s�]��hM��T����FM�x�� +��Q��F�1�� ���禨5E�������y�h��w�I��EM3�( �F��� FM���cx?8jII ��IM���0t��Z� 2K �09M�M����6�Z�d��4����چ�!���05}���S�=Ђ��ݹ�3Mm�����>���m%�Զ05�s�ԴOf��ajr'Y0/T��>ς�)m;� Sk���� Sk������d����k��;�B���5�dVp�`jR�w��ԤX3g��!��05�>v8M ��ASk@%�˶hj����EFS�U�%����R[Z��H������)��QjL��z]�)�x���Pj[�(��F�Z*���H�8xR�Qj �2@�����g��F99Ag�m!��L��=,��뷅H#�f�� ��.7ϯ�)}>V'bC��������+Kg�@�i�A��B�)�Ȋ���t�.�Fh�v��H��AW�v���ʯ㚻HK-)����`�ẙ��,5���R#ݮ}�B�uz�?�F���D�(5T�;K����.gD���=������RèD�)PjII(��J��̒#�z��-�n���(<>��RS/*L(5T<��ϳ��Sc��c�YjK�(�%I���h�9��;zx���n��� R3�I��,5@jtd4@N#9��R ��>n�] 5kXm�~d���ǖ1j�C=EP�T� "3�Ԉ"P �n7"MM2)b��4���T�B}�MO[B��-1�i#:���1�$g�R�� .��Iᕱ;G�H�G��ڿ�I���:͍�Z'WX������~���H՞�L�l�٧x��� �I�:���*y5#g t�[�52�(��q��y��~#`���ȭ�/��rd{�B�),��P��^�2��ڢ� �{���js�:f�8��''�I㰁��{��O.[^�;B +� �<Қ�Q;Ѱ�?6����� ���6�EP���- (Q dV`Hzƹ��:H��QPb��Y:��ȚM$�`��路d-�-�Gl���ĩ%OJ�>�Qj����T� DF��1FU�(5y:j��(��ԁұ^`U��c��¥Z��n! �'5�d'�3��2��}l�na�t ��MW�.����� ����,΀�K$��t�k6d�/"bHʔ�Yo�B�~�q1AzP$�V�EL�-2$ҙ+C`ɍJD�֬��}O./�dR��J>i\#!3��g������,K'D��+1J4D��+�q�T�ب���}��2X�EGE,�<)u�d��Lk_�L5���B�Å]e�k��l9�*�~��s�,�B�d��K��! �������`B�YZ-⼾P.�� \���,w� d/+����FE��T��.<�Q^"�z��O2�l ⺤��6 �(�Eg+1Z +��R֕ �r��Fy�ة,D�����<�0,L����|��-ē�wN�N/ +3>%�q�K�} ��E}��mCȐ� �\Ȭ~�P� � +Aej��S�����o����� +��lOd\��q.�x�<��g���x��z���� ��<��"D���z'r�+*��k �t� �z��0DL&���.�u��yԫ pr�-�� D��}�z� t� t�7V�=���M5 �"rU����m�渦5��O�y��L�u�6J��'я7R��j���'�7t�:����K?'�,9Yc?7P����U�J��4�Ԅ����>�h���Ԕ��G'�ֻ���<���u�����/���7�o����}�$�Ls �i��CY ,��f4�q5}wM��� +;�K��>o�֎AC2��B��u'0� a��! �k��T���<��� ��Հ�q��?�T*��A�#�����N/x�<�bT�͍���@%������d��;'d�h/�zz!��3�`:m�q�3�G�V,�H.��u��J?�5�{�\�Yh�6��L�+�u�s��>���ׁ y&�%�N"󳥁��JN2> G��gy�"��J�X?]��a���:Vb6�l����ѕ���ǃ�ln���=[�G �(��~�H��)D[9Vl'k� ϊX$��2��׻0h7X(����J�M=�&��D6���>���1Ь_c�K�\�-if6m]1.,�����'�Z�Y��2Hy�� z6���7�&g�E�?#f0�:ĝLN����P��,W(�<��=�|P���ƯY7�dC�R���Y�]�Qz!r"=\�F�N٪s.� %�zK�p@�Y���`M�r� ?�Ǝ�=�}�zYC�kZ�mS�D܄����j��� ���ds� )5&��^`��������Ļ���:�S,b�v�d�I�bN��K �:k�Gm{��$����C�s� D��G%��ਉ�iE�v��z �ZE�]�Hp�IĎ�D곾� �V[uٙ��֭�lY���57J�5�sˠ��aPbD����ڠ���\� ��.ƍ�[�؃����덿�Җ���� �&3i�Zq�lI���T[b�7���X�:�$o����<���H./���B�ٶ�޲'��fh��$�Ibt�Vi%��[L| b3��lJE�G9D#UÐg�!�!X �T�G>��m' �..�܏�i}VFEU{RmS��o���w�mZZ[r���)�n��S�AC}eO�K�S`}q��X1⠞@^�:�K�\���-e�#̅��2�C ��u��ZĪI�R��è�WS[�/��H��ԗ�p M���Q�OH9!9�� � �V\����蚮u���0����Lk�/�.�66?�A_��e0�v����i(1�B�Nq�l�"9����|�l�{�35y}�yړCszzه���?%��˭�f)�Xƒ��n�M�6�95�<���+M?��@;o��B�5��F۾�{?�k��B�d�x�aK�t���,"�dz6����X����ё���� ��׈)lX��ʾ_x�6jIB�I���m;��f� �4v��AZ��p�� +��(�!J��pzn�v����M<Ǿ�v��] :��\��)��aF��l�z��,E��<�qf.�(u��Y�� �=c�\�a4�C�����������J����!M�=�_�T/�h_�8��7:"�拭ݬ!B ���$�CjN���Nu1;���*������2E�Ґ��<}�e��ܥ���DQk���q6tbb��f2�mn�8���Q>J(�b��m���t��~����  +�J�u��4fn�js#�: �/R?�F�Y[�ME�v��SR2s蔨��d����\��ܹE��#�1K�JɦE�0��= z�ܖ����k���1k-VI(i���;�� ���õTg�~��v*���v.v���r����l��7"붨�(��z����(�V!�u'T!�� S����T�@���hT� �\��Q��c�x�W��}K��3�l��,(Zy&�!SEC#Y�SVJ�TGA�a��e�į��^��D�p1N�-$X������+%��Ypf%�A�Y���v���� uX�w��`��n�y��^�&N1qQ�6��Pgf ���ǀ�&�"�=7�Ŏ�$�����|���#�R�d�j6b�/��3k�yU�* ��T�\v�&�MŒ��x�䐛�Z�v��`����]�X��y�}�a�9' ��IT�DDKvZU��Ĉ���pٖT 2S��ȱorTbe �.)��Q5�"��Ϭ�T�� @����~�h�P/4� vɍR}��nq�A��vb՝:(�TW�]Rs�fY�����9kHm��E;�n�#�� +�$ 1H��*% �,�>�ܨ�����Ǜn���9�O�1 +�[uҀ�7ԇ��@�LC����(8�n��E>���"�Y�3'���Ņ و��6���J<�Bk@�O$�lQ���Y[�Q�w�����e:i�5�g.�Ԣ� �E�ͱ� ���f��m�>?��5���",x^~��:]WLQ`Q|;�V�t[�!���6'�A$���ص԰1�|c]��< +��'�y ) �?g0x}VC�a.Ъr��wFi��` Ć_��ܺ5�r*��1N҇%R �/���E�ڀ�\��P�ݫKFm1%�+- wn�)I�F4�B#$w���i *�g)|��4X�\��u|T�ZhoDEx��aX#�:��C��A��@�ڣ�F�*x���C/̚���j��Џ{ǃ}��To� t�%��YPdL�A�@t*�|jNO)���5aA��g�?"��J�� Y�Y�b'ggp����v�>���Kg��/j��Ҕ>���Q����|`�qk�+^!�`�F ��c������{�쫔m�{S��+��6&{rf1����=�fOSf凅�d YM2����m{�Kj��/��{�����ñaQ.Y�1�F"����\�)� h�$ �B���X��0�/K�c�dfj��և�m}x"�ǒ��롭ݠ��^P�JThC�&����)3�h� ��d����J��E��O��dc���u?�ނ~( ���@��#��Y��2����9�t ^�?!���͍��^� L�]9��4�%)�h�'8�8�:�YN23n2���u��℘r����͕\�' Vz#Rz�*��;o�w�����nTth�2m�d�h_1�6u͑R����ʄr�ȦJ��Q:�����C��+j��A���Xj�M�@��.�XJS��Nw(���Ɣ�H��T=���c� ��{6+2�z� k� �%6k �"�9�J0�a�{��a�P�Y*,I� 7��W:��g"$�ѢS�h�цxCE1�E&"˙�"D\�׃��чl�^7DR`��M�*5O�&���KSÓ���,�g�� �J������rW�K�VJ�g���YUI�@�F?��� j���QEo�gA����A��H��/St��YiQS\�U�8p�jɭ��"�ntE��BA�����Ҳ�ͺ�f��ʰ��@��h ��)����b=A!��F�ղ��DaAVG3l +�R���F?_�u9�d۫9��M�-b D�$I�kk���������D� 9Lt�2$u=G�"�(/-�y�ީ͔$ED��(������`���ْ'=(xU��'��u�5��Fv��QbV���"݅�B/���vRe� 1f��O�Dk�!ҕ����B�0�d�J��C��3b�Y<��F� �N�j +�/xoO ����,���&Ӝ��^����9� I�2> +�U�[��K��6 �7tr0�Z�Έ}r�j�6.b֬���7�M"rc�m�!�� a� ��)X���E;�pY�X.}J�a�$�8�R��PQ���`yYg!�lϖd�aT�U6�m2q7�Ф�%�7(ۮr�ڋP��3;��F�l[�?)��6[2�R�v��a���?�bT�R�Ф�ǓޖƎQzLR�ANL�sb� ͫ����aU7ӝ j֧w8������b�Ԟe�~}6���rQ�n��@�|V���x� ������$��ކ�Z"+`�zu:esi+4�'�X0�nwf���&Ʒ�P=�F�`�jb  Ύ��� Bf0b6��h�����NO�� �~�; f�����$����BT�#+xuԫ��š8��&�0��O_7��?����1�ީB��-B�~���D(�6��ַJ �c6�w�*���Ͷ�Z_iH;����hb�g�����@HNɣ΂�e��{� �dI�b�{?g0ԕh�?��_\7O�*�B��N���A�R�AX!���s�K �����Y��.E*�[��`7l#Z��Vp�b4�o 7|�7�e��� cPNiԦ�PhpE��-�b��f�mhs_��6!�do� w�~L]����&��IZ-e��v!�g��NѸǍm�qmQ�9��lq�4�*HU���L{E�5[<8��5�Z9�Ũ������eH ���tߏxQR*,���2z@�̔�,�M�����*����J T�fEp�[�r��^YPK�ɒNkyr�y��)�GB̹�׶Fט ���&�ZfB� +L�[���}��@RTLj ?j����`�Dg���\"Q���YM��;���QB�Q��t�5�qp״3�w�B�d`���B��� �d���e�ֽ��n�,9D��m{6k��ΠmQ2r�M��`5���~�G�%m�+-#[d�lf�}�&s:�uC�r�����XJ<���z<�4a�\l.m��>�(�X�Z���,��0� $���I�/-:��VL�E(��*�޲-;z9�ng +�%])ٴ��Y�] �N�qf��[���EB�ز$�,V��n��n3�E `�Q���}��O't�;;_�Is)8�M� �-�n�a���(�n +(sk�k Lq��o��-�ePM���J���O�5�`�m���<�d��� ��q�P�HX�C�-���m�ҋ��p-a���z�m�Pi?8 �O�5��Ŗ���cL�8K��s[��ΛN�7��7t��q�|s��--���#�9C'���]n��zl��۳ͭ|ٷ ������e� ߗ��. [޽��B�b��AKR��V�/�Q�E�3�G1�eL���a�*�V*�kQ�~̶���u�mH�"��ŒLװ�`�y�?[�����2r4QV� ��[&����d�~�>�r ��c–z�$SE�q,�a"�4��U��� MP,�C �+۫H!����x��h�[M������+=�s;��.Nso;�������2��w�l��~�=Ǫy��~L�zd�t6 �0C}Ze''�n��Bg�,�χ��trw�i�y��q|"*|�����n��ڔ�҈�0�1��DB���1�8�~�J�d+Q�h���r��|`��]��~i1:)5� ��E�4�ͬT�b�0�:*.��7��P�c�3\��n5� n�rf����{o��k�TV'���v4�V!�h���$=�`P6*P'k�?���Y�6%��+( Ė_�VX��e�z��kƏ�� h`}6��d�/�f��ft�Z�j�"����L��m�!&o�Ի�[�~�s?�h�#��g^��Jl�Wf��3��K`yA*?�E3 �)� 6�6�m�E_A�V,� X�Ʃg�o�Goy�^��:������̐�0:� �ʂ�'�l�����b!�QH����Y�K�e���^�c�`2�0�b� ,8*�ۮoE�yI�w �ּ��3�`��ش�l t��|� �ԧlu����A��6��l7-+�����w�L�~���¤�N��F3�^��ö��&㭅F4�Sk�0��<� ��R�� -��͹�P�L���łAV�j̗��}4���k>pp ����4ػk!/��g�2�[���O� C#�����"�qLM׾If[��@�S]������r�������:���b�����'���S�*�h�!��� ��1�h)6�ꍈA7�z��fN�Zc (�8�Y�9���hs$�� �_�F`��1Va��5 5Cg��@�}Ѣ�tF6��� �ZAh�yY�~K�@��5�z ـ��I��E�-9;X����$4�h,-2�'[ � �A��S~��ѥcx�ط�[[9����l1�Q �Ie9�q��pu��%�D������c4cϴ���6���.��oњ_��˲�,2�Ib��ʳv�ᶢ�a� �����\g�{.k��|���x��)Ӛ�\�Kh�/.*-�`�z�� Y��)��oeɀ]���)8~>g;R���)o�� ��n�Q�˵;3�[rH�$�XFq8�-ܓbC'{��FN����O�5���0�r���ne�4����{SUR�E}7Ʌ1"}�Fܐ �'��%.$�\���y�]H��9 endstream endobj 49 0 obj <>stream + �����Ę���I�/�M�Z���"蹛�8����;�7��Frߛ�iɚ�MD�e���O=��i�i��-,���G�%�i�8SK���>�~�5[ �iiJ6�9L�UG�#�s�%��һ��Th1�[���nn=ng}�d��N)ɵg����)~�Dz�?&���Z��`��^q*�o�l�����"f���k�͑�r +�G9�Z�3�R����j��Y����)�NF��t>�6�^-o�jV�h $;FXWe��=�K(��h�P;�#x�����\�ĀJ�)��l^n����j˵�� �2j��c +�un����Q�ݙ��5?�V���Ս�]ov�+<��� m`y=7��h��O�w��O(�Uz�5`�K��6����;(&+}z,X#���f+�Kb ��;g���ov�������=+��'�Pj�B�^�3�0� +�3�ڏ��gj ��� �+%B,HR��74kI 邋�A9 �sC��r/PQ��Fg�K�G�BhU8zV�i��y-��ZM�~�� �K}~!6xjO�� ����dow��q`魾@�z� y^tXC;F��rJ��D2��h�Ph�ut��>W8�k5R�p��"�fQ�b�����"$��ۆ�)/�.`��>`���Ճ ��R�Q��4�e��:��vZRO���V��Ve���\��l)���Q�z?H]��`5%An�'C����fZX�6<� +����\�w�[��!�=��Ɋc�E�]�0��1�����پm\�|~_�g�( ����lc�{D��A���������(�̔ E�,C���<��ᡟXR�k>�"��O6����KJ� +�l��� --{�������E�T ۑ5�^��գ*ݳS�Mn�@��d4^�3�CkP�;;��ީ8����V& �h�Q��w���k8��O������ym��$֮�\�r��?4䪺}p�;�?�͜�-l�~P��G�:���L�eY0% tMQʢ����UI@�T�횗(5X ��� .�$+/63̦ +�-=����4����"W& +�м�����2�'6�".�,���2j��8)P�nvk�p� ���4�N�ǣzz�L%���D���H��*с�Jr����p��ݒ%��4�d�Τnb�1� �,!d47�^'���}+�Fy��]c����.I"2WZq��3�����*YN��� \u֐ꮥ��l�e�W^ n+|U���@n�\Ұ䒡�&���j~&9�l��r�� h���T:�8l��rD�юV��G�һ��Q'��:YJ�[zoc+�� M��Y�&�I��m-�)k3��p���^�z�r����|�Yjږ֟K��jA ��<�QǨ�TN�s���ZD6C\�F���҂��{��e��Ұ���0t�o�P}���@�973L��1�C�>p����FO/�XN67�v�D��(��$�ro)��2��& �$��'�l��dkh)�95�Ÿ��h�񚎨Ds�b�,l�c+0۷��<�:�Tj8����Ʈ���v�N#���'�* +�&P3�n&��Po�)R>D��;��V<�vR0]�b Vܡ����@nUB,Q�h��Ŕt�,Z�e���&4B�#�d�\KG�4�q�l��ds ����6[z" �K+�0�"'�MP���?3�e���A��$6fSRl︣�hW�dQ�-ؖ�.�]�9�R7�GZ��*��J��7J�5��H3�� %�Dg��$u3 '0��3&[��ܔ}��]�� +(Q��")o�|jA��`���J��o���1�r�1ٳ!�G�J�.;pf�� +����T��6(�%C�h!'��S��5U��BdV�8Qo7�Xv��Mhy�l�轑���� \�¯�L ��%�k���ǰb�j��3? M[��.�=��]uN���R3���*a��}��"Ѳ�`���i�,�-�NbKŏ��¬�’� ]�7�lg:QxJLV^�|���M�h}�0�������e�����P��V�8�L���0�[f����d�Ŗ�����@oNL�/�o�:HzU @�]���?�KB(}���� �/���*�3`�� �c�:��)war���RZvl��oN�(�N��� �! �Z�I.�]G:�� � +���l0��ciE:��\�j�Ɩ����8ž]r ��f��j� �r��>8�člA��r�E�K��LJA��o�SE3��MҀSN!潷Q��uu��ȖF�g )�(��-����hP�J�j�I�]K�T\kf�n�T��zg jv���m����X�s�]�nt:� #S�,� Ne#�v�Gj����b���h�ՙX�I�V͞�Ζ�����V��idf����Fl��V�N���(� GDk͌�������li�-}%A��Ej1g|n���Q+��A�/�XT)���G��9-]q�d� +�إ} ��I�Y����II:׷z������q�,�[ �̅��4 �o;ʭ��+���aS4H14� ����g�t�� h�{�ۢ��-�g S�a_�6[6b%)����zBG��z�沚�g���̢�)�~,���&N�RZ���nE�� +�L��n�f��é��.�EC�P.G0ֆ��lC�-8�-E$6�� ѫy�8b�]�²�,Jlu9�߸�4s��2e�FɃ��v�1B>^�1ƭ�M�j�4�� n��np�?Y�z�8��y�h|��U�Z���M $��姬�oEP��.�Ys���&VFn1�^�z��l+�b�HQ�"�g�?7^~��� ��jK��,���v��UO)R%k�� mNɫ����)"O{|-U���<����� +��}�V6��� ��j�_����`NIm^�>�G ��� ������=_�����=�H5�m�Xn$�-�4�6#��� =h���VqzgD��^Gg�z��n�Ց�փ)��vlum\�9�X�e�&� 2��Da���J����㇧��ő�3m� {�����������z����kd���qD��_�WQj�9�m��� ۖ�Fwk]-Q]j�;�3��B$Gܝs�{��1TP�/۪w�P*0X�{�� U���X�h�@���WE���@���ӿτ��)�2�{Ƽ�D��?��m} d�Wh2 7`��� �]��0ώ���s�������??Z�9Me"�e�{������)��E�c�j� :�H���M5*vI������]���^�h>ۛx�ez�c�⢷�v7 ����r ;� ю<��!�LG���!aIv����.u5��F�-��A�X>�jC�ޏ����������W�W�_��� +��G��q��鳿��\]�f�~�~<���_��w��߽�ď���x���=������W�?����m��I�����.����������__]��������/{�0� ���o.񷟻���/���۫�J���{����ߞ_��g��z����? � �֮���k�G����W_?l=${��Ǵ�����`���������� ���~���7_���՛��##�3�>��/�����ӻw�oj�>�{���}IQV}x��Z���Ѯ�ɇw�_�������vz��-�ž���v<��o�]o/*��g���gW��S����?_]_n��k�<���C�}w󇋇�o�0��+�:�vi۱}q���?�/�߻�'�?+fom#��3�=�,�'����[����߳ϼJ�ݽ�������o��������z��nw\^�>���_`4���8��o.������‹m����o��^=<�3�w���#ܿ}������ˋw���gw�o�o�_��/�y�(��o�n/?`���>�k �^�]����w_?j�N��]o�8֧�}�[�5޾�������j�������`7���#��Y�����j��l;!���\��K��� C�q��{ʲ<�1�B���nVOq0�8�����L\������خ��r���?�tW�)�"���������Kl���Hx��l}~����t q����M�^�ye��'+�~r��_=|}s����� z}�����\8�#t�ؕ����'��Z��]�u���?��[�/ɏ׏���z�x������v������y������������u\鐂���m +�;�:�����ջ�����n�o��Ϸ�� ���K���<�f{����㨦w��|}w}��և��-�P�d��˴W���}�A�=���j�E�}�u�mov�ӒN�`��+|���x�����^�ܓ���kl�3޿Z[s�T�`gw۾�L�\��O[��Ͼ>����������)v������o����A._|�A>�����\�T��OP��}<�[sپ�Jۏh_��__�����������w���ߙts^��:ڷ�Rwl�=^���~�v��i{�������b|k��ވ������w����m!>vQ�=a9v|�l����R�v=��zD?�ؕ���@S_^]_?[t��z}u{y�5��y���G;y��C��ߝ���gm>��?i����|��^����������~���_Ҝ�vH�o�\=\}��F_x~��z�پb�<�1��������ͻ��+�U����ym[�I�1���Al;�����Rޚ#��M��G=���L�o�n��l?R��~��;�����.^lf��K��y�b�2��'pخ��lf�`3ۗY�?�̳_���m_Φp��y�AnmW�p槨`�>p���g�ѾG���YK��e^1p� �k�����l?�}}{ �y�r��Vy����W��~D�"~�������O�!/��{\�� ���b�o���Y��/ۇWS2��~�k����i^�Wb��ɴ'Œ^e��g,��R"�����V�-����փ?ȷ�|;ȷ��o������vo�.�.���v�nO�n�� ��� �^�t���>Zp�� ����Dp�*Jx�DO�D姼���a6�4��;N[e�zp���#�����yy����}��$ŭ��3�p��v�'n�+$�_5i�n�\~yu�蕨S,�7���~B����_��T��vl��;㚽T͝W\��m_L�P��%˻l��j�lW���������w�.�����~U�������G�Gy��ɅlvE�z�wJ>�����'\�/�O�O4a`�Wd���F�v=q��i���Qϝnrw����j���#��s/$�l��'�v��c����=����t �%l���Hn:���yd��q{"��� }����'������7��k�z����(_�Q�?�Z�C���>ğ�~Z!�C��>ğ�g|�;_�����χ��cc;ğg�ۏ�3�MD�}��'������z�v�Av�9b·���d�g>{R��w����uy}}�ݶ㻾������ �z���v7�����/߽�<��������b���k[��w�_V��iL���n��?��U^۩��a��k�.�� ���;��>TW9��.��(�?�n������W����������w��ݯ�����|����_�ݟ�>g?8�[:�[�L�������#7CN��=��ܘ���u��I��/������� cg~-f�Je�n��y��7��l��3c�� (AO�o��M�5>`��/��>b����/�'~)���޲+����98sΜ�3���98s6�����g��nę���tΜ�eΜ�p漄�|m���L}������>���u��Uf������QD���ؾ�Ž���~ ��;������r���w��|ݵ9���x~�X�p��r®�� +W�v��� +WO_�~z~�I}8Aw�=T�zU�������VЏ��ë�j��o?����7w����O���+,\�uɲC��R�;���@�<"��x���m?�����;�Wv]��}�������7O��&�����l�_�Wl,�������� +�K�O���K(����P�����SK!��i����-��rp쁅�oR���8�?vI����^�?`�=�?$t0��ڄ���������wWۣ���-gƾ�����C�=���)�R������G<�SSO���� ��k�<��ukh����?� ���6}��1˧[��������_��w���{��vx��i�/�/�/}�$�������խ��>�����^V��g�+��u(���*�da�'�N?x]��&=��ҏ�I���/�]�9�CW���x�_><��\���vp�~��աО0�}A�m?��Ơm?��G��'�珔18�0�^G�aK�m����o����O�������B��>ۀO+�`��[�`���x�w� +�Zk9X�{m�V ���G;p�* �gn=��x0f�� <��k4�Wg>aD�b���b>e$;o +�ﻻ7_ݟo/qv�^ہ��:��u�CU�ݰp�T=`On��� +���7�C���<����Ƌ��ɴ�^�s{���Z+�f������ձ��9��z�׿?�O���_�ۻ������|� �����4�}�S�Fܿ-���x����y�2�~ �-����F��S��P�泋�'( k�<;�}��������-΁��=�+}ksP��=��}�p��]}S�p���'-o�ɾ������i<���� +���<���}9��z��� ���{���n�=!ٞ���[k����<ɵ>y���ţ�%��(�֯�x ������Z��JU�W��م�OV�/�������?������Q�/t݃"�V?�����Έۃ��g��Ay�є��TD���Bn���l�7��:b^�����P�����/�y��#�v� ;=�G�Ӂė�g��#ON�^�yeHݧ��w��<��z���� 7���)z}�����\=�#t����~�n?���k��#���k�O�2�'��ݏt\ՇK%wX3�ѥ��,ɏ׏�c��Z��2�mq���ʽ��N��n�C��=��7絩�K?�|wǝ�w�O������;�߃3`�O�����}r�϶�����؀�(8^���ˢ*��%�:�r߶�~k�������������/ʮ����ۯ�>�<���Q���Osj���r����^�i��ʫc��r��4��?�����~*�����B��?ߟ߾�r��.v��?D��u%�[~���Ȃ��}�/�x�\_����ʔ|�`�Џ��Ç\a��O~��s��]eR�������6�">'B������~� ۈ���u�����������*�q�R������8������_����������������?�x:�.�p� �?�9�O}e�('��XI��M���[v�G�i�PI�i)%�jd�f�������8�C�R�s8���щK�Ņ��|������ߝ�T��r�}�ޝ��yy��f�Χr���$�ơt�7�����i���UJ�R׃����������$�9��MNC (9��Ncr�0���V��h(��.�xC� >ߗp���ї�ܺSWr�X��4FL��� }8v�$�Z�4���v�p�u�z~̡��ΕT)ݩ˱2�)�9ԏ�f%�au��T �c�0?�;��c��:aX�:ޮ�]������.���ǘ��}����4�%��c}SV;��,i.e,w�����.�]t�#a9\��JJ��填����0���@(m��C�-W�P8D|+ C��*%r$�-WY��]�v#����� ��Kal����>�+�)Lj�ĒSF+� O�.����V:%���h央Jq~�3R�v����[��c����kG���/����<�R�&w]&;ƾNW���w�O���X^捯��͕�b +��P|&Av�?�S�o��� τ������g+�n�E��!�i�J]��bW|�2�F�M*S:B�����]�m���V� ��u]�Fm� �*�����S矔:��(}�]�S]�������؝ڪ����'��d���r�_1Ⱥ�PWτ�aUBW�P8�A�����.|B�^�]�+! _w�'� �aS���u�@�a��V�\��@����� H���>r�U���� _�� ��ĴL�����\w5c�x��]���)WAd�*��>zLV���t�k®���X຃:OA�k�pr� �����W��;�0���>�<�K���uCO��ط:Y.w�l7d��+#b�)U�*"��b�)s�0��x����(��� �xr�X!��zpI�Խ��|U�'��e����Х"��u�c9�~l �~����������k����K�s�N�߫��jI�QJ��ߩ�֩����NX�קJ�wFW�� |� +�qL��h�~@ﺁ�S�Z�ԅ�q�7-�b�f� �&rN5��n�[��U_ +���,2a�NV����IX���4���>-�:�B�:�H|{��=]��9�P¾����FIu�+IؚS�N� Ҕ���jMQ5�&��~g*ac*����3�ݾj��wH�U�U&�ͣ#�-�nUk�Wz��:�=� �+L ��:_=��1%%��O��ٙ�_%$N��/��7} �k:�����}k=�7��l�������������B��4�$e��c� Y'�| +�Hԡ�X�� Ef��`Uf��j4P +9�Oشi +?n�Vef>���� wX�\be�`����(�T�72�_-BՕ)�!�A�bB���R <�$q��D�KNb��}�/�*>������C�u�p��v�v�-�C�o���ɾ�vM�� �z(�����GrZ�"=vh�{��lO �s�b��g%�)�����,;�� 29 lرi�� ��q�����ن/U嬎�_r��t�KU�çK�aW�_Yѓ����&r7� �ֽ$'��!��u�� �Ӊ)�Z���d����/Az�Ix��e�g���ʭ8Y��/�wp���f�����i;�����6Z��|�7p� ������T{B��_�>�<�c�b�y,��������O�|���{�4��y/>R%_86�l�9?7�G�=���9�#p����� � ��t4>�z������A���7�+�YP�HGs�ZUe���URx��Ӧ*�6į���J���w�W��T���7E�{I�1�5�D��CJ��XH��Xu?��˩)����'Sㄇ"E #�?v�Y��h�{_8��A�je {�����:�|�_-|�7$�H�l��u��A�����z8�������ѩ�Z�#�:���]��z +W.�� $�_�`��*���r�E#,<�3_�b�G��X��bV/�6�N���ő1�X��l^m������s�Emt�3����u��/��"b��V�箣I +�S�0h0"Y�:�u�`�: +�+"���Z<������E���"H�+�%� _��8�]�r�&j���U��� �DW��`����63��|{� R,��PWP���{B�C�:1lE5_����3V�1~���?pc�b�(�"�A��i�!VwH�3@?���X��<���p�£�q�_]m�r,b!�����ʷPt6�<)� R��2��4�t!��=4W�Ĥ��ϼo��fY�Z�pSL��JD$*��B��@Hs1!�`y8O{����qs$��U�h��O�D�j /z�9� +��vؚT��.pB��+V.!b{�pW�� �����xF[�_�b�� �#�l �t��ZZ��3��iG��p�ʆ�;>Ze���ѡ�B}L�0�x�c�i���� +(|�<��ίۑ� �h���O�����N���yI�T�U�S�PC�@@�C�����C�� � ��HO�WS���eA�$q Z"��!l3O9,-?T;%_����Nm'�,�vu��C{���2>x�a�Vu�,�B������Eꂦ�0o�hH���q�ttr)ӆU�xe�� )�$�J �^��d�u�8�C�1�؛�A�=�,]Tg�� Yg $V��K�>pܧ ‹� <�àpB�-�\�@�5��8"�xq�����j���'�/�pixh&e�qL]\g³�Q��P�pPu4���jӰ�EO��k�����=�&���+U���g�~��Um���@��YLY�;��/4@� �$��W��ł0@P�a��E��4��E�p]�����G ��½�h�q�T�{����B��j�a�]g�*J�$'P-'іŘ����r�s|�T�#o$u��K ��8X�†�N�F�qA'�)ϏH'�;�5����S��߇+w`�A��ܻ�N�Ū|�aM�m��ʤ"B��+��^?�T;�w���f=I�t���Δ�EhO⣔@x�%&ߡ� _ +20i��m�9�1�k\E�Ն�YN��ц \N�|%.Ԋ^�JJ�����S�� y��; �� �Z�y���h` X��ɞ�)M*${ �AƳ��z~l�xP��4_�����.�B���u?�K'�D�=�M���Ȫ��h��eW-o�;�6��b^(��� ����E��$�qq�8��V�� l�t����M���!zb�/�1@H��N��@�~{�º��GK�)�O���b��SXrȢ��� �� �9�l#\d���hcH��cdVfȅ%�a�Wm��|�f�x���Q����E]̞-�qS�#7k���W�n���Gt�.2�Ⲅ3LZذ?����ROs�����K��wB�T�F�tes�A���"�'R`-U�b�� �̫�a�8� t6��@S�S��c�:�=Ѭ߻��Z.�b�/�6d� �CΘNc ��=D� Tx�h��]X�$��0�a�˫_�� +�M�>�z ��-U�3ѱz�Rp��O/RQ��7 �ցf8����(AtNi���@�h� ?��hAֹ+��/0��8X$��`3]4�m�棇/d�яVI���*�{i4�S�0��f� �Y(H��! +��}�u���� x@TQ�R� <��ͼ����Y,�|���U� 0 � ��w�B��������;��њ�`9z��> @� 4$���M�2���D?���z�C���ZY�N&J��Gi�9I�Fw�2I�=g�%pLrs@� +5X���9�,�j���60�lT� ���d�#�nG��8��$S���4��И�x@��`���c�z � �A9���@�(9���Z��i��@<���_E��-�[� ���0{j �As�S��=�$�N(�JC��Y�#��M��bg���h�Yn�P(Po���<��>�J'DV���`���脂`Pgg�S��΅B˘Y6��'WV�0knNݵ. :���?Ee�aWwNq �5�Ԧ(�OO���� V1M}؅AMUq}#W̥�����kۈS1bv����M8��4}�i���"��@�g�*L�Ip���-� 2�ɠP��]�~@;�������AHO�\"?�0��NDNR� =F���4�x*P�̰�f��o����5D�f0�*K,ޠ�zZ� HMj8����LMь���~ɘTM��Gx�xOn���1�*�� �J���e@q�`��ȋ: +osX�yY� ꉮ_�/�6! +��)&�l�Z���� r��G���̓M�x�2��7��|%�+5_K��T�h��O��C�s ���&9GQ��,/3깣 +��V��ARvq>5M�f4�x���F��1�sL� 5ɕ���� %���Ԇ����B��-��A;�GA�ރ�/&1j��l�p�^6��z�a�uPD����!(�o��":;�Pa����y>��&C� >?�Mz�-z��v� �A��.Y�7C8��3`�G ��:�r��<[L��Aq!U�Nj���!!�JR��`��iǁ��2��,0/ \�Eݲ +�r�c��B�w�PP��#������fD2��8Sf�9Bd�� ~��%J3�����(F�������dq-Vy)?@h������a��$f�q9�[�!�th"�� ���8��%��h ݀%��� 4��.��@���4�#1jhEY͠^xi[�f�,|��[ �ׂ!��s�]0�l=�N���h@�`�@:�ͺ�,�uT��� � A�DY��1G@4K���C �>�D�N�$Ǯ�3����ý�� '% ��a�/��6`h��K��� x�Y�z=��uNk~��[ˠ�2�= gJܤ�� �!m��(�� �x�r�` �5� A�N�%P a�DP�! +{���� +��v+z���l$n�q���XR�r4�iQ }E_,�&vX�T"�>K�H�-{������:j���S�Q�5 I�U����i��T�S�xy��7U����nd%�SI�#M~D� A�cLư�A��|��tN�Grg(p3���Sqq\�qr�d�Ǫ8� ���n����Aړ%h!�kP�݅�����U�g�Ƃ��J+�@.����`�rt�i�ݜQa��U������o�[����d���A�zuĴB�z���� �ת�CӜ�H��I��p�`�+�Eh�Yyl�H�P�,���C���������B��XLH��&*��fF�`��4�u�ڙ�H��UE̜ 3�މ*������sQ,��� +q U��A�O$���A%J��|��m��#6վ�~}(趴Va���Ь�SZ9q� 9� #ᨔ5���54g�R��&������L"�(Ŷ�2�C@@DQU�EOIY��ɋ����j�7�]��Y� �O1��W��GduèA�����߲gb��K6���K����b���<�1/�pȤ�P� !M^�?[����yX�Nr=a�Ԑ1� +륝:�$\��˚$��F��M_�k_Ym�6��m��˴p$P1EUJ�j�|b�w�oj� I���W�1��j�WW��O�ͩG`t�D�8�k�&�y���dʞ�q�Vm�<��۞�O��_ծ&�{�"@z��:*�)T\SM ����9yў��,Ϳ�ݐ���|!~'�����-�����CnJ��]��(OY��� D��[*�K����eW�SA�zb������{����Z~��p,��L>� +�w� f.��������8�u<ٳ�f{�>�Z~S� �9�WXb��w'E��*W�s'���8�e��� �v{�k�Xm���Aĕt"�iֆl�U{ (�RPusJ����=��K�怒/��4L��i��j|�+\�;�)�#)�4��S��Նo�26�����}��O��j����_���g�z�RizC���^_����=�|s����ۯ.��P73��H����Ԁ �s�ӊ�F�z(3��/�w��z�A�OL�Q���Փe��Q��>�`��i����WҢ�M���:?��-*��9���������q���� �#�%��O�:����ˮ�=��9n8����s�fgQ���L�,ۼY`��3�Ӌɫ��Fa��~zm��j�p��+�6������+���W�86���c|*Z㧟���u�������6�w�)�����0lƴ�Q������;y��N��N6Mq��^=� ��5�;��y������c}:�O�n�/���;Ir&�K���U����@�G^B2�u�cfX��"B�a&�����߾C Y�k�^����~�K桖��}�:�$ٿ'I"C#�1kzh�#���uiE��֟r��Ǔ��'�>q���ɢ���������-ps��46�rc�-w�l�~v4���775���b�N�q6�J��tѝ�隮y�FW�����Ru$�iz��Gs��/��8��}��6����^�<|['�������M���g����{O��>�� ���8>��%��9�B�j]�?�?<\�������?�Y/������/?���^�� �绫7r��Ӎ�?��]\�}{��ˋ�j�\�m��ɶ k� ��KzWM�0�R$*K��4����I������ �P�;1L��)J8;"�K��"eF +[M��:��=1��c�>����Ӥ�X�W-�R+�S�8&���d���Oq]GD�N��{�������b��p�G^����b���������� >>64`:�l���cs��r�������~����.oϞ[���2�^7|�Dn���3=�ӯ7���E|d�:�`@Gȗ�Z�9w(�S j�F.�˺�*=�͇�[yk˖"�d������ 43ku�=�n���)�Y;�%<��mع�Y�y�]d�-_޲�&�f��i�� BPa�2wp���ڐ�6�y1��!:�^�6Y�Ə��넓 �L�X�8%�����)q"�q�Qx3Bo��؛Rږ!e�!#�w��ب���'Cd/�x_�w�����&��F�r*����`{'���<��'fbOچXZ����s�Z7T�_�6X[CXH�U��NF�b%�m���ɱ+i'M�?]}�E��6�%�Xx�'� T�pS(w ��:��~�Z� ���.DϨp�R-�#�Y-�f�, 4=b�{��~=<�e8��K���PE�5���A�"d ��t��w��޾G�R(��� �۳z���� �ND-�B>/�n_���"���2�CRr=C�����ɕ�j>8�����l�Z�-Hj�x� ŭ�����P� �p�PW,/ �$��Yl���w��/�DL��RF^Kօq�h �|aN O����UVb��RN�K +���R֬�E�F�f���=��Z�2�A<�{���͡���lP2�8!x+�W$��.�W6�՟�����Ͼ>�������7uK~��_�.�����G� ��OV���������?�}z��ݽ= p<|�§�~rq���Ow���d��Ӻ5Y;SQ�7��r���T{VV���E����9G�T����P��$�d��S�\�-,�#K�Z� U�yJF+��@@��ǁbfyK�A� H����$����=񒼨��\�Z[�o�@S����o�C~'ʀ��s$�u�0)L�d>j���vp�J���D 0�]����N����������D*#n����K�RW�F9��d��-Y]�n#���L�n#6 ����%,9��Ϻ�B�����ߵ�?�-X;�8A ���A����y������;�0}C�t��u��)'u�ԣ<�$� r�#o&�q�񰉐�(I% �rch��I��W�~A�h�;�b�R�r �����!���1���Cܢ ����Hf��c* +� +�X��� ���ӌhVn�B v�^'�Cxl��4�^����wȡ����$�R.y� Ĕs ��+X���X%γ �T��bQ��GA��� }�H�l)[ 0�� +0���D�9%b�I=,�08'�p�1�� +V�M�� e�'����%����R���xc�$��K�T��X���8�,FK��%6P�T�c���$uM�<�ʊ��cJ���"ꍝrP���K- ��б���������0^,�N��&�r�c2|�{�rri��/��tQ��$yVӖdL�Ʊ����T^DM$-s�5�<�ݑ�D0���W/i�X(�⬥�lK�ܬ�21Uqk��O�9;9�qUp�,�x�D�R[̟���E�x{���b��qB�xw*�$Y�j �%)��x�ˀaf' �ulE>#%E.FZ5`��B$��s�O��`�D�N�� xsb�N�����TZt.K �^!˜6-�2��y��D��� +��ٞEM�zy �ܱ&��^� R�����,I��d�b[���Ns�P"��f|fD� .!�jXA�HB��aIN��l����"u`Q�5s�J�L���ͫA�n���`����L�Y���"����:��LvR�� ��Y)g#7Z��E<��Y��� P����<ԫ��%W��#g�'� ��h���R�a� +�1�^��LP0�\�옡� & ��i����Q0"q�CZ:� NUD�x�v��4��l7�ͪ�͢Ƚ��X�Jx�T���x" ��U�{A�; 3�k�R�M��r3k�휤|h]R��DQ�Y5�j�nD��!Jbh)Y��Cʌ�"^�@Ĥr{8���:�"�D�.c�!2H�R ����9���H�H��J/ӫ��rݔ�PU8���|��Y?� Ɉ���5�K��DL$��00��%$���%����� ���9S.z�� �((Q�ygfX����5�E���K��L�g��qH�E�*p���ܭ���RW�Du9\Q�"��>����1ڎ�|!ɝ�`�B�B��gq �>}� Ǣ2‚�e�s8-��,\�D��,%e�� 'U�J�ܷ�K��ӫZ��;�J�G�]��U壐c�����r�5�Ԥ��ܿGy!��p����!��S�%I����������c���Ͳ-���Ł{���R��8Q�r��d�a|�tr�I��:5k�*�dD���/* C�,Z��v�������A�4S�98Ѓő� !�2O��_���G�p�#a`�m+��;(���x͔j +Q3�%N���2�@�`�9� + �3�Z�Fl$(���#��Q=eP�ͧZ�F��)�=���<�Y���S5���Ѽ{���'q�g�����>臤�� ):pn���8[�Hf�A���n�ₚ;z���#P�~���o���f����C������:ۑ=�;я`K7G,��U���XD�b:x�s�kXdU��� Ţ�gV������������ ����d@�I=3�����DQ� +#c����ס��gvv����= �k���$�k�a�#��2:��M5OK2)��J��H� ��۽��A�B�"LtB�J�E��٤�o���)�Q�{:���JL,����-��C���U鎽��p��ݡ]��"b��l;�]aQ�p���$�^ot��)3���&{��# ٳt0+%&�!/L�%��b ��O@�P�)G�Y;l��Ȍ-IL*���8���;�Yv/�"��A�S�p# +-dub�c�^ �饤 +�\�-���z�X������ +L���K��/R� efp�c^ +ӱ\�B 䇪d��vȃ(����q/u�`dH�V=��$HL!�Bz� T�R����ׅ] +����� ����QW��Jbz�u@���w���x����raα��D�%��m��nє[G���a˝��2���T2����Nqz���i�­�̌��i'�?{_��T�,���C8ݧ�,�슢"�M"!�I������NB������z���Kuum]]�8��b�Y�� :,Z|2MJ�9�|�f,:k�Z!I��!{FK�*M�d��=��J������'� ���$+�p��y�1�g��$�m����dp䞷�fz.l��� �TP���!=��`,��.��|ܘ� i����袷�,<�F}�i��N$Z<`桿�^�"�g< +%�9�SV(|}���+%���)A��l�\�@m3��>�{��mt�4 �*|���J�����"�,��s��Xw}��wBQCr�sRg�֝�sqJ���ւ��I�z���٠�9{���L���x=VL���'f?W�������8՗�;��#?>����-.䛷�����k��_~��S���I�q�<�����5<��s;�V��n6����ۋ>�J�Z�I`)�t��&���lNU~�:�@?� %"�K|onL��V�^�)����m�����x|?��{���9��<����y��"���.�#f�����,Q�8��v#f0!���̡�N�Opp�w<"6~t�gx���0���'0E/�Y#K�Phd�q<6~�#kE7��� +pp�� ��@���l�ϧ<8��4��;?����!)œ�( ���c�v�����+<np�w9sp̓ Om���`DQ�?���7�D����y�S��JH�y���%u7��� �G?��Ӥ(0�T���K69{���$�)̍���X�H\����h������ +M��9�rc�<�� g�� ���ƗpE$Ԥ�JM��nq~YF?��()V0�Px΃�*o���I~@i�L�)�I��h4v��h�D�?����.�k|o��_�€^��}-p`�SMA��_p62�d�$ @�1�oDP�����`f�� ���A����� �����j���� H���1��.�,�]q�Q�?P��z>��C������M�*;�mje��҂J�$W4N[јdwH[�_�>�H����tN�(� ��^0���e��{�!(CR%GZ�P��/��P-Z ʒ܂ +£��=�4-�������"P����cʟby�B�7 !�h�����A�CH���p'�4?�\Q.hM�������N��Mc�R�ʟ:`��Td�P���0_B8b��&�K�I�rI�^�� B�O�\]�R~I�.��r�Ʊ� 1�$����y�vK5R���% �A]��ĞDʢ ��Br�D�,�������Hh]��A`�8��|%���J�Fm�d1�R��+�;�l���R@�$��� ag�Z�vL�;# φD��D�JUѧ��4J|Y�'�!�d�bzByƽ��&mu�K(�i `"�~�ߜ2]�u�Y*HJa;�;����17j�T�4a"���𜶁��B���Sjt�rg)�AJbA�*{xK7]�� +l��p$���T��!+S��L��f�ZҠ���x�I(q�5�X���7��;"D9 h�YF�G���N�:&�}]�P�Dz��G��tɝ&�h�lc�䫧����)��ۓp7r8X����aqtR���N� ����k���Ԗ�AV�~Q��>yr�"-=����$��.�q��� A�J�yʖ��U�+/+]:��`��L*� ���d�A��+.s���:�IC�� ��d�z�];�a�ax�g��(#E,�&L)�������� '�R*�@ &J0Y��!�F;`B~a�e�v�P4D��5��B�]� �&�z�%�҃,��3��� ��[i��QN�L[���qMiQ�k��L[�1�.lR�N%ҡ���m�nF`:�];�k�w���<� �6�f��� �Me�����l{/���![V�� @*� ���(aaE+-�?�z�Q;)*}IZ�t�������� - �Ȃij�O��'��7�p�����v,� Ћ2�{��"̇+ D�v$@�O�'�FA���j��젷$���B�V[h]q���D( +�������8)O��cwL�TW/:Պ����[E�jqYV鷐p��1�)`?�I�T$��.E1��a��P�},��ä�vbu��Ũ� A���xt��!U���[�XD 4yI�P��MrR)����X,Y ��V("Ԕ %��'�XD� +�Lv''�Ɋ"�����>�ҫ� +B7"-B��� +�,?�^6�BhN��L���5JV�š���NcU #S�Ӻ�����_=�ojzs���ܪ���Y �(�$q<���(�gY�Ч^�a�Ye#�@9s��(�g;�;�xP4ٜ#�'G����$ �`i �䗅�,9˰%���B8�E�g��>M0cŖT��$�#遙��vfq��BT�r�����(��7PQ9j +����cX�+��P������G��F,��j������@�Y��,�h$Εq0{�<d�ފ2ʄ�ď$��M���� +1=�9Y����-�QA y��L� +L��d�#�D�e�T���iBbrd\��T�k��H�@�<�@�QL��V`~�p�H��63�;����(�I��l��’�kh �*��y4��Ƹ�A��DU�R��p�ʋ%!(4�q" +�Ǎ�. +,��4 �"��`v�S������ϮP#@tVER9�hX2������ pidU���x�Ý��#؍n����.UVXDJa�15k� _�"{_Q��XE�9��,�vB���5��J��]�U��+=�H�}qn�u9�l�6Kh�Q�NX?j�]T���·we��rN����_� ƷZ�&�.ݭ����r�Z���� +Hn� �Y ��A�v���5"ȟl�a9>���J�k���Jw����VT�})��u��b��.{[@��RT@�T��ң��� ��i�Iz�4��pYu�� `-!�%NϦ� r�R��v#�^p)���������Y�� @%M�^p�$��� .��i{�e /�������{� �_�.�z�(�WW��ɂ�SM��q;�ɁC�8̙���{�%#�h�K"���ˁ���+�;.� !|/���-B��������E�Օ&�YS���Q#�K���$E-���.��@u�i�vOQ7���*�*� �b�@��K�� +i�m�� 0��R= (J�QШ�[�#����#;z+�i�1�����\� .�C!$MG �+� .5�v��B"��[ ��v�U�����n���]p)~*j��S�1�A��Hf��Ii��� ��Ω�]\i�i,��v��a�n�?��q��js�s��pi�6 {��� ����K�]�*� �f] �n��K���Rkv����^qQٿ���zHr�#VI%�߂�qx�=5���Z�-�|�e�6�M�I4��! +���"yt�5�� Wm5?>#P� �2��I� �S'�IN�cA�)�]��u�!�� ��V$ZUUb�/���a���> ��J��� +`�<�ž�Յ1OYD~�9�u�I�<@��I6-��$ ����F��E�����i $�N-3�<2)TG7�(���)�Jv�������`�Of ��,|�� �ؕ�sd�d��pNbi}]�$����|�~ ��2 ���4o�Ha۹ z�˲6^�x�uJa98�6#�{��\�_��ܬ���r ��i�7?�X�j���R5�/>�H)�F��I�v4��Z$�:����*�6Z�d�l�ԥ� k�Yf��qmְ7|�H��nT����Q�.!�%PJ�T���JW�ʎQAV�:��m�E迴���ـ�Z�Qq! ��O{g��r@Oy�D#��2^DHǘ�$���ѱ;�(ņ@t�=r ?V�Qq�6�F=>ۊ5�@v�C�e/m,$��q0��Q�U��`D>c�&�O����!Y�p�(�-�Oi���3@� +3V^��@�(�w�S(�H����P�?()�epi�Aᭅ:�����_� ��D�}��Nv��U�.E���2 +��W@�ǜ�(�����&��F�⍔�\Z�9���k�(�Վ���@�Ѱ�����K��P_�Y0 Y@��Q�s�����[9OH�J��_櫧��26�L����@�<�!, h�δ���yp!�cv�݈n����f�5bZr�fNʣ+D*�}����pW��+��E���8e{~0 -̞2 +N��SK�2�GcQ�����車��O\��V܁�1�����@I�(��2��Y�C�� ��zSa ��1�1�i��hQq;��4g�@P†�:��|�Ү`���gGM��rc��#�!�5��Įպ��6� +��L���?)G�4�ƒ��oʹ�����>H�F: mQ��g��$םZ���84 Q5-*� �iD����`�� )*� +�&:8j�G��cZ�%� �J��9OOI\0s�b +��c���e恞ވ�`^�ѩ��hY��� +*g�l?=��ر��#@4��n����L�E����g{���Or*� �|S�;ȷ&��|d�mˋO�=����IhwzB ��]@�1]>JН��o6��J$��ڹ��A[Y��l�.1!��< =X)��t 0ť��.d�)��Ι�!�3��I�Y�j�A1�ҺD��8.�yW�I ����V���� p��C�3N� �)�Q,,E�hC�]g>��ʤ0ܘ�({c�D;��+��� �i�0�2�d�Eʴ� �U��a��i�D��|֐���r;�̃L8 g�^y��18X��V2�#�� ӊ�+(Sf� ��^�Fc����{��a)�F�TF9�D�"+8�)���ԧ�!9<�)Kw\� �� �����(�����Hٱl����zU +A�@Uh��t�9ɺ�":qnL+GB �;G�JM��V�!����b�'��ݙe� v�����療C-�hg���s^ǘ��:!" � � &� :7��T�W��N/ql6O�*��z�z +A'!�1rۙEp0�߇`nv���_��* !9�I"E� �(��C^I7�() �`�T����U��$I$�� �����$� ����¿�~L��{쯞�� +\�z4pE���GWd���H] \�z$pE�1�+q���-\�zL���#�+R��H=&pE�j�������JB�+�?Ͷ)R��H=&pE�����+h\���"�H���#�+R� \��e��j� +FN�J���#�+R��H=&pE���GW��"�H���#�+R� \��Q���#�+R� \�z$pE�����H�8�W���H5&pE����FW,�zcʸ� \�j$pE�o�9pE����FW���\DHH[j$pE����FW� \� G�YQiG�+����R��H5�"U5pE�1�+R��H5�"����"�H� +詹 L�����H5�"�H��TcW� \��H��L��D��S����h�6pE����FW��"u5pE�����H=�"�H���cW� \�z$pE�1�+ҿͶ�+R��H=6p���X�8� a<Ʊ�1kXK5b��-�U!#V��/��ΪV�Tc�tV�t���J���J���J�>&+=����TȰ�l��`ah�J�x +:�X�έ�썵ң$+݂B+���1 �&�ҭ�(�ҫ�܊Ί�.���n]T�������b���j��b�が�t�X騿�V:���J��F��Q+� +$٣G�t6��qzU+�[���J��+Vz�bk�G[a��`ˬ�l���-(��#�`+�Ո�^iHz_��ye`�F�^YZ��j���p�A#V:�8��q'b+�Z%����[B�J�Y��X;��YݭZ����b��U�t'ż��S����ΪVz��ܪVz��� �Q+�Bd�[Ͷ +��-�Y�9�-��P �obte(;)z �;��D���T~�Y�§>EH�$���������� X� +r{K]S�����ɌH���H�_:K]3O���!y+�ߔ�;��d�Ę��]�cg|�B������t�ݱ��Y��ॽ� g�@�ݗ���Z�l@�[����j"����]��EȖ:� ��Z���4���e�H��N5��ny4/��WRW�Qfc�:K]s, ,�Y��/���\)�3�5:A�3�5Gc}(�/t�'Rg�P�Qo�P����En�=-ƭ����i`��ې�e\�!��g$�`�N�,OL����d���$;=Z;=s������s>�Q��� ܇�g���ng�g!.dtK[����/���rv:\R�yr���iTD��4O菁������Lڗ��P���@�P׬��-u,�{xg�A�9§(����9�R�T������ ����r+JG �P��P���l�È<��v�^���z� �5q��H�K�?�H���rޞ�p�趲;3J���Y�g�]�l����%���F�� �ҭ3}X=�/PVC�6����0�6z��8{l�gVmK�;�J��6zf�#u�w���nP�Ҡ�\��2Dz)����Q=��D�ltm����F����FW@"d2ȥ��(d0!d�A:�K�5��n�8��%��,W�`&�*�Up� �� Ǚ�H]�>�Pa&0ʠ*�L`�t:��$� �AA��d`\�2H��"3a2��`aE~&\�dNﳁQ����3�����J�}�n�g$�3Je��A�%*`���ck7��h,�D�Ь�@� ��O� ,K�F� S�#�Eó����7&Q�`���� �f!�SG5(,�¨Az"¤K�E���(��@5H6��A� Ŗ E +�i}�`�9�s!`ԛ����d*�v�� R�,���$H &K����N'S�q��0���a�/���y�A�����F�)E��)1~vt�&¬`6�0� +VX�+� +��$PZ�œ������0)s�8+�����(�{�AI9�'=kcj9~Dș�i��3G��X�g7:S�z. +�7҇ ���BѬ�O�vD�ح�� :P2�V���B��H�,�#7�i|� �5�j�4Qi��B,�*+�X{�sp>hP��c��k�Ņƒw�TqhO��A +��� +��O�v FM�\C +���.�/ɜq):=qf0z/| ���r�r��=0�\Y�kdR���ڎ�_Uf��A��dw!��4��z�UےGp���B +�)�9�<$��p@�:�nPL�^H�N�䄤�i���q���x�[&�����6�J�SN�P��jh י�6�Ug�D(��8��7GNb%A��������D�>p +&�H�. ��l� ��wOx���e_�������=(�{`a_WR��H�U�����rM�(].��Ti.���+������(� �Ȕ�08��چ�ɗP *>��s���d +<��_�Y_�.��2���\�V9�-�|Gl����dϔ���%G����B& ��`��L?.�� g�2 ^z K��#�xP�:t���2�F�7gù I���uk��O)�"��Xwg�v�I�aס�hn�DX����ׁ]�J�oxb +A#!�1�;��uc��`)�m�Wܖ +r��e�[yHNe��0�d�ps�Y�S٣�(8�<����S\�UbE(��!$Ny�3U�D�X��������I������c��� x��eB�\u�hPJ0�rLIm�2����:�� '�����|>����l�L��I�"�DA%��E⑇6�!�1p$I1�j�R3C%�9,/(K6�R�"�`V{C����|BW�/R]��%h7��(�����C�Y\� �dH� f{�h��U���}�ZZ���G�fрJ�2Z� $���~^�Ŧ�$ɷ �Պ�B��O�8���/ �Ei�*d�!!I��al\i��Xc��M`��eJ0� �@ #�%&����e��(!F�ʇr �h�}X�M� ���&z�xs�p��D�lP�| +�GA�!�t�3ߑE�Ǻ�!��l�e;E�ƺ '"�+l��;�*cL+@��g������RX�$��F� $u�3E^�y�X A!R�œ�7�]��%S����*�~��k�;n� E4�$yHS� � ��0O���� ��kBS�~� �G�C��=�+���C�[�Fi!+岉��k��Q�yDP�M�=���2�������шbd��\Ab�����P��C��!��Vt�k���^�E��1ô�Ɣ�����%&� �Q ��$��EE?0���ʜ���k�9X 9<�I�Ĵ�C�E�H��V/�l��P��Д��WDhJ���t���L]%9L3 ���)v2V��<�S���m�3 +���ո.�:�""繄����P�]���s��p��*�l'����[�dc��3‚A�ʶs�����Z����qL�*��h�` $�c� +e��^�LhV��&*lZ���j���B�V�x,YܙB �\� �忄5g�}9��G�4*J+���m � �X�2��h��8�a�9��E� ��s��{�B��'n�?5P��z��rnN�҉�� �<�)�}��U]𽨍�c��@=pAo�L6 ;B=��1w#E�J�K��ލ��� ,| v�,��9��+ş}s��m�?��7�^�F���}��d��_��oil���e�X慘�# ;�I��ʼnG��3r!�����TL�n�SZL�n�YH1���XL�nn@F�r`��_a@C (��/Fz��1A��� +���5��b:qs����v#�/���_8��sMF��۞y�~�=��GR ��� +�� ��)$ ڧ�~b�J��o�� ����pN�Dk���qD�o1W��Z� +^�%�<"�2�w���k������B�$L8tR��i4B��&ᛨ�c�[� ?�f�h����?F|U�E�Ȗ�4��Y^0=��6J�j���#B"A�l� ++t:J��G��b3ZF�B�#ZAhD�$S!�Q���2���F��BN�d4�o�/�$�o�]���_ԾFV^�ϧF���� K��j����_j7 H�6:���҆H���a�� ����ל��0 E���P�fb"�0�6���v��~\�[��Qo�N��h�4��V��~������z4�-w�ml��Z6�[��A�1��r��m�u�{��m-F'��g��S :tm�������Z�2��*k3��W/��M���Zg������e��Cf^�u�53���ٳ%��WL������V�����b~yh~�d@�L��}��� ������H� ��H(t�p�5'y(�>G�g�~�r�#o �TgM�eI)Ʀ:��ԁ��*~MFBVP�9TG�e>�,��#nK,|*B�l �ep�sP:�� R����@M`+Y`��y��0�?�xy,>�A���1��h6� AP�q���W 5^x�xJg� ���L� �( T(�� ����� L$�a +�-�e��*���҇+SD�`ZM��boq� �:5x��n��$f�2%� l&z���T�^��IF�������r`31Ë�V��� �J��Π��s���"3�X��t�x��p�4Dz�p�9��>��B!X�լC� Dc*��"�h����8���58���6�g./� W��J\�A%%����9č�w< ��X�W�w@�p�f�%�)?Ģ +� �c��2���r����VGT��g�9`�H,��\Pd �ᅙ.�����,�-��PI��/�~�칲Q�~�08��/(�_�� 9�ȱ�xz0g =*:��a� 22f�ŏq�Ȕ��� ���2eC�N13�lU0��5�r,Y���G`����O�ҷ�ĐL&��>`����N&+) �@��X�I�˚.�i���|� N�bƇ��m�r�;<��P1(=��I)|��F*›���/'~��-b� ���g�@�>�o�2E��|���RI�����!�L�s� �N�ж��R45 �R�6{�9o�Ψ��DȦX��/r��p�M��|�`-�u���t���P�N bz�y����8S���/��SI*���G@����@�p\�!�c�Jq�_�eF{A��K,���S$���^5�$�65Q�!�X/Xу9��"3̤�SPr1=�!����(�BI/C���P���&\�EۇLB%��D� +z� +�/�T�j�A�:A�G�K)T�������� �O����c�=��'��`~y��=5������x(��b�?�=7mFB��dMP��$n�0�mzhxQ�!f��)jEC�o.Qb��F��PB��/懅*�C1�0�����R +�G���p`�� 䰠2�9�����P)m�:'�cN��)>�)�+�Q��2̎jȔ�)��z��IIϺ�΄q`R��2:x����x.���T6a���w�7 +�2_Q�9�}� ^��y-�,` � �@'D�[�,��1�f�Fe� �{Z�B�ҫ�604|c��a��bf�7�pc��t�� ��� }�R��L���Ќo���0 �D��=9jT�ېQ�N��o1�R1���!d�\r@�h��ci$M�sș��4��,9�0����1A�����/�(h]UL���>Kj�c=(����#��s@-`:&Z0D��2�H*�L���aU4[�� ��h�X0P.��9$�R<���M�<y< +3�SJj�Jz�)O�X�A-) X�pe�?�f�Q]PW��Rit��=������1r�(���� R!�L�Y�c�xf;���� !F��fSiF!�y��0@=ӧ"�/U�,e��{�(�VƯ��0 ����7)���`�����$Ü1����5�)12~��r�J ��_�e��X�����4�b�Z(��YY�J>�WC��-ꠀH2j��1�����������g��ɒ�g`�`0A��B�sPRRQ0�r�C�d��W&1K1� F�f�� 3�V�с��m!ӛ�P&��H�<���Z �R�YI�2��^p§pFA� �b��-����Ѧ�}����n1�9r�R3����9?��O��5�b�!9@�S3|�@f�C>%��31�6h$é����5 !d��vԾ�H!G����H~z��9@0��ߍ���P*��f�R��2e��2� o��QfQ@n[0S��A +6ު����+I�*��Й$ٲ,8��d� +F?<��㞂6N�$�ځ�� As��n +��� �c`���k��җ�贂�Ж���t0��qMi�X ~`�ROub��Τ +��(��0��|�p3���Ʒp)'C��K� _a7�@��� L�X��we�cʜ�a�L��Dɾ�0G2D�oOБ(9���2��A�씂߁���� �[��a4ø��"�s�9��AJ�,�$�aeJ���68J�bF+S��n�F��"�GB���ׄ�י���)�cI�Zr���T� �-��'�/m���[�f�TM�W�P�*��V�K.r�C�D�U������V�lEa��D�*��PeT����.*G Τ�&mH92 �)��@�EoDFI�TJ��] &��5����궀����#x$�\-�R�=Z䮣g��� �R�wЋ�?T���4LH)>+m]l����s�0Ǵ�\��$,x4��NH}�<�` �!YJ[�X�},�ڂ��ٜ[�}�n���  +k)kR��\?"ᧈ5�0^ ��w�ҡD� �m��r(�<��*Yp���w_�BN;�d�\�� Gkb�+I�3�w�N0]pA.'2|(��D��= �د����Ī)�������'l�r€?���#EF�aI��L:�!��5���5'r:�0Iic˵-��p�p���MWR~0�ĂFBJ,'�Q����E)� +~� +=5��i�&��A�� ���^��4iM�������u+YQq�Ʉ���F�B@�e�m"ŔR�BT.)9:�7sR�`�T�~����J����������&���i�"�ߕ0�$���.���M���"�67�;=D4�XI ��b=t�(9��p8`�`?���7p�#ѓ�^k��Gj��f�`��g1��=z$�t\��)-��9�KxH+P����1�KV �`:u��HBڢ�V� +d&�z)9nʶ�Q���L� ����ޞ�w9? �g�[,^�1�!��1��L%f31�R 2�����+��,�>(���;�:��3|vnOL�B8Oi�J.�AF-�s������p��sA��s�i.���{CtVG�0 �$�]��i���@3"�VTf�h%f�^ �`��`뛦^��'�'�|�%���ߏ�E���R>y����Z������."M�#QvB0~P��6ə`=˱���[��p��x�q���2Oe��+�6@�"�ƫ��7�<�C���Dq��#.F)��@Ώn�%�gk�'�j�Y��:x�1�)���|�B��>Jps��u}@q=�6Ë0͖�����P�2��*��  m�����4LѨS�`��0���惾�5X�I�I��C:ݕ+�Hx!i�l�*x�$8�l���\�R��"*'�s�g^茕 +����o�@ߨ@�9M��&|R�]��<�\�t�S@��)=1&�P��1�hȠ� JI��O��,9�w�I�isA[�ӂnN����/�Hs�^���RB�O�=�Ww`F�����%*���砗�4�7K�b�8�91hئ�.A�ă��]KN�o��� ܁� 4�TrI�.��������}:7A��� r�*����^��l��z*�b����5�2'�HԒ��5蘞9��ΐ;��Δ�U+�])�%���RP; +$I����?!/5�hH� #Q��������2��N� �]N�T›?�T��F�j���茛� +x�n),����s�4C2�)62I��@��P���x�O��fz���ɭс�? ���z�=x!~�4�HE@e�k��X`0�D�w��J��pq�~����4`Nv�R�ȹX����}E��3���=sE���D�b���[r�������4� ��J�F/�*�f����n34<� x�n�b1Oo�H�(��*B7/^� +`��� |'>�\H6e�P$�Ø^����� -z8 0 K�v�X/ #).^��ɩpAΚ:pax��?��鼠S �C�,�XRx�$��UBJ��)�F�[!'4Iz� :Dѥ �RT�::(|$:��Ő�FA�4Cb +^��+d�M��@6�R� +� +�H�x#W D,W���8H٤;��.���m7���֞9�WvLK�6�P�q���o�� �1+ �~����% =���Is�KC��Zq`���To2N��x|�a=��ƚ�U������4�[+ *p�� �\���quwi`��X﷤�q���ke����-Ԟw:���~-[����j�.Q������x�옑U�DML��fP�2�����cf�������c��ܿ�V��la;������'�?l뚊b�wڤ6 Wh�j�L�yP�U������V �\ ���7��X:H�����p���u�=@Bn��= �,��:����Z�����o+@�����~�W�9��w��)L�m���t��*���rK�9��I�R�3�s|.&�2��!X[��W7�b�y��7k/��A ��qJ�z���o � �=��|�}�����Askgs��ze�@���J 8����D�~�<�)�ݢ�_�����~4�ߛ�a��^�������dΧ�w����^���z9��Ў�tx�M����NV�n��N|2Y@�fgʇ���I%�9=Y��Z���ku�����y��z����z�φۄ�lu�����>0����Ȃ�����f�Ѥ�ݟ��a}���Yi�[�mD۫q�����j��l�?�t���c�x=���Hӡ� ��;�<�I? ����s�wc�ru1���:�[�E1��u�N��l<��)�����'A�_��0��~G�O� ���#qq�l�$!�e/rIFcY|������'+��{�`fF�����dV����2�=2?Zꂲ8)~Y(� �x�@",�,(�g��;�@A/���t�{���* �)ڱ$A�vv��K ̝��b}��-���b&PGG'�j�,T�PR�e�2� -`�z�5�s�m�$�VC�脺�Bz@2� � ��]���Z� +�3)J3 +b. ��9�\����ۑ(s-��������RXea�W��L�Ʉ;�iЅ��Xp��+qV�,����T�<ѥ���se(�:(�<�vV��j�$!�z����Ld� "���x �H%M��)��WA4�:�4lx�LKi���p#�/��c׮\Rb��'%n���ԭY'P����D�a3~Cq���S�[lRJ^�A����� $�f���`ڌaW����G�Ap�BC�sbk�nmfͲ�� �2��A)�| sQ�+��J�z��p�p�]���#j���RCfG6c�%"D��m�0�˅m} ����_.��PHї��#u Fs�2 )��+bx:����ȿK(L�P�x���z^y� �)L��K׆�vi0��҅ʀ�á� �6��dl�m�� :-����L4Q +�q �S�4�2�sMuxZ̹� +�2��@ǘ��R���4����1w5�*�'P�Z��]� �k0 L��2\��oxX�ΑS��cn�;�� Ǚ-��%t�"d��$�R�p���C���JkA�rmq���R� +檴]��(-̺0]�AmZ��d)�9�mEl��+ ��v�*KB:5[@������`��X����)����-<��3�!Þ��ía��Z���F(d�puo�0� 1�`:�����a8Q ��L+$.Z ��u$��s<+�|E��!+e�u��#�M��5�P�QYIR�(��*rd%N�p\���< 6�ϰ>U ze�[^Y�L1� +��|P� �j��"�V���k% +R�2C8���rl�0~ܺ� b��*��^�i�r �*9�i��̡�&�K) +$5^��сwO��!9uM i�ƸQ#� �@�7����>���Cg���^*�}?��}��s���>����5�(�m�gLkH�F���hv��;�糿��&�qT\߮-~�U^�5Iƙ�����m~k���B��%�����(q�"Ѥ�dJ3o(�!�8Q�m�zM (| +J�(ȴ��c�(�甞ӥ ��1��d�D��Q�i��e�1 ǕSV��٣��[�%$}����@��IzȔ8�FA@r���h��S�M[+a ����A�W;UĚ):4*�^�W�KR�"mV�!���g� ���lr���4mjc�d�斢� ���3ڡӮEV�'FQ(��*K�za���SA�4ڡtJM�H;�f:�~P)��v[J(FB�ܟq4o�3�J�.��\�Цf�Ӯ�=��c����~��h���w���*XlY�3#� eP��3�G�h���k�+dD*��9ף��4 +�|`7Y��C�XT�$}`�9�%2� P��0(S�7�* +��a�F -/��!�����.�z��^�i���,Vi2?�B�WX�Z&��Md}�(����`��1������"�H��Eg3��ֲ�+Z����>�l ���5��4��h$�+�.�x���Jp��k'�W +9���DU ���g��w���L�14:@�S�hB`K�~�u�n�ۧ'�N}�ܯ��0 q9����z�xP{7�GkxT+��Y@Dko��1?�o�����l�%�~�*����I�3\��P�����=#�<������~s�o�f����S4,�q:vO~,'�~txsP�[[�y�]����؁�6����/�����`i�������. ����Z��}��}��r��~�J�y���y�:j��}�uٖ?xa6���u�F�l6�O�-c�\di����E��\z��B��G�d�1�3u�j�\d5_�rގ���e�#|����ʒ1 16���C� ��`��z��������w�'���e��V�9�q�ְ���D?�A����~s0h�~!6j��=�ް��.�y��e%�-�y����XY��w�T/���O~�'�H��tb���l���/l��u����J� O �_Z�������`�'_�ȓ���D�����n /����-�\q�_sFĚď� s} ^���ip�Ǐ��IsX߯�w�ߜ��}����y ��8��J�^}�¯O0�j�U z�a��9�|fS�(�{�y���m�n��&��Q[:vk������'�A�KB���kǝn�{:������M[�n�>l��� W����^����6x��>N���~5��1[��������ýn��_kx.���řmj�����M� �������i��[�`�6 &pn[7�At�mi/YW��냝���m����Y�m�9��������A�����v�W��֖x�)�����<��";5�������r�q ����n'�xPl�|Ьm�����A�Y�4�칶)��|�4��s�f\Cϡ/�����sꕆ�9�;����q�{���G�|����mg}X{�i�9�a����~�����S=�C�_[!U:��4ڧF�z�xk<�u{_Fv���2�����Sx*�g��0��a"�����PK�C%_����|$y~]}�2�����O}�W�/}����r���PXThqE�'� +��w=%��&8~�'�.I,=_����s�K��wg�չ��꾝��qgx��gڃ��Xn����+c���u��8��ݕ��X��n�Wo4�����L�}�t��� �'ɤO�Um� ���|�`���o�b�w!��r��X2�������J���K�'��/��Ape4i�y��]��� ���6-���ƕ�����Ա�g�����Bea�e��kbR��F���F�N�Ke��g�\ow��m��I_��ڐ)&ğ�g5�=Y�Ψ�{�៚�tR[j�z�"8;�ȑPۄ�Q�2�P[��ۡ��4k̍p��9v����� +3t���:���sM����m8�a۰�.���l� 5��'�&v���~�n[�B�毣6O,���jug�Mڅ����8t �2^=FB~�1& j����y�v�}e��g��6�Ѻ9�K:�A�V�o�kvc���>F��D���}o��Eݮ�?�����_�[��m�la�x9`�����T9n�/�Z���y�`�ϡ�$���<�<��3�3Z����3��3�x2ѹ �J�����2^|��� K�y�kUg�}�j�a��jk0�w�w!JQ�g��Nw�|�e<���z�N����jBÀ��>Nаr���w./������� �E�J��[�7��h���i;n ��ρ��.�d.j�#[�}�n�� ; �սv��c./lX��̥�Q ��,7�,`���6�B%�9)�$|����n��D3�A���s��'��N�� ��YD۰ծw��y�d�{8�+�۳?+2�q�5 ��������f�=��� WWEhUSy���ղ��1 ����&��/����6B:���;����Hӧ���vQrV�]g�����-�[���9��>����$jk[;G4>O���Em��T�l<����p��U�%‹�N׳�Z��L��]M�N�����7�3lj^�E�i����ɭǭޞY�q|����ƈ��0��䖍n���(���U_�"�I��K*@����F�[�v�9��cFk�̛��^H�ocE^���� �T�r��ZÓ:���Xb|a�����������<���}f�x�Ym>nyq秃�a�ȓ_RN�c��&�?��G� ����#���9$�q{�~�oz�'���΅'�ۿp��d�}1n�{�>7��� ����c7ִ  J��* ��Y��r�m�ŋ�vY�C-�~�"�ۆ:ch�����ޗ�j�hT�ɛ�tB�3:P�����賺�3�G;�4�� +#&���u�!1�k�q����ai9�]}@���|>ڎ�U���'�]yV cw��B�˄�@K'x�(��z9�u�ۇ�k�Q������$G���6:�U�}�hG=��H|���C�� +�Dؾ�m���5�v���\��4:�IDl� �����>�O�z�|��/h<�VMdz�2�j����i\�m0�q��3��oOfyԦ�?�v&�;h68ݳ�1�G���n\����6z0�iֽ��F��}ʙ팸�L�-x�4✨�ՍeҜ�%h���c�V�Wƭ�q|���|�n򡕕V��*�>�q-�(��ڱ��ߎ.U'�l�&� �n0둹~F�n�1��`������_��|>Y�0f��|��N;� TBm��a)�����;�;���V�Ʀ��c����|�es�����=�fv^>�z7[�]�c��i�|�)�d�t�S��ٷ�����j�����- +\P[��pu��wq�c�<���+��Qe�*hj�׳�ݎ�ۯ�z�4���}�I�3FǦ�St~SZSk�K�6]��f�ᦔIa��9h���fmxԬ��Xذ�?���ڀ���d{B ��׀ +j�����n�cX�;�;��=�� #�u;5s\�/84uwEQZ�@7jf0�iǬ�6�B�f����z�]���f0j �΃��Lo������F�95����[��i� +'�O>v�M׍~�w��m��d9�I���R��lo71��E����ޝ�ږ[FEܘ�"ږ���I0�IH�a�5�ɬ�{Q�jN����/��Dw;��Q�{�\5�A)X���8]��?��������r��.�C%8f� ���磖 h��F���w�$��9횵�F��C��('vcC�lfE���޸��a��P�=:=���[6p�eA=ag�nR���3B~G �0��l���XA�l�1�\�ZNx��h�Ыat��^❣rؑ��ɗ'��q�"7�d����]p8:XP�(���a=W9���Q��j����' +cA����O^��c�>��^����u�ʩ�;h�w �o�[��32�<ϊ.�2/v���(dc߰��A�^|�9������,|#+��j ª��.$������R��ݫ7�_���_��S&/�r(������������g��IH�3\��T4!��;.�q��p�~1,�scx���I���_#T�����T��7���5C�\q�I��C!��æ�r˚�K;+�^m�$�����+o��~y�����+O���O�nv.=\�tc��J�>?�5{�`-�|s�����ս���>^�6��5���J]N�����ɯ��>�_[�}�7X<� SӋ�6/�m������6o���J��������Ñ�6�_�����������O�՛�K'��������������������՗Sӫ�ý�������go�-��̿8{а��������/�̟\_�1}�>s�`j����9���_��������GÕ������ەՆ���x��՗ԏ��`��ᇮ����Ս��K�sŧ_�v�.wh����S�姙덵�~6�r�>޺�4�^�����o�W�>__i�^�����[�F�~j]_;�<��E�P���_����p�=}��\���ӥ͝+�a�����S�٭��:��'��<����������A��ol���7�뱱�p� -���_������B��x|gf�Fs��o�� +^oN/�lܾ�r�F�f_6�f���+��o��{S�]~����L��ͮ]�-y��̞uOw��g�9&����x���B����K���a� ��{�&S���/ +�~w�6�t���#j�rc�7�L���t_%���]�!W���~^޹}k�ӓ��n¦��˚G1��� ��3w��QS!L_Z^���6 +�=���>5�vW?]_=Xx�y�^���r�������.�5�K[�6/�����R���e�����W��;u("����ñ�h��� {�]=�Y�G|�n���^���vz��^�(��XV��/��G����/�������]�q}�[~��2^x�w�'�X�jj���;�3�m��<�7�?���s7��.������px:���Nx��� `���}�o-U�t�]6�g��fW���7k{��k��~�F�ܺs�M��ᐱy��C��v{�u8���W7>�u:������GKO?,?^_9xX$��������kd�c���r;����� 7�Y~�{�NeS�fͧ�����f�g��ä��͗���V�5�O7��{����[�I#�6݃�֠���{�%g/o<�ռy�Ĝ��Y ����<|��z�����uz�����������.��̬SWdK�����/v7��kųWSӷ�'k�:zk7�O�����+���Z���;�v��W7 {�sui�ݻ�{V`��U�o]�_z�z�35�p��������+��wE$2�]Y=X��!����g/�2 ��4͑�{�����ߏ#I|}���ݵ��;��^������w�d)�ui��bg��z�K�MvW=z0�~{M��_a-��:�|����r�a2{�֟ϼ�׺�_4�\���_�m\K�����G/�=�g�|����i�Ϫ�f�l���yg;�O�&[�]X�:���V� vZ[o I�}^!};����l �i +MM�Ɛ�PXYد����~z�q��)[�up2}h��k����oy��߅��y���؝�{ߕ�d��ɲȮ9���ù�{4����oFQ{zu���땅��;7y�by�����gOv^�����?xb�^I��ӽ�d��^���U��|sl�e��ݥ�������R��y��󏖏_7��ց?�7���a�X޹�������vb�T<l���c��[� R�ǶG�7������v��|�֣׿���R��ӥ����̾�����J�܁;3�� $w�0|����7�|f���C�t�;X��{���_��dR��up��ii�y���f;Y����<�sܹ����.��݃�(F�����]����Gq��Md�teuO5w�=��D��J^��j�Z_�o�����_��V~��fpz�7?!>;�����o��-�|��؉����� +� ���>w[� �n-Z|^m.5?������a��1/�O��5R,R<��姧�������k�A �<�)e�^�\,�|��u�������W�aWı�v/���Qb߾�:{�}��[&3�N6�������=�Du"���.L�>�}��>���5��ޯk���Ճ�Ճ���ǧKzq��Zc�=[Q��3y8}lj�K>Xx�biws�a97:��3����tik{���և�����kf_���ѝC1�׌������[G �A���'f�/-~��h�?�^�.{��y��� ��-6����g��l�ObosC�.�|�)?�[n�$�^��dwo>}�x�W�ѥq;��2/�u���������<����jR�����̎�vW�b�]\.y�sk���gmܰ�ÌP�O�i�zk������ϣ�qy�Һ�x�xs}����^�_y����3�/��V���Fc{kY��Ñ��p��ɳ����6��և��&�B{��z��������*�ٛ_1�P�� +�>����{{{���@ݷ����b͛fV�^�ug���+;f}�߭}�4l�r���k{��f��o>���]�ݽr)"�{��M�R1Yl���;�@\^_YzoT�ōW�������gH�-���v��r��T�-��E.'g6APSiv�scשgwRc%�;^�}�����v'�2��������e�����SW/�RV�^f���(�O���� �]��i�|�f�:�lL�7���(.=Y�}�5\z�Z���y�du����Y���.�����_b��ߎtpR��1��O��Vʇ�սk��r�����v�t�V���>\��|���n�ѣ� ���g;s�k�`f����/vC_�ο���Y_���M���F�==��[�7ﷁ�ί>��e�p��ݾq��z}1~4{��[�t�0&�s����䤿�cx��M��̒q�������t|��H��>�q�T�{ry}u����tO��y��.�Q�,�d~� +��-�;�W��,��ھs=y]i�8���q�zoB�@BB���׏��?I6n�Ɣ��k�ٌ��h4ͭyu8-�����Y�,����-�ns��6��H1���������l-�R��|5$I�� n���͢b�f*��OQ�Y�{���"S�z��5d~ /���c)3��#S�QB;�+����+Oj#^�&c�ؽ� r�V"��C��g�9������]Q2�k� �������+c.f�AF�Z�����x}���w��W��Xi���_����X��y3�! oT���c�YI'=�g��ظ>��M�q彆�=HO�ymbe3�賌��[����^D�7�.z +��ĜuL���yEF��wo�d���<�>%�N�y{r����ԙ�K��Vc���vL�� <���F�� +�F�1��k.��5~i���,Xƌ��fP���uV���WDž���������(����pzʌ�� +����E)�.opZ1��5�ml�r���8pdb�yCx�E��0�A,�1���g��F?=m�۩o��G��X�u�Y�*M�)fH�h,4t�\�^w�x5� ����5����{�39Y��?�O�+���?��i�=�^��_���i�;�Z� �"��8V��5�9W&u��c��8L�Tf/���aI,C��@Q� +�~j̸� Z2Dkڄǒq=6 ��yڒy��1\fx׌�oJcodgY�̐� �k)m$�~�K�8�,bX{�?�c�����v��`�Er��h;F:��>2�g����wdt�}-�O���.��t���5��ӫ�Y���Lm�3� �͵w{��}���/o ok�GKB�P�E�ٗ��e�����f`C�#I�5��~�ndO��0^����ч!���I;�WrT#@� ���� +����i�7�e[Hg��^dL���/h2K`���7�� FwTR����Z�)�`a�*s�l�k��-gLYC&�b�E`���;S��ï��ON�3E�&�L�Jk�?��ګ��=��BC�)�H�F`�9;l�c����q4��B�f·�7���{@��~�/�:��:���tX`��3�li˅#91c���~�� G��Lc��k��M����5/TJ��g��f�ܥp�c��w��`O��s�9�Bϩ���/�B�Hx��K!c/)�d����`�/��w�|�QBB\䥙���yA��__�ħp��&E�Pm'�3�� +,M*��g��;�����g�\~�|�����q Yl�����}�˂'��˧����o�l�h�aX��#��P)W%e&�}8Q�*�JT� ��m3�s�`�;~2����J��@����b�e��0�I�a�Vc�{J�ʿ�����ky|���W��|������g�y�Ǹ��=��`gL&�5=���������(�Z�_n||��O�5�Q[�����_�����d ï`�ʚ�q;�l�/i߁��Q��� �: 쭆 ~E ���8�=��~�6�WGzٙ� ��$��t����@˼���,��`��.� +�k3�`=sR���J��xcw0d� + xm���`�jS�5D,C̤��̷�u؂L�2������E����q���.��*b;�����!����bϺ�� yO�{����6B��נ��i*A�����6G�2O��\k}HZ�z�O�ߜD6��x��Ϣ�Dڥs����߻�-Y���MǚM����28��vݟO�8� g�.��3����O��L���?aTi.hK�K���l�R��K�O����Z�`�>�}gEW2�@߳���[�#N���k%�@&���es�V=�)jM9�?�*`�����}����%�Z��������T��顭@ͥ 0S���H�_�8�w������S�D�)=��"��Y�s}�0�,��a����>�a���Sˌ��:�b����V$�h\�̌5�7�bn���޶����o?|䀲�1�q�t���'mS��S��x�웂x3G�z�%]�`�bȉـ���[���1��a�\�?a _Ukq��1Jw�cԩ��<���놘��1�La��;��� }~���ƶ�D +,� +c�5a�Ak +K�t#,m��Lu�r�m�W�:�VU�41����͂U��6nx�ش�^�f����EJ�b39bK#��V���T�Yl���aG;��b��I��&�ZcBgԚ��֖��Z��0���IHK�Ơ�� Z��ɬ �}m�4y���ݝ6�x�k3â[�����~�����n��_m�m[ mt��?�vT�F�� +��ʓڟ& ��m�m՟�MM�N[��uFwt���L�:Gݛ�Tׯ�)�ο�t��З.����K�*�\��J�eXW��ܺ�oء��,&� ���&��^7���t�d�WcЭߓ ����k+�/�ɞ��ۆم�������>R�b�d�0�sTܡ/�����ַ�����jU������*�����ǬӀ�Na`;o%��d���dm��6��1bH�_uCvQ[�Ű�P�9c����1 ��;����k�������ʈ�&n�i9�������iC�`��c?q��`�z[Ec��\F{��Q�N���m��{z�u��4����xh;L���cr�NS��ō۔��g�j?5��[��(���]�iUʏL�e, +��)��ί@�� x����hNgBshEsc]7���ɧyVؖ� �k>&�Z�)1�������W*E,���i��RKչ�Y:�d�2�`E�O�j�����!��Y�ƞ���v�hν��(��Z3n&��f>�N�&}��gг7���b��H�fd �S[j����?[����&ڃ��[�;mG��Oc��G������쯎MϞ>d~�σ��T)��J�W�eۡ]7��!bs����#��k;�_G�ӧ�~��X:�����%ze��8�s�[P���2���ҫ�9)6sο��ϥ-P�.������<��)7tU�G���, ]@=�]u8����+N5uK<�d�±��[ߩ6>�Q| �% y3تě�E�����e���ĔHn�u��" ��8I�M62�I����Kv��,9��}䮤3Q�T}Myݖ1��T՗(P��>F����nm��k n�1is�_}Fw�kӺ;V��=����?xlK��h���l2i�4]����{vv��k�&�^?1�y3 W��x����?�w�}־�� Xf��e�Ŏ�!���~c�fpm)W���\n�/&n�G$���)�~�J� ��b5�0���Zz���`��_�A�O� f��Y�l�;_�mD#��B���&�Nf3�T�t5R�Rh�.�B� �~��:�k,���Z]|�_'���u��1;��d8b�Y�o��gx���ۂ��س�}$��"oEk>2�(�яl�ƨÑ\F#o�A��-U���=�o'����u��>��� Xl�Zn��p��S��O<=�~�������i�{��o"P;��-�O Y]b����-���J%�d)������4�J�;�Y�Wy;� +�35h/���\O����t�o���},�����S��� ����|��L+�C Z�Y��?��-o�����Y��l�}��Tu��u�Hne�����H>n��曽�d�7��,'���l�zc1(,Z�H�\���a��>����9���}�� ��T7ŭ�E��[�X��I$ˍ�Y�M��7��{���{om���m��OU��L���d��=�+���T%]5ퟪ���X�_��?���*�Ac�}ټ�w����G�_�{��ޚ��knlֳ��i}X�l��ok���F5h�4��_Ӧ���k&z�`��5��в���Vy)����߶%Qwk ���W���7h���H��� ~;�9��^�?�����M ���G�?����GpQ�~4����*m)�����W�����p�[ŸX?i�������8�� ����zi�i����W7�`_���9r6��Q�L�F���mlq�O��X�����D���'�X�=��U�S�Z��ޫ�ik֪N���������>����)�'3���wV����U�g�� �g^ $������}~Uڝ���+F}S$���ԍ���a�-��:���V���r��q�-��Z3��Y������~��}��w��/ƿٲ���������5]��uO�|���"��k}�����d��i�_�����s7���,���-�Wt�j}4�nlXAc���Ϯ��h���c�Ak?�����+ ppw��x=�7�"�n�V���K�eir8�w���[��[���� ���2Y�<�����J~���̅�IAM����VE��z]�ޒ��N�4�x>0J�g��C��B�%��?kX���A9�%��[�3�٢�� w��[tq��'��Z R�� =Q��1�� +d�9�{x��»�)i �{��ʅ1���Lq[d� +�-̾���_`[q +�1{���x��]�U������@ʠq��;ZG���������P�,�ύ�I�a֛iܾ}+Ċ�Cğ{m;3�w+��੏L�� �ß�5�[3�P��-鰾��J^�������g�_*��С*��q��Nw�k���9���l6fF�\��������l�,fDG�Z:]��߅~����u7%�����5�J���'�:%+�߀�$�����S��+}���a�KWZ%�n-�r�3���`��2�z扩����m��^�o鞂MX\t��_I��x&Q��T����{KX����|�չJ—�6���¨!Yi6G6d�K~DcT)��iZ8�m ��S���\���K�� �Խ���`*��L�J=��h�U�I2]�h?X�2��&^_FOHV:����*�i z��K��t���t���%�ӯJR��B�W)�(Y���t��n��7�J��o��}EV�*���`���WgX��I�J'x�>nIW��㦹��E�j bu�(Si�a18��3�M��A��x�� `�VQ��A��o�� ��m��[�}Ld*��|�Yf(Wi +/[T):��5� �~�o�C&J���N�R�B���9��Ȣ���A[���z�d�-��[����6��J��򢯽,�*n_�+-Q�f&���t[�JU +t2��5�j�2 �U�v�����I����@��Ae�G���岯�]�,#Siߏ�J�~��J�O�*��jGy�Z��{C݆�T�m��UA�R��C����@���xҜF�S锲�&��4��JISĜ������8���U +j��������ŕ6�0S�1j��Oz��D�� �}hF0P ��y����WPi�x� +sZ/]i�(:D�оu��+ �&��RX S�~��LװR\T�~�o��[�D�<�Af��kN{�����a��d�6*�47A٧��j�=]๱��=���@���2�c`�%�����DO�~b�`����Y�]/���R��}٧~��>��� M,�.��I�ǧ�Ӓm%�N+_!c^]E�9���ڟ3�^���i��i�9�_�6x���P_K=��\ʶ��>m�.L�i? �9&�|l���O��mN��E&j�� �����P�נI��G�i�tG:�3|����ܯ��1߷�>M��ӹ�����c���y�������9$zjk�Q�i��*����8k�s����]�K�3S/�蟱�>�2����C�����F�1�;�$�(�`��ۀ��,��S�I����o���L}���Y����)\u0��s�XDG�� +47�N�7#\e�����P�Z#��땭O�� O-@;i������۽Vc�E;�J�:���IW��~�V +�_Bd����v:���%�S���Rw�y���u^�3�Q�U���RJ�^h��=�� *�t��_���aR�Rd��T +����r����:��0����Z���j ��_H��s*UZ2�V�l +�R8��B��!�y�\=�� �%�1[�yoxZ��s_�M�n7Lw*W��,�c�E��g�����W�;�<M$s�3��X��f��G�s"[��l֡N������u�R4#�@N��Z d{)��&iX3ũ&��H�����7L�>W�ږ�=�s�-�����^µ�� �w�����*��)XK���q!���@��UP`���z�m�3�׃�Q�@���<��-�%I5jȋ�o��d�[���(��܁��@[N��5��?L��ͼD�L�l�4�����ǯ��>~:�VFƤz�צ�ԏ��'��P�,b�5�%�Q#�gf�7I'W����lw;�%���F��<������g�P�X.U�0-T=����\�t?��3�m���FZ�H�n��6 �`����v��;b-ͻ��U�r���$�����5�*�:GE[��5Vg�F�4A�!)��W�U�׫y�idF�B��A-��M��0@v�v���-; �r>�A�:)�a�o��ޔCm���w2�_�[�,9L���O�F�/�rE �j�ȶ��'W�=�!��&�D}��wÞ�>���=��0u���S�|�� +d���lI�!3A��f��pK�tw*���Snp4(/�j@�Sj����3�`�F���u�ؒ�|}�yx��~�P��Dzp�r�A '��ٓ�_Pj�9�Rb��).��A�$�����Y�G���K8� �/�).���]R�U�!Q�%�.Yqk�\�"ɪ ��e6��]��k��Č��n��K(�uo��$qS +'�|�{���DB�*��~�Dk���GcP�ҭ +�p�����庯O� +d�5�;^U��ӛO�V`J�NbSȁ�3���*�i��ؔ��w�=��cPn�Z�m�L"����nZ�"K����Y��v]΋��Ǯ/wx��E�'�!�AAҁ��{@�i�h���:ƌ�8�5��NΖ�-t��!�-K������*?~� +���YǓ�$h��6��e�;u��Nx*����Jy[靅���a�I����>�@����iT�n$ok s&N�yt�T��$G嬓o�s�����%� No[D��&d]��B�3��T�rD����i�b���H��g|2F�崪b%�� ���X��� �vX��Th4II0&�{T�59�v޽�b���]�h�'H���������  ���F�y�:�k� �M�q��<~���(��f�ǥ1HY�E��Q�A��m��]o �<�qX���y}�2��ՐJ�, �y�(5�i�mjka7)Y�AV��� ��-�����1P������4�u:�L{Y*��<���l�E'����U��%N�g������ �jJ���X���d�*���9��U5J�D\L.fE��.��E<��΂��;|c�um�tLc�85���������q �DЉCwc�tH'?C'[)B�ɢo��)#��h�G0t�:����NA'@ >��SF�)�o��)#�Z� :��l�����+@б;�1t�:d�]�� �fUSF�ږ���G��]T4I�ӛ��mU��ʈ��wæ�֯�s@������� �/%ظ�O!�@\�XQv�7����kN��1�8,u�C��k�9��y�.�z��no� ���J�IR�9ؗ�@s�tMZ +�����:� +BǏI���6�s����Wu:�iT�݄���:�$�1�cL���m���k`7����O[��A[�kې�� @ +�#& �".Ol����Q�Κdn���Y)��R�!�7AL���ux}o�%u���c���k�å+r���6%�f�8��ʚ]�(0��$Ɓ]5�T��N�b�o��M��_t��<4M�lJ_���� �\�bRM���:�`�z0%�O-�Ͽ���Qat:$�4��;��C��B�ī���� Ǯ�D�w��hwqL��%��C��K ��ٲ>��m;�ߥ���x9 K�pE� 1&��3V��9�=v�we���S�ٓ# �Q��ĵ�Q�8��j����5B#���r6i����]w2h]��&���{%��� +�Yő'��'��핂<\��SG,睌�I�o�6���V�����.��<"�(���a����xn���c����;�0;q��|Z\�4hD[ y��##h�� E���Ph�p2__���V�$����8�&���p���4$����<�,a� +� s�w��:��xdx����@���q ���Z�q� ���<2r��k�<�MI?An\��LE�6� +aP�$n�ωd�������] ����������__ �L޻t|�"tA-x Wws��e�*�թ��S��� +H��NТ�%U��˳-C���w��2� ��.��<��1u�x����']]=���<�R����p�k�� T����T�u?N u����x8�4"��x���<'8�RjyN��;ցH�Ǒ�p�{ZL$ %����-��D�6�b"���Òz� H����舎��諤�G"K����' �."b�k4��w�]�;�r��D<�v֋�g���@�&�����zdr�#�W��i�)^+#��d�aw�v*X�߷�%�9�#:�M<2�� dʥn�JG�J`�۴�¬/��z��+-���b��aA���NW7�,"��� �����w!R'ڑ +�JD�D;U�2��{ +"��{"�y"��G�B*�@�B:ꮁm�������4�� #��}�4�<< EP8i=�l(��W��yNr\����o)�����}�P8�D �?��Ix�P8i����YW�0����J���l�����X�ye[�6� ���(�p Cb�7��h�\\2|����Uy��t;/P�RKW�up�Wח�G�8����7a�8�T}�����"�ך�R��)� �c�L#RM�\G���F��Ei�S�},��6 +Ʉ�3�L��0 A}{^� �&3'!K +uwI F�'�;�ׂU�x �n��J��|�U�YX ��Fa��v��n3�l�x��PB�*?�\�c�J���R1+h;�pb����(�� E0�Y �F8E� +��Vr;�N���r`���l����4��K��L�ҹr>�ZG���[/+�^�� +��*� vhT��ez�>1rT�^H�=ګ x��/���T������0D�λ�H��'^P�|�*Bn��mM�EpFT5n����*����کh�\L�QׂS��yл�gf��J;"q�� +�R&���p����+hHt'� q}ג�)�����+I�d�'���Z�����k@5ӯ�ݥ�@�8��%;�OD$�6����4�}~�[�tR��s.���T�� �N�'(�/��餰t�"��tR�x�H�G�t�0sV�����tR���r����F4��9 �V> M'����������ҩ���M'�k?g`�Njt����h:)�;�4��N���t�MZ��-�{�tRƩ��l4���IDC=�����S�.4��m�\4�z�=�����? Mw�nF�)b������V?M'E��d4��i�(� h:)� ܽ>Mw�d�Ih����3�tR���g��!����������{|��6���b7]�$���2I�87�J����d0߽��es���&�)ϳ���[��t��n��%A$$�d^5,T��� �z�k��IjU���rƒ���9uS�e�&IR�j>)�]�Q�pD� �Q���Jbse��-K)���i�x�\�4��Is'�]�� +��2͝�K�NU��r|2���v�j��(z�T����Q��y8�c�('�{8��}���N��Ѷ��{��h�PD�8���B��E�������O�S���j��5��0:�yV���ҩ�h�\G�q���Z�o"�ܑu� %Y]�-P��$��KSe�,u7��yO����%��Bu%\u4 u5~Lu4 �.�[9�龧 ? +��gF_%U�]���"��Ϙ����])|ˎ�����k��K`m}��[!��$2F2Z�F���.YV6�Xy5߫R ���H"�.#�w�r1����)�����-�KR�ӳ2�U�#b�s�yS�j��7�x�as����y�'�@�y4[5M�< �n8�-V���p� ��&1 [*� �<�g�;�+�r��1 %�+��[}[�;%����,hL���dʻ�'R�)�Q<�)��i���N�KR��'ÝR�W���� wjo5��ǁ��g���^Uk��f�F��C离X+F>z�A|aY}�=W��z��H�)x�2�n/v��<Vb�\�f�˻�.b⟊Ba���A�P��:�}S cRb2���(oScv��#Ŏ�,�)hV�PWܶ��2hV3+Հ�L����w_ٹ �$As'*���������"�P��N��� �k�)�ܿܚ��t�����X�yWSu��ۓ0�]٫�n�a����=^ɔ��ʛ�l� +��u�+h�jԳƕ���(���;�~� 7RK"�p�)ݼP�RQ[�ތm^�)[E�L������6E/<ȵ��3� ���;�RNc8�Z�*�U%��L��2x8�<o �N��p��ϫ���-9^_�R�mfK����>�����S�\6 W)���\���J�д��g��R"�����IU�1@�s� `x1�����kU�R���~K�9�7R�4���W���>�*Ey��9�R\�R�bK��t��Dv�j���Ā0OְK8�2�QI\�=>�[�qm��1�-���]���dko�p�L*��مNe�$`�ǂN�Y̮N�X����t�C"I� ��m�d�F%�@�����̂�W2���$��C�d��"3 ��~K��Nt����+�4�4��It�uk�X�5��ݜeQ�IQZ�����7Eii J�����$�-�㴘�\�Ɗ�U�� +�ӗ9S��J�yW__���Ϻ������p����^V{�3L?r-�I��2�.�����M�Z�wz���hBࣗ�J�'���k��+Na$��H�N27�;��0���'����ԛ���ctbu=}��eb?�u���'�Uq�.������L�'S�#8x��"��iٔ�L7a�7�s�k��2�*���Z�&�B���jެ� +�ԫ�r��R�^Ki|e����Y�:PG�0��Kf���ص,:&1�V��hUy�cW�<�;)<�|�cW���ı��/C�.,e2����9��* �Bt� +�Z �?��Z ����Q�j1��k}7 +P * +;Lq�m(@�@ȱ�Q�?���cu+ +P-��#߅�i��^I��W�'�S��푤|�����]x�'I��ed{NR>3�l�<��Oc�� +����2?��")�|~�g&�S���||�l�W�Q ��A���=~7T�wC����n��������������to^?�~w� %��O�+$��=����)� uG^�����~ʑ!�����~א\Or�*f��nr����S��wqw^?AC.��ݑD2��r��"T���' GT��\=cT#e%#����_���y��$ZŞ��O�-|� T +y�����Q�w����IrS�||O��ߔ�O� +��?#���F5�G��bD�y�$LM^V?~v���~�i� �� �����y���^���O9�+���S��!R���ᷤdQt���y���,�'��S�k�%��||Ve*���]I'�:�Cy�X*���V4�E^?���h���y��-yx��3��ɭ�˓���[*���I�ix-���y�0����~Bn�w����-HC>������||j@L�no��ո-���X^?�c�"��z<� �R�+�p^?e3GF�n�맜���[���~��T��S�{}B^?�~7�� �+Җ�y������jy(�ߥ+���O[��)�w�V����):�|Jw���^V?�{������o)���'�}�y�8�%�����AQ^?E��ey,���aH�^�� �eV��� ;)��wa����J��O��m�+7Y���ʆy8�$/pе2�S:���⠈�| �^�]�Ç��ViJG|��Z�7*��JP*��U���t�1��&��q�o���,X!��1��2���|�DK�}# ,+��{����G��T���;q�s}��nj�(d"�@�i5;VSb��s�oq���b�Ɍ��1���˕ݻg���4������3gѹ�<��{�x_6��z��^4�o�]�<�ҷ�w�W�x/.�����z��I��I�7�fIZ8�C��}�~��j�5�$b�L�a�����W7B�}+�>�k�$4��[y]jM��!y�R�y%�L���[r��������0 e�e5ݎQC��u$�����9/6tZ�3Y:}���-}���B%l�z_m�$Nj��Ȗnur��p�� A�vz[�t�h焻�f�0:Қ��q�Ο3�����ϊP�@���k؎4��V��$��f\�4Y��9ܖ�Ns.�'��*���pW�gA ���$J�L\x��L�ɰ�p~�tp���G3z~�g�+��s��3c�,@el�D����e6�e������#�Nv�a����PAw����~����I;]F��<� +d�o�O��9G����s�w��jVd��O��?����S�UZ��#�����>3�Sк�� �u�Zl��E�L6�n��De0�q��1�Ӵ�F����w�?�τF%�B��~��gSp�D��'�r$0�g���=�@��S���h��,������>h���}�P�-L�dgeʖZ��S+�3�7���ݵ�%Ύ�� �� x�t��ty��Y��y�YSs�Y���_� j��\ u�Wo��q�`W�6���n�l�sp���sg�٪��̱�8�hf�=#�v�d$�������5�̂e��Y�vq,�`{��R�� �C�eB�τS�²@t�]�P�L�b5��a�$Z� L�L`*��C��Y��X �OX�,r����B�x0����/�Og�W,v�_��:���񱗋�- �1�lι��Λ���첫o ��w9�xzÍ�� � }�a +f�������z0b^ ��1_�fhy��ג�!�� 5���=�sE<7�w�3F���y0��hރ&�z�N�@c`}��g�g�Wmm c�Ad �l6�e1�:$�����A��ѽp�=(-�]0� +����+�$!m05'�C����W��ΰ�w�7�'+3�Ւ��.�2V}ǡ�"���;T;4Y�4��X���rvT������nʼnj�~��-_Ʌ7SI��u~V4�9��3\���r>��]���I�_x�8G�� ��14N.|�m�_#�W�L��C���a�g �s�k ����M��p�=���v�ð, �i�m9�'��������r���%��<�� ���C{��gk�tB�C��-�7ӟ�+�i�r��S�|����}���� +���@��<�~8R�ɫ1��653�i�%۩1q5�&h�uռ�e��s���;�z��.��O�v�)TԚ--j��c��K}��k��;�:4=�H�ff<�?#3�� +���c�l1N�Š�H`�i6���ί�vp�rBg7tF����q��� +�� +�P�nF!ͻ�:�9���P]}�"�sD3��^i= �WO���a��8��?��f���H O���N`� �y�F$��]�;h3�΁��������OC�g�����$�Q�C����'���َ^����a�?b+��q���'#,�!Nd��|��O3Δ�dV����5�c+c�DB��C[Ό����qt�ᅬ �������� KPnq`Կu���fo �@)�;�������S� +U*�YY� �����Z��\��SS�NX�K�:�³r���-��d�8Gz��\��aBG�P[�mY5��ڒ9�3��6@��e�iG�Sd��~:G'}�c��9�c����oE���M�\:�VZ� �) ҫ�@�T�2�[�ƈ}�c��8w�)�hq��5���{"�4��CM�4��{s2�>F�Dh�E+O���6Zc��ƭrA�@�s�/��#2�QU:-=���~5�?�޺;�熟������|`IT/�Y�;_��77�\M�RG�wBjt)� �W��ԙ��k��#@d:Y�2 ̴��N�\?�fP�"H��e�ݹ��w�T�6.������9����8��0��/L�~�cu��Ot��y�nw�!/���?��Ob�2a�gr21,���F��_��7�?Yw��ɟ�s��2��� �CC���#��f΀�8��G��LL��18�$~���@� *���⦮ t,�% ���n�������F3��(�rV������A���1���NDǵnL^�8T���Q1�}��%����pGO m6����;4koO�xof; �f旰Id�`�|22=(c�@1?&c%��# +c�$�1�Q3-̏����Șj%����� �Nel�s>2ȵ$EȘZْ��t�&�ĭB�O��n��)�J�Yru4��yu�+�F-o����j�Y���n�����E�%��*�kn���6�#.��"��Gg�Gb:4<�L�m66�P� +m��B%j3�ŭ���Iħ#��X�ӖWV"> oRr�˶�R[~F�Q��\%��Zkƙ�bA�Sp��P[��ӝ��F��i�-%�W�= ����D�V�8vyh� +`{�y?�B��E�`��bO?�I��Y�C��vl�]�Z��o��(&�[��g�@��g�o��R��سR��[*�ǀ�C�6���F0�n6&�#&�l�٧�2[{yC�@!�rWs1�h��'��@�Y��̍��(�����1��Dc!!���s��ER%v�OZr�כ�����.)�Ja�h�s�������;^?���*�:o�����0v>�R���-�[��>VX�UQKB5�v�� hOp�&ή�6:R�Gm��� �C+/���vId�����|��'�� �����Z��.�_{����cXN�R�h�@���nیdl@�������en LM-3nu�)�ߒɤ�-������iЋ�=Y�����u ���z�����A�m��;��M��;��j����"����)G���D�1@I}~P���ހ���!q�����A�� �TC������:�^�KWCx}8��% ��N +���O���8N9) +6Ƈ;��A�l%��zJ���v��7�ѐ���,��� �µ�祜�'kfJA��R/Ar��t)�J?�� +!�|$�;�>/] +>{I,�9 w����xy�N p�(�*>7>Ḣ6�q��$�`�p/���jx��CadZDY��F���5�� 5ދ�.q5I��?�/陉f� LI�I(�n�-�>4�$&>x'5�!���# �MN���@j�q l�)�K^���o�=ye@D��dđ+&�Mƒ�,@�w��ӇS$K3 �  ^a�d��#�\)�.7��m����#NV�2��B�Bঘ_<>�C��d'�f7�/�<���P�P��w.$�`\���A�7T#��%�l)��4�ʼ$Δ�<@��o����S��7��%(N��zt�$����`��.�K��f��+x2�-  _����J�����Ӈ�n��a�I����S���W懃f$�Jq���"�{^���MT����@ �y��� +�%�ZI�R/���O3�i27f7��z&����&|�s(�8�G E����s͌déLP�1��p +UB0w�'"�� ��`�� +�n0��X9��+A�b7�R� ��� +���/�L���`�}���( + I� ى�� G��W�N��o��Aj��X����"�n� 5Z �?x������C �9���<$� �[~V�H0 ���+�Ψ��U���4����8���yH� ��'A�4SJݯ��$�b/ ,^l����$W�4Z��_Hg��� >���$�d=�g܀� + endstream endobj 50 0 obj <>stream +���ā����.� 8A��B&H���%X��J 7` X˜��W@s���%��x 8��h�����򿒼Fc���@�A�8h/��/T�s �NI�S�X���kN ����pe@hA!�ʅ_L����|��S���b�-4��"�⨘]0&����!酑_��B+�>]/�}�:�Z��bT�����y�$E��y|��� �� +Z{8����~�_�� �C�<�g��n��|O@���q�e�u~d +Ήo�#$)] 5M�)�b��tښR��>��ډ8�m�^>7���/�T#���7VR0T'���~����}��3��כ��8߂'/������_��` ���u�1�d4��� endstream endobj 5 0 obj <> endobj 6 0 obj <> endobj 18 0 obj [/View/Design] endobj 19 0 obj <>>> endobj 16 0 obj [/View/Design] endobj 17 0 obj <>>> endobj 31 0 obj [30 0 R 29 0 R] endobj 51 0 obj <> endobj xref 0 52 0000000004 65535 f +0000000016 00000 n +0000000185 00000 n +0000047379 00000 n +0000000000 00000 f +0000266555 00000 n +0000266625 00000 n +0000000000 00000 f +0000047430 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000266816 00000 n +0000266847 00000 n +0000266700 00000 n +0000266731 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000050006 00000 n +0000050077 00000 n +0000266932 00000 n +0000047801 00000 n +0000053181 00000 n +0000050498 00000 n +0000050385 00000 n +0000048830 00000 n +0000049445 00000 n +0000049493 00000 n +0000050269 00000 n +0000050300 00000 n +0000050153 00000 n +0000050184 00000 n +0000050533 00000 n +0000053249 00000 n +0000053489 00000 n +0000054522 00000 n +0000069362 00000 n +0000134950 00000 n +0000200538 00000 n +0000266126 00000 n +0000266964 00000 n +trailer <<64A8AB8E858948269A0BCA92EF85B468>]>> startxref 267136 %%EOF \ No newline at end of file diff --git a/packages/web3-rpc-methods/assets/logo/web3js.jpg b/packages/web3-rpc-methods/assets/logo/web3js.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3b4cf23de26173be4d1375647c4864ebd77a4767 GIT binary patch literal 80258 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 + + + + + + + + + + + + + + + diff --git a/packages/web3-rpc-methods/package.json b/packages/web3-rpc-methods/package.json new file mode 100644 index 00000000000..317caf74eaa --- /dev/null +++ b/packages/web3-rpc-methods/package.json @@ -0,0 +1,46 @@ +{ + "name": "web3-rpc-methods", + "version": "0.1.0-alpha.0", + "description": "Ethereum RPC methods for Web3 4.x.x", + "main": "dist/index.js", + "repository": "https://github.com/ChainSafe/web3.js", + "author": "ChainSafe Systems", + "license": "LGPL-3.0", + "files": [ + "dist/**/*" + ], + "scripts": { + "clean": "rimraf dist", + "prebuild": "rimraf dist", + "build": "tsc --build", + "build:check": "node -e \"require('./dist')\"", + "lint": "eslint --ext .js,.ts .", + "lint:fix": "eslint --fix --ext .js,.ts .", + "format": "prettier --write '**/*'", + "test": "jest --config=./test/unit/jest.config.js", + "test:coverage": "jest --config=./test/unit/jest.config.js --coverage=true --coverage-reporters=text", + "test:ci": "jest --coverage=true --coverage-reporters=json --verbose", + "test:watch": "npm test -- --watch", + "test:unit": "jest --config=./test/unit/jest.config.js", + "test:integration": "jest --config=./test/integration/jest.config.js --passWithNoTests" + }, + "devDependencies": { + "@types/jest": "^28.1.6", + "@typescript-eslint/eslint-plugin": "^5.30.7", + "@typescript-eslint/parser": "^5.30.7", + "eslint": "^8.20.0", + "eslint-config-prettier": "^8.5.0", + "eslint-config-web3-base": "0.1.0", + "eslint-plugin-import": "^2.26.0", + "jest": "^28.1.3", + "jest-extended": "^3.0.1", + "prettier": "^2.7.1", + "ts-jest": "^28.0.7", + "typescript": "^4.7.4" + }, + "dependencies": { + "web3-core": "^4.0.1-alpha.0", + "web3-types": "^0.1.1-alpha.0", + "web3-validator": "^0.1.1-alpha.0" + } +} diff --git a/packages/web3-rpc-methods/src/errors.ts b/packages/web3-rpc-methods/src/errors.ts new file mode 100644 index 00000000000..303b68944fe --- /dev/null +++ b/packages/web3-rpc-methods/src/errors.ts @@ -0,0 +1,16 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ diff --git a/packages/web3-rpc-methods/src/eth_rpc_methods.ts b/packages/web3-rpc-methods/src/eth_rpc_methods.ts new file mode 100644 index 00000000000..57811421f2f --- /dev/null +++ b/packages/web3-rpc-methods/src/eth_rpc_methods.ts @@ -0,0 +1,564 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Web3RequestManager } from 'web3-core'; +import { + Address, + BlockNumberOrTag, + Filter, + HexString32Bytes, + HexString8Bytes, + HexStringBytes, + TransactionCallAPI, + TransactionWithSenderAPI, + Uint, + Uint256, + Web3EthExecutionAPI, +} from 'web3-types'; +import { validator } from 'web3-validator'; + +export async function getProtocolVersion(requestManager: Web3RequestManager) { + return requestManager.send({ + method: 'eth_protocolVersion', + params: [], + }); +} + +export async function getSyncing(requestManager: Web3RequestManager) { + return requestManager.send({ + method: 'eth_syncing', + params: [], + }); +} + +export async function getCoinbase(requestManager: Web3RequestManager) { + return requestManager.send({ + method: 'eth_coinbase', + params: [], + }); +} + +export async function getMining(requestManager: Web3RequestManager) { + return requestManager.send({ + method: 'eth_mining', + params: [], + }); +} + +export async function getHashRate(requestManager: Web3RequestManager) { + return requestManager.send({ + method: 'eth_hashrate', + params: [], + }); +} + +export async function getGasPrice(requestManager: Web3RequestManager) { + return requestManager.send({ + method: 'eth_gasPrice', + params: [], + }); +} + +export async function getAccounts(requestManager: Web3RequestManager) { + return requestManager.send({ + method: 'eth_accounts', + params: [], + }); +} + +export async function getBlockNumber(requestManager: Web3RequestManager) { + return requestManager.send({ + method: 'eth_blockNumber', + params: [], + }); +} + +export async function getBalance( + requestManager: Web3RequestManager, + address: Address, + blockNumber: BlockNumberOrTag, +) { + validator.validate(['address', 'blockNumberOrTag'], [address, blockNumber]); + + return requestManager.send({ + method: 'eth_getBalance', + params: [address, blockNumber], + }); +} + +export async function getStorageAt( + requestManager: Web3RequestManager, + address: Address, + storageSlot: Uint256, + blockNumber: BlockNumberOrTag, +) { + validator.validate(['address', 'hex', 'blockNumberOrTag'], [address, storageSlot, blockNumber]); + + return requestManager.send({ + method: 'eth_getStorageAt', + params: [address, storageSlot, blockNumber], + }); +} + +export async function getTransactionCount( + requestManager: Web3RequestManager, + address: Address, + blockNumber: BlockNumberOrTag, +) { + validator.validate(['address', 'blockNumberOrTag'], [address, blockNumber]); + + return requestManager.send({ + method: 'eth_getTransactionCount', + params: [address, blockNumber], + }); +} + +export async function getBlockTransactionCountByHash( + requestManager: Web3RequestManager, + blockHash: HexString32Bytes, +) { + validator.validate(['bytes32'], [blockHash]); + + return requestManager.send({ + method: 'eth_getBlockTransactionCountByHash', + params: [blockHash], + }); +} + +export async function getBlockTransactionCountByNumber( + requestManager: Web3RequestManager, + blockNumber: BlockNumberOrTag, +) { + validator.validate(['blockNumberOrTag'], [blockNumber]); + + return requestManager.send({ + method: 'eth_getBlockTransactionCountByNumber', + params: [blockNumber], + }); +} + +export async function getUncleCountByBlockHash( + requestManager: Web3RequestManager, + blockHash: HexString32Bytes, +) { + validator.validate(['bytes32'], [blockHash]); + + return requestManager.send({ + method: 'eth_getUncleCountByBlockHash', + params: [blockHash], + }); +} + +export async function getUncleCountByBlockNumber( + requestManager: Web3RequestManager, + blockNumber: BlockNumberOrTag, +) { + validator.validate(['blockNumberOrTag'], [blockNumber]); + + return requestManager.send({ + method: 'eth_getUncleCountByBlockNumber', + params: [blockNumber], + }); +} + +export async function getCode( + requestManager: Web3RequestManager, + address: Address, + blockNumber: BlockNumberOrTag, +) { + validator.validate(['address', 'blockNumberOrTag'], [address, blockNumber]); + + return requestManager.send({ + method: 'eth_getCode', + params: [address, blockNumber], + }); +} + +export async function sign( + requestManager: Web3RequestManager, + address: Address, + message: HexStringBytes, +) { + validator.validate(['address', 'hex'], [address, message]); + + return requestManager.send({ + method: 'eth_sign', + params: [address, message], + }); +} + +// TODO - Validation should be: +// isTransactionWithSender(transaction) +// ? validateTransactionWithSender(transaction) +// : validateTransactionWithSender(transaction, true) with true being a isPartial flag +export async function signTransaction( + requestManager: Web3RequestManager, + transaction: TransactionWithSenderAPI | Partial, +) { + return requestManager.send({ + method: 'eth_signTransaction', + params: [transaction], + }); +} + +// TODO - Validation should be: +// isTransactionWithSender(transaction) +// ? validateTransactionWithSender(transaction) +// : validateTransactionWithSender(transaction, true) with true being a isPartial flag +export async function sendTransaction( + requestManager: Web3RequestManager, + transaction: TransactionWithSenderAPI | Partial, +) { + return requestManager.send({ + method: 'eth_sendTransaction', + params: [transaction], + }); +} + +export async function sendRawTransaction( + requestManager: Web3RequestManager, + transaction: HexStringBytes, +) { + validator.validate(['hex'], [transaction]); + + return requestManager.send({ + method: 'eth_sendRawTransaction', + params: [transaction], + }); +} + +// TODO - validate transaction +export async function call( + requestManager: Web3RequestManager, + transaction: TransactionCallAPI, + blockNumber: BlockNumberOrTag, +) { + // validateTransactionCall(transaction); + validator.validate(['blockNumberOrTag'], [blockNumber]); + + return requestManager.send({ + method: 'eth_call', + params: [transaction, blockNumber], + }); +} + +// TODO Not sure how to best validate Partial +export async function estimateGas( + requestManager: Web3RequestManager, + transaction: Partial, + blockNumber: BlockNumberOrTag, +) { + validator.validate(['blockNumberOrTag'], [blockNumber]); + + return requestManager.send({ + method: 'eth_estimateGas', + params: [transaction, blockNumber], + }); +} + +export async function getBlockByHash( + requestManager: Web3RequestManager, + blockHash: HexString32Bytes, + hydrated: boolean, +) { + validator.validate(['bytes32', 'bool'], [blockHash, hydrated]); + + return requestManager.send({ + method: 'eth_getBlockByHash', + params: [blockHash, hydrated], + }); +} + +export async function getBlockByNumber( + requestManager: Web3RequestManager, + blockNumber: BlockNumberOrTag, + hydrated: boolean, +) { + validator.validate(['blockNumberOrTag', 'bool'], [blockNumber, hydrated]); + + return requestManager.send({ + method: 'eth_getBlockByNumber', + params: [blockNumber, hydrated], + }); +} + +export async function getTransactionByHash( + requestManager: Web3RequestManager, + transactionHash: HexString32Bytes, +) { + validator.validate(['bytes32'], [transactionHash]); + + return requestManager.send({ + method: 'eth_getTransactionByHash', + params: [transactionHash], + }); +} + +export async function getTransactionByBlockHashAndIndex( + requestManager: Web3RequestManager, + blockHash: HexString32Bytes, + transactionIndex: Uint, +) { + validator.validate(['bytes32', 'hex'], [blockHash, transactionIndex]); + + return requestManager.send({ + method: 'eth_getTransactionByBlockHashAndIndex', + params: [blockHash, transactionIndex], + }); +} + +export async function getTransactionByBlockNumberAndIndex( + requestManager: Web3RequestManager, + blockNumber: BlockNumberOrTag, + transactionIndex: Uint, +) { + validator.validate(['blockNumberOrTag', 'hex'], [blockNumber, transactionIndex]); + + return requestManager.send({ + method: 'eth_getTransactionByBlockNumberAndIndex', + params: [blockNumber, transactionIndex], + }); +} + +export async function getTransactionReceipt( + requestManager: Web3RequestManager, + transactionHash: HexString32Bytes, +) { + validator.validate(['bytes32'], [transactionHash]); + + return requestManager.send({ + method: 'eth_getTransactionReceipt', + params: [transactionHash], + }); +} + +export async function getUncleByBlockHashAndIndex( + requestManager: Web3RequestManager, + blockHash: HexString32Bytes, + uncleIndex: Uint, +) { + validator.validate(['bytes32', 'hex'], [blockHash, uncleIndex]); + + return requestManager.send({ + method: 'eth_getUncleByBlockHashAndIndex', + params: [blockHash, uncleIndex], + }); +} + +export async function getUncleByBlockNumberAndIndex( + requestManager: Web3RequestManager, + blockNumber: BlockNumberOrTag, + uncleIndex: Uint, +) { + validator.validate(['blockNumberOrTag', 'hex'], [blockNumber, uncleIndex]); + + return requestManager.send({ + method: 'eth_getUncleByBlockNumberAndIndex', + params: [blockNumber, uncleIndex], + }); +} + +export async function getCompilers(requestManager: Web3RequestManager) { + return requestManager.send({ + method: 'eth_getCompilers', + params: [], + }); +} + +export async function compileSolidity(requestManager: Web3RequestManager, code: string) { + validator.validate(['string'], [code]); + + return requestManager.send({ + method: 'eth_compileSolidity', + params: [code], + }); +} + +export async function compileLLL(requestManager: Web3RequestManager, code: string) { + validator.validate(['string'], [code]); + + return requestManager.send({ + method: 'eth_compileLLL', + params: [code], + }); +} + +export async function compileSerpent(requestManager: Web3RequestManager, code: string) { + validator.validate(['string'], [code]); + + return requestManager.send({ + method: 'eth_compileSerpent', + params: [code], + }); +} + +export async function newFilter(requestManager: Web3RequestManager, filter: Filter) { + validator.validate(['filter'], [filter]); + + return requestManager.send({ + method: 'eth_newFilter', + params: [filter], + }); +} + +export async function newBlockFilter(requestManager: Web3RequestManager) { + return requestManager.send({ + method: 'eth_newBlockFilter', + params: [], + }); +} + +export async function newPendingTransactionFilter(requestManager: Web3RequestManager) { + return requestManager.send({ + method: 'eth_newPendingTransactionFilter', + params: [], + }); +} + +export async function uninstallFilter(requestManager: Web3RequestManager, filterIdentifier: Uint) { + validator.validate(['hex'], [filterIdentifier]); + + return requestManager.send({ + method: 'eth_uninstallFilter', + params: [filterIdentifier], + }); +} + +export async function getFilterChanges(requestManager: Web3RequestManager, filterIdentifier: Uint) { + validator.validate(['hex'], [filterIdentifier]); + + return requestManager.send({ + method: 'eth_getFilterChanges', + params: [filterIdentifier], + }); +} + +export async function getFilterLogs(requestManager: Web3RequestManager, filterIdentifier: Uint) { + validator.validate(['hex'], [filterIdentifier]); + + return requestManager.send({ + method: 'eth_getFilterLogs', + params: [filterIdentifier], + }); +} + +export async function getLogs(requestManager: Web3RequestManager, filter: Filter) { + validator.validate(['filter'], [filter]); + + return requestManager.send({ + method: 'eth_getLogs', + params: [filter], + }); +} + +export async function getWork(requestManager: Web3RequestManager) { + return requestManager.send({ + method: 'eth_getWork', + params: [], + }); +} + +export async function submitWork( + requestManager: Web3RequestManager, + nonce: HexString8Bytes, + hash: HexString32Bytes, + digest: HexString32Bytes, +) { + validator.validate(['bytes8', 'bytes32', 'bytes32'], [nonce, hash, digest]); + + return requestManager.send({ + method: 'eth_submitWork', + params: [nonce, hash, digest], + }); +} + +export async function submitHashrate( + requestManager: Web3RequestManager, + hashRate: HexString32Bytes, + id: HexString32Bytes, +) { + validator.validate(['bytes32', 'bytes32'], [hashRate, id]); + + return requestManager.send({ + method: 'eth_submitHashrate', + params: [hashRate, id], + }); +} + +export async function getFeeHistory( + requestManager: Web3RequestManager, + blockCount: Uint, + newestBlock: BlockNumberOrTag, + rewardPercentiles: number[], +) { + validator.validate(['hex', 'blockNumberOrTag'], [blockCount, newestBlock]); + + for (const rewardPercentile of rewardPercentiles) { + validator.validate(['number'], [rewardPercentile]); + } + + return requestManager.send({ + method: 'eth_feeHistory', + params: [blockCount, newestBlock, rewardPercentiles], + }); +} + +export async function getPendingTransactions( + requestManager: Web3RequestManager, +) { + return requestManager.send({ + method: 'eth_pendingTransactions', + params: [], + }); +} + +export async function requestAccounts(requestManager: Web3RequestManager) { + return requestManager.send({ + method: 'eth_requestAccounts', + params: [], + }); +} + +export async function getChainId(requestManager: Web3RequestManager) { + return requestManager.send({ + method: 'eth_chainId', + params: [], + }); +} + +export async function getProof( + requestManager: Web3RequestManager, + address: Address, + storageKeys: HexString32Bytes[], + blockNumber: BlockNumberOrTag, +) { + validator.validate( + ['address', 'bytes32[]', 'blockNumberOrTag'], + [address, storageKeys, blockNumber], + ); + + return requestManager.send({ + method: 'eth_getProof', + params: [address, storageKeys, blockNumber], + }); +} + +export async function getNodeInfo(requestManager: Web3RequestManager) { + return requestManager.send({ + method: 'web3_clientVersion', + params: [], + }); +} diff --git a/packages/web3-rpc-methods/src/index.ts b/packages/web3-rpc-methods/src/index.ts new file mode 100644 index 00000000000..89338247240 --- /dev/null +++ b/packages/web3-rpc-methods/src/index.ts @@ -0,0 +1,21 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import * as ethRpcMethods from './eth_rpc_methods'; +import * as netRpcMethods from './net_rpc_methods'; +import * as personalRpcMethods from './personal_rpc_methods'; + +export { ethRpcMethods, netRpcMethods, personalRpcMethods }; diff --git a/packages/web3-rpc-methods/src/net_rpc_methods.ts b/packages/web3-rpc-methods/src/net_rpc_methods.ts new file mode 100644 index 00000000000..7b638cf59a9 --- /dev/null +++ b/packages/web3-rpc-methods/src/net_rpc_methods.ts @@ -0,0 +1,39 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Web3RequestManager } from 'web3-core'; +import { Web3NetAPI } from 'web3-types'; + +export async function getId(requestManager: Web3RequestManager) { + return requestManager.send({ + method: 'net_version', + params: [], + }); +} + +export async function getPeerCount(requestManager: Web3RequestManager) { + return requestManager.send({ + method: 'net_peerCount', + params: [], + }); +} + +export async function isListening(requestManager: Web3RequestManager) { + return requestManager.send({ + method: 'net_listening', + params: [], + }); +} diff --git a/packages/web3-rpc-methods/src/personal_rpc_methods.ts b/packages/web3-rpc-methods/src/personal_rpc_methods.ts new file mode 100644 index 00000000000..c73e1c534ab --- /dev/null +++ b/packages/web3-rpc-methods/src/personal_rpc_methods.ts @@ -0,0 +1,104 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { Web3RequestManager } from 'web3-core'; +import { Address, EthPersonalAPI, HexString, Transaction } from 'web3-types'; + +export const getAccounts = async (requestManager: Web3RequestManager) => + requestManager.send({ + method: 'personal_listAccounts', + params: [], + }); + +export const newAccount = async ( + requestManager: Web3RequestManager, + password: string, +) => + requestManager.send({ + method: 'personal_newAccount', + params: [password], + }); + +export const unlockAccount = async ( + requestManager: Web3RequestManager, + address: Address, + password: string, + unlockDuration: number, +) => + requestManager.send({ + method: 'personal_unlockAccount', + params: [address, password, unlockDuration], + }); + +export const lockAccount = async ( + requestManager: Web3RequestManager, + address: Address, +) => + requestManager.send({ + method: 'personal_lockAccount', + params: [address], + }); + +export const importRawKey = async ( + requestManager: Web3RequestManager, + keyData: HexString, + passphrase: string, +) => + requestManager.send({ + method: 'personal_importRawKey', + params: [keyData, passphrase], + }); + +export const sendTransaction = async ( + requestManager: Web3RequestManager, + tx: Transaction, + passphrase: string, +) => + requestManager.send({ + method: 'personal_sendTransaction', + params: [tx, passphrase], + }); + +export const signTransaction = async ( + requestManager: Web3RequestManager, + tx: Transaction, + passphrase: string, +) => + requestManager.send({ + method: 'personal_signTransaction', + params: [tx, passphrase], + }); + +export const sign = async ( + requestManager: Web3RequestManager, + data: HexString, + address: Address, + passphrase: string, +) => + requestManager.send({ + method: 'personal_sign', + params: [data, address, passphrase], + }); + +export const ecRecover = async ( + requestManager: Web3RequestManager, + signedData: HexString, + signature: string, +) => + requestManager.send({ + method: 'personal_ecRecover', + params: [signedData, signature], + }); diff --git a/packages/web3-rpc-methods/src/types.ts b/packages/web3-rpc-methods/src/types.ts new file mode 100644 index 00000000000..303b68944fe --- /dev/null +++ b/packages/web3-rpc-methods/src/types.ts @@ -0,0 +1,16 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ diff --git a/packages/web3-rpc-methods/test/.eslintrc.js b/packages/web3-rpc-methods/test/.eslintrc.js new file mode 100644 index 00000000000..a98dfb6d823 --- /dev/null +++ b/packages/web3-rpc-methods/test/.eslintrc.js @@ -0,0 +1,7 @@ +module.exports = { + extends: '../../../.eslintrc.test.js', + parserOptions: { + project: './tsconfig.json', + tsconfigRootDir: __dirname, + }, +}; diff --git a/packages/web3-rpc-methods/test/config/jest.config.js b/packages/web3-rpc-methods/test/config/jest.config.js new file mode 120000 index 00000000000..b875b48129d --- /dev/null +++ b/packages/web3-rpc-methods/test/config/jest.config.js @@ -0,0 +1 @@ +../../../../templates/jest.config.js.tmpl \ No newline at end of file diff --git a/packages/web3-rpc-methods/test/config/setup.js b/packages/web3-rpc-methods/test/config/setup.js new file mode 100644 index 00000000000..0b6b9109ce0 --- /dev/null +++ b/packages/web3-rpc-methods/test/config/setup.js @@ -0,0 +1,24 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// Have to use `require` because of Jest issue https://jestjs.io/docs/ecmascript-modules +// eslint-disable-next-line @typescript-eslint/no-require-imports +require('jest-extended'); + +// @todo extend jest to have "toHaveBeenCalledOnceWith" matcher. + +process.env.NODE_ENV = 'test'; diff --git a/packages/web3-rpc-methods/test/integration/jest.config.js b/packages/web3-rpc-methods/test/integration/jest.config.js new file mode 100644 index 00000000000..1d95890206a --- /dev/null +++ b/packages/web3-rpc-methods/test/integration/jest.config.js @@ -0,0 +1,33 @@ +'use strict'; + +const base = require('../config/jest.config'); + +module.exports = { + ...base, + setupFilesAfterEnv: ['/test/integration/setup.js'], + testMatch: ['/test/integration/**/*.(spec|test).(js|ts)'], + /** + * restoreMocks [boolean] + * + * Default: false + * + * Automatically restore mock state between every test. + * Equivalent to calling jest.restoreAllMocks() between each test. + * This will lead to any mocks having their fake implementations removed + * and restores their initial implementation. + */ + restoreMocks: true, + + /** + * resetModules [boolean] + * + * Default: false + * + * By default, each test file gets its own independent module registry. + * Enabling resetModules goes a step further and resets the module registry before running each individual test. + * This is useful to isolate modules for every test so that local module state doesn't conflict between tests. + * This can be done programmatically using jest.resetModules(). + */ + resetModules: true, + coverageDirectory: '.coverage/integration', +}; diff --git a/packages/web3-rpc-methods/test/integration/setup.js b/packages/web3-rpc-methods/test/integration/setup.js new file mode 100644 index 00000000000..5be1bccf7cc --- /dev/null +++ b/packages/web3-rpc-methods/test/integration/setup.js @@ -0,0 +1,24 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// Have to use `require` because of Jest issue https://jestjs.io/docs/ecmascript-modules +// eslint-disable-next-line @typescript-eslint/no-require-imports +require('../config/setup'); + +const jestTimeout = 15000; + +jest.setTimeout(jestTimeout); diff --git a/packages/web3-rpc-methods/test/tsconfig.json b/packages/web3-rpc-methods/test/tsconfig.json new file mode 120000 index 00000000000..c73c54e77b4 --- /dev/null +++ b/packages/web3-rpc-methods/test/tsconfig.json @@ -0,0 +1 @@ +../../../templates/test/tsconfig.json.tmpl \ No newline at end of file diff --git a/packages/web3-rpc-methods/test/unit/constructor.test.ts b/packages/web3-rpc-methods/test/unit/constructor.test.ts new file mode 100644 index 00000000000..5d08d50bebc --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/constructor.test.ts @@ -0,0 +1,37 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ + +// import Web3ProviderBase from '../../src/index' +// import {ProviderOptions} from '../../types' + +describe('constructs a PLACEHOLDER instance with expected properties', () => { + // let providerOptions: ProviderOptions + + beforeEach(() => { + // providerOptions = { + // providerUrl: 'http://127.0.0.1:8545' + // } + }); + + it('should construct with expected properties', () => { + // const web3ProviderBase = new Web3ProviderBase(providerOptions) + // expect(web3ProviderBase).toMatchObject({ + // _providerUrl: providerOptions.providerUrl + // }) + expect(true).toBeTruthy(); + }); +}); diff --git a/packages/web3-rpc-methods/test/unit/jest.config.js b/packages/web3-rpc-methods/test/unit/jest.config.js new file mode 100644 index 00000000000..ceac341e332 --- /dev/null +++ b/packages/web3-rpc-methods/test/unit/jest.config.js @@ -0,0 +1,9 @@ +const base = require('../config/jest.config'); + +module.exports = { + ...base, + testMatch: ['/test/unit/**/*.(spec|test).(js|ts)'], + + coverageDirectory: '.coverage/unit', + collectCoverageFrom: ['src/**'], +}; diff --git a/packages/web3-rpc-methods/tsconfig.json b/packages/web3-rpc-methods/tsconfig.json new file mode 120000 index 00000000000..900bb05c680 --- /dev/null +++ b/packages/web3-rpc-methods/tsconfig.json @@ -0,0 +1 @@ +../../templates/tsconfig.json.tmpl \ No newline at end of file diff --git a/packages/web3-rpc-methods/tsdoc.json b/packages/web3-rpc-methods/tsdoc.json new file mode 100644 index 00000000000..776fc76a3d3 --- /dev/null +++ b/packages/web3-rpc-methods/tsdoc.json @@ -0,0 +1,4 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/tsdoc/v0/tsdoc.schema.json", + "extends": ["../../tsdoc.json"] +} From f1b0da9f64f3aa4f7f97fe31fa61020bcc82f34f Mon Sep 17 00:00:00 2001 From: Wyatt Barnes Date: Wed, 14 Sep 2022 14:01:02 -1000 Subject: [PATCH 02/16] Add web3-rpc-methods dependency to web3-eth --- packages/web3-eth/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/web3-eth/package.json b/packages/web3-eth/package.json index 307cad93b79..50335da2ce0 100644 --- a/packages/web3-eth/package.json +++ b/packages/web3-eth/package.json @@ -52,6 +52,7 @@ "web3-eth-accounts": "^4.0.1-alpha.0", "web3-net": "^4.0.1-alpha.0", "web3-providers-ws": "^4.0.1-alpha.0", + "web3-rpc-methods": "0.1.0-alpha.0", "web3-types": "^0.1.1-alpha.0", "web3-utils": "^4.0.1-alpha.0", "web3-validator": "^0.1.1-alpha.0" From 9f342b2e7e02ba2fee323019fc4361c7205cd9fc Mon Sep 17 00:00:00 2001 From: Wyatt Barnes Date: Wed, 14 Sep 2022 14:01:20 -1000 Subject: [PATCH 03/16] Add web3-rpc-methods dependency to web3-eth-personal --- packages/web3-eth-personal/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/web3-eth-personal/package.json b/packages/web3-eth-personal/package.json index 5e38e5bccf9..51a05740b8a 100644 --- a/packages/web3-eth-personal/package.json +++ b/packages/web3-eth-personal/package.json @@ -27,6 +27,7 @@ "dependencies": { "web3-core": "^4.0.1-alpha.0", "web3-eth": "^4.0.1-alpha.0", + "web3-rpc-methods": "0.1.0-alpha.0", "web3-types": "^0.1.1-alpha.0", "web3-utils": "^4.0.1-alpha.0", "web3-validator": "^0.1.1-alpha.0" From 25fbcd349a4fe85c6345632a99514b7a91eaff2c Mon Sep 17 00:00:00 2001 From: Wyatt Barnes Date: Wed, 14 Sep 2022 14:01:32 -1000 Subject: [PATCH 04/16] Add web3-rpc-methods to web3-net --- packages/web3-net/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/web3-net/package.json b/packages/web3-net/package.json index ca2b7e681fb..3397207e0d7 100644 --- a/packages/web3-net/package.json +++ b/packages/web3-net/package.json @@ -40,6 +40,7 @@ }, "dependencies": { "web3-core": "^4.0.1-alpha.0", + "web3-rpc-methods": "0.1.0-alpha.0", "web3-types": "^0.1.1-alpha.0", "web3-utils": "^4.0.1-alpha.0" } From fb1770402092957dcaa328c7ee97d71a52394199 Mon Sep 17 00:00:00 2001 From: Wyatt Barnes Date: Wed, 14 Sep 2022 15:20:00 -1000 Subject: [PATCH 05/16] Move eth_execution_api to web3-types --- .../web3-eth/src/web3_eth_execution_api.ts | 59 ---- .../web3-types/src/apis/eth_execution_api.ts | 322 ++++++++++++++++++ packages/web3-types/src/web3_base_provider.ts | 4 +- 3 files changed, 324 insertions(+), 61 deletions(-) delete mode 100644 packages/web3-eth/src/web3_eth_execution_api.ts create mode 100644 packages/web3-types/src/apis/eth_execution_api.ts diff --git a/packages/web3-eth/src/web3_eth_execution_api.ts b/packages/web3-eth/src/web3_eth_execution_api.ts deleted file mode 100644 index a8e1161a90b..00000000000 --- a/packages/web3-eth/src/web3_eth_execution_api.ts +++ /dev/null @@ -1,59 +0,0 @@ -/* -This file is part of web3.js. - -web3.js is free software: you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -web3.js is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with web3.js. If not, see . -*/ - -import { - Address, - BlockNumberOrTag, - HexString32Bytes, - Uint, - EthExecutionAPI, - TransactionInfo, -} from 'web3-types'; - -export interface StorageProof { - readonly key: HexString32Bytes; - readonly value: Uint; - readonly proof: HexString32Bytes[]; -} - -export interface AccountObject { - readonly balance: Uint; - readonly codeHash: HexString32Bytes; - readonly nonce: Uint; - readonly storageHash: HexString32Bytes; - readonly accountProof: HexString32Bytes[]; - readonly storageProof: StorageProof[]; -} - -export type Web3EthExecutionAPI = EthExecutionAPI & { - eth_pendingTransactions: () => TransactionInfo[]; - - // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1102.md - eth_requestAccounts: () => Address[]; - - // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-695.md - eth_chainId: () => Uint; - - web3_clientVersion: () => string; - - // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1186.md - eth_getProof: ( - address: Address, - storageKeys: HexString32Bytes[], - blockNumber: BlockNumberOrTag, - ) => AccountObject; -}; diff --git a/packages/web3-types/src/apis/eth_execution_api.ts b/packages/web3-types/src/apis/eth_execution_api.ts new file mode 100644 index 00000000000..9cbe97b83e8 --- /dev/null +++ b/packages/web3-types/src/apis/eth_execution_api.ts @@ -0,0 +1,322 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { + Address, + HexString32Bytes, + Uint, + HexStringBytes, + HexStringSingleByte, + HexString256Bytes, + Topic, + HexString8Bytes, + Uint256, + BlockNumberOrTag, + Filter, + AccessList, + TransactionHash, + Uncles, +} from '../eth_types'; +import { HexString } from '../primitives_types'; + +// The types are generated manually by referring to following doc +// https://github.com/ethereum/execution-apis +export interface TransactionCallAPI { + readonly from?: Address; + readonly to: Address; + readonly gas?: Uint; + readonly gasPrice?: Uint; + readonly value?: Uint; + readonly data?: HexStringBytes; + readonly type?: HexStringSingleByte; + readonly maxFeePerGas?: Uint; + readonly maxPriorityFeePerGas?: Uint; + readonly accessList?: AccessList; +} + +export interface BaseTransactionAPI { + // eslint-disable-next-line @typescript-eslint/ban-types + readonly to?: Address | null; + readonly type: HexStringSingleByte; + readonly nonce: Uint; + readonly gas: Uint; + readonly value: Uint; + // TODO - https://github.com/ethereum/execution-apis/pull/201 + readonly input: HexStringBytes; + readonly data?: HexStringBytes; + readonly chainId?: Uint; + readonly hash?: HexString32Bytes; +} + +export interface Transaction1559UnsignedAPI extends BaseTransactionAPI { + readonly maxFeePerGas: Uint; + readonly maxPriorityFeePerGas: Uint; + readonly accessList: AccessList; +} + +export interface Transaction1559SignedAPI extends Transaction1559UnsignedAPI { + readonly yParity: Uint; + readonly r: Uint; + readonly s: Uint; +} + +export interface Transaction2930UnsignedAPI extends BaseTransactionAPI { + readonly gasPrice: Uint; + readonly accessList: AccessList; +} + +export interface Transaction2930SignedAPI extends Transaction2930UnsignedAPI { + readonly yParity: Uint; + readonly r: Uint; + readonly s: Uint; +} + +export interface TransactionLegacyUnsignedAPI extends BaseTransactionAPI { + readonly gasPrice: Uint; +} + +export interface TransactionLegacySignedAPI extends TransactionLegacyUnsignedAPI { + readonly v: Uint; + readonly r: Uint; + readonly s: Uint; +} + +// https://github.com/ethereum/execution-apis/blob/main/src/schemas/transaction.json#L178 +export type TransactionUnsignedAPI = + | Transaction1559UnsignedAPI + | Transaction2930UnsignedAPI + | TransactionLegacyUnsignedAPI; + +// https://github.com/ethereum/execution-apis/blob/main/src/schemas/transaction.json#L262 +export type TransactionSignedAPI = + | Transaction1559SignedAPI + | Transaction2930SignedAPI + | TransactionLegacySignedAPI; + +// https://github.com/ethereum/execution-apis/blob/main/src/schemas/transaction.json#L269 +export type TransactionInfoAPI = TransactionSignedAPI & { + readonly blockHash?: HexString32Bytes; + readonly blockNumber?: Uint; + readonly from: Address; + readonly hash: HexString32Bytes; + readonly transactionIndex?: Uint; +}; + +export interface SignedTransactionInfoAPI { + raw: HexStringBytes; + tx: TransactionSignedAPI; +} + +// https://github.com/ethereum/execution-apis/blob/main/src/schemas/transaction.json#L24 +export type TransactionWithSenderAPI = TransactionUnsignedAPI & { from: Address }; + +// https://github.com/ethereum/execution-apis/blob/main/src/schemas/block.json#L2 +export interface BlockAPI { + readonly parentHash: HexString32Bytes; + readonly sha3Uncles: HexString32Bytes; + readonly miner: HexString; + readonly stateRoot: HexString32Bytes; + readonly transactionsRoot: HexString32Bytes; + readonly receiptsRoot: HexString32Bytes; + readonly logsBloom?: HexString256Bytes; + readonly difficulty?: Uint; + readonly number?: Uint; + readonly gasLimit: Uint; + readonly gasUsed: Uint; + readonly timestamp: Uint; + readonly extraData: HexStringBytes; + readonly mixHash: HexString32Bytes; + readonly nonce?: Uint; + readonly totalDifficulty: Uint; + readonly baseFeePerGas?: Uint; + readonly size: Uint; + readonly transactions: TransactionHash[] | TransactionInfoAPI[]; + readonly uncles: Uncles; + readonly hash?: HexString32Bytes; +} + +// https://github.com/ethereum/execution-apis/blob/main/src/schemas/receipt.json#L2 +export interface LogAPI { + readonly removed?: boolean; + readonly logIndex?: Uint; + readonly transactionIndex?: Uint; + readonly transactionHash?: HexString32Bytes; + readonly blockHash?: HexString32Bytes; + readonly blockNumber?: Uint; + readonly address?: Address; + readonly data?: HexStringBytes; + readonly topics?: Topic | Topic[]; +} + +// https://github.com/ethereum/execution-apis/blob/main/src/schemas/receipt.json#L44 +export interface TransactionReceiptAPI { + readonly transactionHash: HexString32Bytes; + readonly transactionIndex: Uint; + readonly blockHash: HexString32Bytes; + readonly blockNumber: Uint; + readonly from: Address; + readonly to: Address; + readonly cumulativeGasUsed: Uint; + readonly gasUsed: Uint; + readonly contractAddress?: Address; + readonly logs: LogAPI[]; + readonly logsBloom: HexString256Bytes; + readonly root: HexString32Bytes; + readonly status: '0x1' | '0x0'; + readonly effectiveGasPrice: Uint; +} + +// https://github.com/ethereum/execution-apis/blob/main/src/schemas/client.json#L2 +export type SyncingStatusAPI = + | { startingBlock: Uint; currentBlock: Uint; highestBlock: Uint } + | boolean; + +// https://github.com/ethereum/execution-apis/blob/main/src/eth/fee_market.json#L53 +export interface FeeHistoryResultAPI { + readonly oldestBlock: Uint; + readonly baseFeePerGas: Uint; + readonly reward: number[][]; +} + +// https://github.com/ethereum/execution-apis/blob/main/src/schemas/filter.json#L2 +export type FilterResultsAPI = HexString32Bytes[] | LogAPI[]; + +export interface CompileResultAPI { + readonly code: HexStringBytes; + readonly info: { + readonly source: string; + readonly language: string; + readonly languageVersion: string; + readonly compilerVersion: string; + readonly abiDefinition: Record[]; + readonly userDoc: { + readonly methods: Record; + }; + readonly developerDoc: { + readonly methods: Record; + }; + }; +} + +/* eslint-disable camelcase */ +export type EthExecutionAPI = { + // https://github.com/ethereum/execution-apis/blob/main/src/eth/block.json + eth_getBlockByHash: (blockHash: HexString32Bytes, hydrated: boolean) => BlockAPI; + eth_getBlockByNumber: (blockNumber: BlockNumberOrTag, hydrated: boolean) => BlockAPI; + eth_getBlockTransactionCountByHash: (blockHash: HexString32Bytes) => Uint; + eth_getBlockTransactionCountByNumber: (blockNumber: BlockNumberOrTag) => Uint; + eth_getUncleCountByBlockHash: (blockHash: HexString32Bytes) => Uint; + eth_getUncleCountByBlockNumber: (blockNumber: BlockNumberOrTag) => Uint; + eth_getUncleByBlockHashAndIndex: (blockHash: HexString32Bytes, uncleIndex: Uint) => BlockAPI; + eth_getUncleByBlockNumberAndIndex: ( + blockNumber: BlockNumberOrTag, + uncleIndex: Uint, + ) => BlockAPI; + + // https://github.com/ethereum/execution-apis/blob/main/src/eth/transaction.json + eth_getTransactionByHash: (transactionHash: HexString32Bytes) => TransactionInfoAPI | undefined; + eth_getTransactionByBlockHashAndIndex: ( + blockHash: HexString32Bytes, + transactionIndex: Uint, + ) => TransactionInfoAPI | undefined; + eth_getTransactionByBlockNumberAndIndex: ( + blockNumber: BlockNumberOrTag, + transactionIndex: Uint, + ) => TransactionInfoAPI | undefined; + eth_getTransactionReceipt: ( + transactionHash: HexString32Bytes, + ) => TransactionReceiptAPI | undefined; + + // https://github.com/ethereum/execution-apis/blob/main/src/eth/client.json + eth_protocolVersion: () => string; + eth_syncing: () => SyncingStatusAPI; + eth_coinbase: () => Address; + eth_accounts: () => Address[]; + eth_blockNumber: () => Uint; + + // https://github.com/ethereum/execution-apis/blob/main/src/eth/execute.json + eth_call: (transaction: TransactionCallAPI, blockNumber: BlockNumberOrTag) => HexStringBytes; + eth_estimateGas: ( + transaction: Partial, + blockNumber: BlockNumberOrTag, + ) => Uint; + + // https://github.com/ethereum/execution-apis/blob/main/src/eth/fee_market.json + eth_gasPrice: () => Uint; + eth_feeHistory: ( + blockCount: Uint, + newestBlock: BlockNumberOrTag, + rewardPercentiles: number[], + ) => FeeHistoryResultAPI; + + // https://github.com/ethereum/execution-apis/blob/main/src/eth/filter.json + eth_newFilter: (filter: Filter) => Uint; + eth_newBlockFilter: () => Uint; + eth_newPendingTransactionFilter: () => Uint; + eth_uninstallFilter: (filterIdentifier: Uint) => boolean; + eth_getFilterChanges: (filterIdentifier: Uint) => FilterResultsAPI; + eth_getFilterLogs: (filterIdentifier: Uint) => FilterResultsAPI; + eth_getLogs: (filter: Filter) => FilterResultsAPI; + + // https://github.com/ethereum/execution-apis/blob/main/src/eth/mining.json + eth_mining: () => boolean; + eth_hashrate: () => Uint; + eth_getWork: () => [HexString32Bytes, HexString32Bytes, HexString32Bytes]; + eth_submitWork: ( + nonce: HexString8Bytes, + hash: HexString32Bytes, + digest: HexString32Bytes, + ) => boolean; + eth_submitHashrate: (hashRate: HexString32Bytes, id: HexString32Bytes) => boolean; + + // https://github.com/ethereum/execution-apis/blob/main/src/eth/sign.json + eth_sign: (address: Address, message: HexStringBytes) => HexString256Bytes; + eth_signTransaction: ( + transaction: TransactionWithSenderAPI | Partial, + ) => HexStringBytes | SignedTransactionInfoAPI; + + // https://github.com/ethereum/execution-apis/blob/main/src/eth/state.json + eth_getBalance: (address: Address, blockNumber: BlockNumberOrTag) => Uint; + eth_getStorageAt: ( + address: Address, + storageSlot: Uint256, + blockNumber: BlockNumberOrTag, + ) => HexStringBytes; + eth_getTransactionCount: (address: Address, blockNumber: BlockNumberOrTag) => Uint; + eth_getCode: (address: Address, blockNumber: BlockNumberOrTag) => HexStringBytes; + + // https://github.com/ethereum/execution-apis/blob/main/src/eth/submit.json + eth_sendTransaction: ( + transaction: TransactionWithSenderAPI | Partial, + ) => HexString32Bytes; + eth_sendRawTransaction: (transaction: HexStringBytes) => HexString32Bytes; + + // https://geth.ethereum.org/docs/rpc/pubsub + eth_subscribe: ( + ...params: + | ['newHeads'] + | ['newPendingTransactions'] + | ['syncing'] + | ['logs', { address?: HexString; topics?: HexString[] }] + ) => HexString; + eth_unsubscribe: (subscriptionId: HexString) => HexString; + eth_clearSubscriptions: (keepSyncing?: boolean) => void; + // Non-supported by execution-apis specs + eth_getCompilers: () => string[]; + eth_compileSolidity: (code: string) => CompileResultAPI; + eth_compileLLL: (code: string) => HexStringBytes; + eth_compileSerpent: (code: string) => HexStringBytes; +}; diff --git a/packages/web3-types/src/web3_base_provider.ts b/packages/web3-types/src/web3_base_provider.ts index dd099afef22..00c2c782094 100644 --- a/packages/web3-types/src/web3_base_provider.ts +++ b/packages/web3-types/src/web3_base_provider.ts @@ -14,10 +14,10 @@ GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with web3.js. If not, see . */ - import { Socket } from 'net'; + import { Web3Error } from './error_types'; -import { EthExecutionAPI } from './eth_execution_api'; +import { EthExecutionAPI } from './apis/eth_execution_api'; import { JsonRpcNotification, JsonRpcPayload, From e200f0871faed7bd9df02fe99542005398b25643 Mon Sep 17 00:00:00 2001 From: Wyatt Barnes Date: Wed, 14 Sep 2022 15:20:23 -1000 Subject: [PATCH 06/16] Move eth_personal_api to web3-types --- .../src => web3-types/src/apis}/eth_personal_api.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) rename packages/{web3-eth-personal/src => web3-types/src/apis}/eth_personal_api.ts (92%) diff --git a/packages/web3-eth-personal/src/eth_personal_api.ts b/packages/web3-types/src/apis/eth_personal_api.ts similarity index 92% rename from packages/web3-eth-personal/src/eth_personal_api.ts rename to packages/web3-types/src/apis/eth_personal_api.ts index f89f821eff2..02122367561 100644 --- a/packages/web3-eth-personal/src/eth_personal_api.ts +++ b/packages/web3-types/src/apis/eth_personal_api.ts @@ -1,4 +1,4 @@ -/* +/* This file is part of web3.js. web3.js is free software: you can redistribute it and/or modify @@ -14,8 +14,8 @@ GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with web3.js. If not, see . */ - -import { Address, HexString, Transaction } from 'web3-types'; +import { Address, Transaction } from '../eth_types'; +import { HexString } from '../primitives_types'; export type EthPersonalAPI = { personal_listAccounts: () => Address[]; From ce0c683c9641c2887173b8ffacf2617940e14b90 Mon Sep 17 00:00:00 2001 From: Wyatt Barnes Date: Wed, 14 Sep 2022 15:21:28 -1000 Subject: [PATCH 07/16] Update imports and code for web3-types and web3-rpc-methods refactors --- packages/web3-eth-ens/src/ens.ts | 11 +- packages/web3-eth-personal/src/index.ts | 1 - packages/web3-eth-personal/src/personal.ts | 4 +- packages/web3-eth-personal/src/rcp_methods.ts | 99 --- .../src/rpc_method_wrappers.ts | 61 +- packages/web3-eth-personal/src/types.ts | 21 - packages/web3-eth/src/rpc_method_wrappers.ts | 75 +-- packages/web3-eth/src/rpc_methods.ts | 565 ------------------ .../web3-eth/src/utils/transaction_builder.ts | 3 +- .../watch_transaction_for_confirmations.ts | 4 +- packages/web3-eth/src/web3_eth.ts | 23 +- packages/web3-net/src/index.ts | 2 - packages/web3-net/src/net.ts | 4 +- packages/web3-net/src/rpc_method_wrappers.ts | 10 +- packages/web3-net/src/rpc_methods.ts | 40 -- .../src/apis/web3_eth_execution_api.ts | 44 ++ .../src/apis}/web3_net_api.ts | 5 +- packages/web3-types/src/eth_execution_api.ts | 323 ---------- packages/web3-types/src/index.ts | 5 +- 19 files changed, 150 insertions(+), 1150 deletions(-) delete mode 100644 packages/web3-eth-personal/src/rcp_methods.ts delete mode 100644 packages/web3-eth-personal/src/types.ts delete mode 100644 packages/web3-eth/src/rpc_methods.ts delete mode 100644 packages/web3-net/src/rpc_methods.ts create mode 100644 packages/web3-types/src/apis/web3_eth_execution_api.ts rename packages/{web3-net/src => web3-types/src/apis}/web3_net_api.ts (94%) delete mode 100644 packages/web3-types/src/eth_execution_api.ts diff --git a/packages/web3-eth-ens/src/ens.ts b/packages/web3-eth-ens/src/ens.ts index 31afb71feef..9bf5c003aff 100644 --- a/packages/web3-eth-ens/src/ens.ts +++ b/packages/web3-eth-ens/src/ens.ts @@ -22,10 +22,17 @@ import { ENSUnsupportedNetworkError, } from 'web3-errors'; import { Web3Context, Web3ContextObject } from 'web3-core'; -import { getId, Web3NetAPI } from 'web3-net'; -import { Address, SupportedProviders, EthExecutionAPI, TransactionReceipt } from 'web3-types'; +import { getId } from 'web3-net'; +import { + Address, + SupportedProviders, + EthExecutionAPI, + TransactionReceipt, + Web3NetAPI, +} from 'web3-types'; import { DEFAULT_RETURN_FORMAT, FormatType, FMT_NUMBER, DataFormat } from 'web3-utils'; import { NonPayableCallOptions, Contract } from 'web3-eth-contract'; + import { PublicResolverAbi } from './abi/ens/PublicResolver'; import { Registry } from './registry'; import { registryAddresses } from './config'; diff --git a/packages/web3-eth-personal/src/index.ts b/packages/web3-eth-personal/src/index.ts index d963091825b..03a7ffd2fcd 100644 --- a/packages/web3-eth-personal/src/index.ts +++ b/packages/web3-eth-personal/src/index.ts @@ -17,7 +17,6 @@ along with web3.js. If not, see . import { Personal } from './personal'; -export * from './types'; export * from './personal'; export default Personal; diff --git a/packages/web3-eth-personal/src/personal.ts b/packages/web3-eth-personal/src/personal.ts index 11b8c9623f4..3cf7e004c5e 100644 --- a/packages/web3-eth-personal/src/personal.ts +++ b/packages/web3-eth-personal/src/personal.ts @@ -16,8 +16,8 @@ along with web3.js. If not, see . */ import { Web3Context } from 'web3-core'; -import { Address, HexString, Transaction } from 'web3-types'; -import { EthPersonalAPI } from './eth_personal_api'; +import { Address, EthPersonalAPI, HexString, Transaction } from 'web3-types'; + import * as rpcWrappers from './rpc_method_wrappers'; export class Personal extends Web3Context { diff --git a/packages/web3-eth-personal/src/rcp_methods.ts b/packages/web3-eth-personal/src/rcp_methods.ts deleted file mode 100644 index ba2a5b14965..00000000000 --- a/packages/web3-eth-personal/src/rcp_methods.ts +++ /dev/null @@ -1,99 +0,0 @@ -/* -This file is part of web3.js. - -web3.js is free software: you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -web3.js is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with web3.js. If not, see . -*/ - -import { Address, HexString, Transaction } from 'web3-types'; -import { EthPersonalAPIManager } from './types'; - -export const getAccounts = async (requestManager: EthPersonalAPIManager) => - requestManager.send({ - method: 'personal_listAccounts', - params: [], - }); - -export const newAccount = async (requestManager: EthPersonalAPIManager, password: string) => - requestManager.send({ - method: 'personal_newAccount', - params: [password], - }); - -export const unlockAccount = async ( - requestManager: EthPersonalAPIManager, - address: Address, - password: string, - unlockDuration: number, -) => - requestManager.send({ - method: 'personal_unlockAccount', - params: [address, password, unlockDuration], - }); - -export const lockAccount = async (requestManager: EthPersonalAPIManager, address: Address) => - requestManager.send({ - method: 'personal_lockAccount', - params: [address], - }); - -export const importRawKey = async ( - requestManager: EthPersonalAPIManager, - keyData: HexString, - passphrase: string, -) => - requestManager.send({ - method: 'personal_importRawKey', - params: [keyData, passphrase], - }); - -export const sendTransaction = async ( - requestManager: EthPersonalAPIManager, - tx: Transaction, - passphrase: string, -) => - requestManager.send({ - method: 'personal_sendTransaction', - params: [tx, passphrase], - }); - -export const signTransaction = async ( - requestManager: EthPersonalAPIManager, - tx: Transaction, - passphrase: string, -) => - requestManager.send({ - method: 'personal_signTransaction', - params: [tx, passphrase], - }); - -export const sign = async ( - requestManager: EthPersonalAPIManager, - data: HexString, - address: Address, - passphrase: string, -) => - requestManager.send({ - method: 'personal_sign', - params: [data, address, passphrase], - }); - -export const ecRecover = async ( - requestManager: EthPersonalAPIManager, - signedData: HexString, - signature: string, -) => - requestManager.send({ - method: 'personal_ecRecover', - params: [signedData, signature], - }); diff --git a/packages/web3-eth-personal/src/rpc_method_wrappers.ts b/packages/web3-eth-personal/src/rpc_method_wrappers.ts index 9102af06350..7545214fcce 100644 --- a/packages/web3-eth-personal/src/rpc_method_wrappers.ts +++ b/packages/web3-eth-personal/src/rpc_method_wrappers.ts @@ -14,87 +14,82 @@ GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with web3.js. If not, see . */ - +import { Web3RequestManager } from 'web3-core'; import { ETH_DATA_FORMAT, isHexStrict, toChecksumAddress, utf8ToHex } from 'web3-utils'; import { formatTransaction } from 'web3-eth'; -import { Address, HexString, Transaction } from 'web3-types'; +import { Address, EthPersonalAPI, HexString, Transaction } from 'web3-types'; import { validator } from 'web3-validator'; -import { - getAccounts as rpcGetAccounts, - lockAccount as rpcLockAccount, - newAccount as rpcNewAccount, - unlockAccount as rpcUnlockAccount, - importRawKey as rpcImportRawKey, - sendTransaction as rpcSendTransaction, - signTransaction as rpcSignTransaction, - sign as rpcSign, - ecRecover as rpcEcRecover, -} from './rcp_methods'; -import { EthPersonalAPIManager } from './types'; - -export const getAccounts = async (requestManager: EthPersonalAPIManager) => { - const result = await rpcGetAccounts(requestManager); +import { personalRpcMethods } from 'web3-rpc-methods'; + +export const getAccounts = async (requestManager: Web3RequestManager) => { + const result = await personalRpcMethods.getAccounts(requestManager); return result.map(toChecksumAddress); }; -export const newAccount = async (requestManager: EthPersonalAPIManager, password: string) => { +export const newAccount = async ( + requestManager: Web3RequestManager, + password: string, +) => { validator.validate(['string'], [password]); - const result = await rpcNewAccount(requestManager, password); + const result = await personalRpcMethods.newAccount(requestManager, password); return toChecksumAddress(result); }; export const unlockAccount = async ( - requestManager: EthPersonalAPIManager, + requestManager: Web3RequestManager, address: Address, password: string, unlockDuration: number, ) => { validator.validate(['address', 'string', 'uint'], [address, password, unlockDuration]); - return rpcUnlockAccount(requestManager, address, password, unlockDuration); + return personalRpcMethods.unlockAccount(requestManager, address, password, unlockDuration); }; -export const lockAccount = async (requestManager: EthPersonalAPIManager, address: Address) => { +export const lockAccount = async ( + requestManager: Web3RequestManager, + address: Address, +) => { validator.validate(['address'], [address]); - return rpcLockAccount(requestManager, address); + return personalRpcMethods.lockAccount(requestManager, address); }; export const importRawKey = async ( - requestManager: EthPersonalAPIManager, + requestManager: Web3RequestManager, keyData: HexString, passphrase: string, ) => { validator.validate(['string', 'string'], [keyData, passphrase]); - return rpcImportRawKey(requestManager, keyData, passphrase); + return personalRpcMethods.importRawKey(requestManager, keyData, passphrase); }; export const sendTransaction = async ( - requestManager: EthPersonalAPIManager, + requestManager: Web3RequestManager, tx: Transaction, passphrase: string, ) => { const formattedTx = formatTransaction(tx, ETH_DATA_FORMAT); - return rpcSendTransaction(requestManager, formattedTx, passphrase); + return personalRpcMethods.sendTransaction(requestManager, formattedTx, passphrase); }; export const signTransaction = async ( - requestManager: EthPersonalAPIManager, + requestManager: Web3RequestManager, tx: Transaction, passphrase: string, ) => { const formattedTx = formatTransaction(tx, ETH_DATA_FORMAT); - return rpcSignTransaction(requestManager, formattedTx, passphrase); + return personalRpcMethods.signTransaction(requestManager, formattedTx, passphrase); }; export const sign = async ( - requestManager: EthPersonalAPIManager, + requestManager: Web3RequestManager, data: HexString, address: Address, passphrase: string, @@ -103,11 +98,11 @@ export const sign = async ( const dataToSign = isHexStrict(data) ? data : utf8ToHex(data); - return rpcSign(requestManager, dataToSign, address, passphrase); + return personalRpcMethods.sign(requestManager, dataToSign, address, passphrase); }; export const ecRecover = async ( - requestManager: EthPersonalAPIManager, + requestManager: Web3RequestManager, signedData: HexString, signature: string, ) => { @@ -115,5 +110,5 @@ export const ecRecover = async ( const signedDataString = isHexStrict(signedData) ? signedData : utf8ToHex(signedData); - return rpcEcRecover(requestManager, signedDataString, signature); + return personalRpcMethods.ecRecover(requestManager, signedDataString, signature); }; diff --git a/packages/web3-eth-personal/src/types.ts b/packages/web3-eth-personal/src/types.ts deleted file mode 100644 index 0f3bdc510ec..00000000000 --- a/packages/web3-eth-personal/src/types.ts +++ /dev/null @@ -1,21 +0,0 @@ -/* -This file is part of web3.js. - -web3.js is free software: you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -web3.js is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with web3.js. If not, see . -*/ - -import { Web3RequestManager } from 'web3-core'; -import { EthPersonalAPI } from './eth_personal_api'; - -export type EthPersonalAPIManager = Web3RequestManager; diff --git a/packages/web3-eth/src/rpc_method_wrappers.ts b/packages/web3-eth/src/rpc_method_wrappers.ts index a73b0418c79..b6cebcbb407 100644 --- a/packages/web3-eth/src/rpc_method_wrappers.ts +++ b/packages/web3-eth/src/rpc_method_wrappers.ts @@ -39,6 +39,7 @@ import { Transaction, TransactionCall, TransactionWithLocalWalletIndex, + Web3EthExecutionAPI, } from 'web3-types'; import { Web3Context, Web3PromiEvent } from 'web3-core'; import { @@ -51,8 +52,9 @@ import { } from 'web3-utils'; import { isBlockTag, isBytes, isNullish, isString } from 'web3-validator'; import { TransactionError, TransactionRevertError } from 'web3-errors'; +import { ethRpcMethods } from 'web3-rpc-methods'; + import { SignatureError, TransactionSendTimeoutError } from './errors'; -import * as rpcMethods from './rpc_methods'; import { accountSchema, blockSchema, @@ -75,7 +77,6 @@ import { getTransactionGasPricing } from './utils/get_transaction_gas_pricing'; // eslint-disable-next-line import/no-cycle import { waitForTransactionReceipt } from './utils/wait_for_transaction_receipt'; import { watchTransactionForConfirmations } from './utils/watch_transaction_for_confirmations'; -import { Web3EthExecutionAPI } from './web3_eth_execution_api'; import { NUMBER_DATA_FORMAT } from './constants'; import { decodeSignedTransaction } from './utils/decode_signed_transaction'; @@ -90,7 +91,7 @@ import { decodeSignedTransaction } from './utils/decode_signed_transaction'; * ``` */ export const getProtocolVersion = async (web3Context: Web3Context) => - rpcMethods.getProtocolVersion(web3Context.requestManager); + ethRpcMethods.getProtocolVersion(web3Context.requestManager); // TODO Add returnFormat parameter /** @@ -111,7 +112,7 @@ export const getProtocolVersion = async (web3Context: Web3Context) => - rpcMethods.getSyncing(web3Context.requestManager); + ethRpcMethods.getSyncing(web3Context.requestManager); // TODO consider adding returnFormat parameter (to format address as bytes) /** @@ -124,7 +125,7 @@ export const isSyncing = async (web3Context: Web3Context) => * ``` */ export const getCoinbase = async (web3Context: Web3Context) => - rpcMethods.getCoinbase(web3Context.requestManager); + ethRpcMethods.getCoinbase(web3Context.requestManager); /** * Checks whether the node is mining or not. @@ -138,7 +139,7 @@ export const getCoinbase = async (web3Context: Web3Context) => * ``` */ export const isMining = async (web3Context: Web3Context) => - rpcMethods.getMining(web3Context.requestManager); + ethRpcMethods.getMining(web3Context.requestManager); /** * @param web3Context ({@link Web3Context}) Web3 configuration object that contains things such as the provider, request manager, wallet, etc. @@ -157,7 +158,7 @@ export async function getHashRate( web3Context: Web3Context, returnFormat: ReturnFormat, ) { - const response = await rpcMethods.getHashRate(web3Context.requestManager); + const response = await ethRpcMethods.getHashRate(web3Context.requestManager); return format({ eth: 'uint' }, response as Numbers, returnFormat); } @@ -179,7 +180,7 @@ export async function getGasPrice( web3Context: Web3Context, returnFormat: ReturnFormat, ) { - const response = await rpcMethods.getGasPrice(web3Context.requestManager); + const response = await ethRpcMethods.getGasPrice(web3Context.requestManager); return format({ eth: 'uint' }, response as Numbers, returnFormat); } @@ -201,7 +202,7 @@ export async function getBlockNumber( web3Context: Web3Context, returnFormat: ReturnFormat, ) { - const response = await rpcMethods.getBlockNumber(web3Context.requestManager); + const response = await ethRpcMethods.getBlockNumber(web3Context.requestManager); return format({ eth: 'uint' }, response as Numbers, returnFormat); } @@ -232,7 +233,7 @@ export async function getBalance( const blockNumberFormatted = isBlockTag(blockNumber as string) ? (blockNumber as BlockTag) : format({ eth: 'uint' }, blockNumber as Numbers, ETH_DATA_FORMAT); - const response = await rpcMethods.getBalance( + const response = await ethRpcMethods.getBalance( web3Context.requestManager, address, blockNumberFormatted, @@ -274,7 +275,7 @@ export async function getStorageAt( const blockNumberFormatted = isBlockTag(blockNumber as string) ? (blockNumber as BlockTag) : format({ eth: 'uint' }, blockNumber as Numbers, ETH_DATA_FORMAT); - const response = await rpcMethods.getStorageAt( + const response = await ethRpcMethods.getStorageAt( web3Context.requestManager, address, storageSlotFormatted, @@ -313,7 +314,7 @@ export async function getCode( const blockNumberFormatted = isBlockTag(blockNumber as string) ? (blockNumber as BlockTag) : format({ eth: 'uint' }, blockNumber as Numbers, ETH_DATA_FORMAT); - const response = await rpcMethods.getCode( + const response = await ethRpcMethods.getCode( web3Context.requestManager, address, blockNumberFormatted, @@ -395,7 +396,7 @@ export async function getBlock( let response; if (isBytes(block)) { const blockHashFormatted = format({ eth: 'bytes32' }, block, ETH_DATA_FORMAT); - response = await rpcMethods.getBlockByHash( + response = await ethRpcMethods.getBlockByHash( web3Context.requestManager, blockHashFormatted as HexString, hydrated, @@ -404,7 +405,7 @@ export async function getBlock( const blockNumberFormatted = isBlockTag(block as string) ? (block as BlockTag) : format({ eth: 'uint' }, block as Numbers, ETH_DATA_FORMAT); - response = await rpcMethods.getBlockByNumber( + response = await ethRpcMethods.getBlockByNumber( web3Context.requestManager, blockNumberFormatted, hydrated, @@ -439,7 +440,7 @@ export async function getBlockTransactionCount( let response; if (isBytes(block)) { const blockHashFormatted = format({ eth: 'bytes32' }, block, ETH_DATA_FORMAT); - response = await rpcMethods.getBlockTransactionCountByHash( + response = await ethRpcMethods.getBlockTransactionCountByHash( web3Context.requestManager, blockHashFormatted as HexString, ); @@ -447,7 +448,7 @@ export async function getBlockTransactionCount( const blockNumberFormatted = isBlockTag(block as string) ? (block as BlockTag) : format({ eth: 'uint' }, block as Numbers, ETH_DATA_FORMAT); - response = await rpcMethods.getBlockTransactionCountByNumber( + response = await ethRpcMethods.getBlockTransactionCountByNumber( web3Context.requestManager, blockNumberFormatted, ); @@ -481,7 +482,7 @@ export async function getBlockUncleCount( let response; if (isBytes(block)) { const blockHashFormatted = format({ eth: 'bytes32' }, block, ETH_DATA_FORMAT); - response = await rpcMethods.getUncleCountByBlockHash( + response = await ethRpcMethods.getUncleCountByBlockHash( web3Context.requestManager, blockHashFormatted as HexString, ); @@ -489,7 +490,7 @@ export async function getBlockUncleCount( const blockNumberFormatted = isBlockTag(block as string) ? (block as BlockTag) : format({ eth: 'uint' }, block as Numbers, ETH_DATA_FORMAT); - response = await rpcMethods.getUncleCountByBlockNumber( + response = await ethRpcMethods.getUncleCountByBlockNumber( web3Context.requestManager, blockNumberFormatted, ); @@ -572,7 +573,7 @@ export async function getUncle( let response; if (isBytes(block)) { const blockHashFormatted = format({ eth: 'bytes32' }, block, ETH_DATA_FORMAT); - response = await rpcMethods.getUncleByBlockHashAndIndex( + response = await ethRpcMethods.getUncleByBlockHashAndIndex( web3Context.requestManager, blockHashFormatted as HexString, uncleIndexFormatted, @@ -581,7 +582,7 @@ export async function getUncle( const blockNumberFormatted = isBlockTag(block as string) ? (block as BlockTag) : format({ eth: 'uint' }, block as Numbers, ETH_DATA_FORMAT); - response = await rpcMethods.getUncleByBlockNumberAndIndex( + response = await ethRpcMethods.getUncleByBlockNumberAndIndex( web3Context.requestManager, blockNumberFormatted, uncleIndexFormatted, @@ -650,7 +651,7 @@ export async function getTransaction( transactionHash, DEFAULT_RETURN_FORMAT, ); - const response = await rpcMethods.getTransactionByHash( + const response = await ethRpcMethods.getTransactionByHash( web3Context.requestManager, transactionHashFormatted, ); @@ -747,7 +748,7 @@ export async function getPendingTransactions( web3Context: Web3Context, returnFormat: ReturnFormat, ) { - const response = await rpcMethods.getPendingTransactions(web3Context.requestManager); + const response = await ethRpcMethods.getPendingTransactions(web3Context.requestManager); return response.map(transaction => formatTransaction(transaction as unknown as Transaction, returnFormat), @@ -816,7 +817,7 @@ export async function getTransactionFromBlock( let response; if (isBytes(block)) { const blockHashFormatted = format({ eth: 'bytes32' }, block, ETH_DATA_FORMAT); - response = await rpcMethods.getTransactionByBlockHashAndIndex( + response = await ethRpcMethods.getTransactionByBlockHashAndIndex( web3Context.requestManager, blockHashFormatted as HexString, transactionIndexFormatted, @@ -825,7 +826,7 @@ export async function getTransactionFromBlock( const blockNumberFormatted = isBlockTag(block as string) ? (block as BlockTag) : format({ eth: 'uint' }, block as Numbers, ETH_DATA_FORMAT); - response = await rpcMethods.getTransactionByBlockNumberAndIndex( + response = await ethRpcMethods.getTransactionByBlockNumberAndIndex( web3Context.requestManager, blockNumberFormatted, transactionIndexFormatted, @@ -892,7 +893,7 @@ export async function getTransactionReceipt( transactionHash, DEFAULT_RETURN_FORMAT, ); - const response = await rpcMethods.getTransactionReceipt( + const response = await ethRpcMethods.getTransactionReceipt( web3Context.requestManager, transactionHashFormatted, ); @@ -934,7 +935,7 @@ export async function getTransactionCount( const blockNumberFormatted = isBlockTag(blockNumber as string) ? (blockNumber as BlockTag) : format({ eth: 'uint' }, blockNumber as Numbers, ETH_DATA_FORMAT); - const response = await rpcMethods.getTransactionCount( + const response = await ethRpcMethods.getTransactionCount( web3Context.requestManager, address, blockNumberFormatted, @@ -1116,7 +1117,7 @@ export function sendTransaction< ); transactionHash = await waitWithTimeout( - rpcMethods.sendRawTransaction( + ethRpcMethods.sendRawTransaction( web3Context.requestManager, signedTransaction.rawTransaction, ), @@ -1128,7 +1129,7 @@ export function sendTransaction< ); } else { transactionHash = await waitWithTimeout( - rpcMethods.sendTransaction( + ethRpcMethods.sendTransaction( web3Context.requestManager, transactionFormatted as Partial, ), @@ -1336,7 +1337,7 @@ export function sendSignedTransaction< // await getRevertReason(web3Context, transaction, returnFormat); // } - const transactionHash = await rpcMethods.sendRawTransaction( + const transactionHash = await ethRpcMethods.sendRawTransaction( web3Context.requestManager, signedTransactionFormattedHex, ); @@ -1464,7 +1465,7 @@ export async function sign( ); } - const response = await rpcMethods.sign( + const response = await ethRpcMethods.sign( web3Context.requestManager, addressOrIndex, messageFormatted, @@ -1529,7 +1530,7 @@ export async function signTransaction( transaction: Transaction, returnFormat: ReturnFormat, ) { - const response = await rpcMethods.signTransaction( + const response = await ethRpcMethods.signTransaction( web3Context.requestManager, formatTransaction(transaction, ETH_DATA_FORMAT), ); @@ -1569,7 +1570,7 @@ export async function call( ? (blockNumber as BlockTag) : format({ eth: 'uint' }, blockNumber as Numbers, ETH_DATA_FORMAT); - const response = await rpcMethods.call( + const response = await ethRpcMethods.call( web3Context.requestManager, formatTransaction(transaction, ETH_DATA_FORMAT), blockNumberFormatted, @@ -1618,7 +1619,7 @@ export async function estimateGas( ? (blockNumber as BlockTag) : format({ eth: 'uint' }, blockNumber as Numbers, ETH_DATA_FORMAT); - const response = await rpcMethods.estimateGas( + const response = await ethRpcMethods.estimateGas( web3Context.requestManager, transactionFormatted, blockNumberFormatted, @@ -1678,7 +1679,7 @@ export async function getLogs( filter: Filter, returnFormat: ReturnFormat, ) { - const response = await rpcMethods.getLogs(web3Context.requestManager, filter); + const response = await ethRpcMethods.getLogs(web3Context.requestManager, filter); const result = response.map(res => { if (typeof res === 'string') { @@ -1708,7 +1709,7 @@ export async function getChainId( web3Context: Web3Context, returnFormat: ReturnFormat, ) { - const response = await rpcMethods.getChainId(web3Context.requestManager); + const response = await ethRpcMethods.getChainId(web3Context.requestManager); return format( { eth: 'uint' }, @@ -1806,7 +1807,7 @@ export async function getProof( ? (blockNumber as BlockTag) : format({ eth: 'uint' }, blockNumber as Numbers, ETH_DATA_FORMAT); - const response = await rpcMethods.getProof( + const response = await ethRpcMethods.getProof( web3Context.requestManager, address, storageKeysFormatted, @@ -1902,7 +1903,7 @@ export async function getFeeHistory( NUMBER_DATA_FORMAT, ); - const response = await rpcMethods.getFeeHistory( + const response = await ethRpcMethods.getFeeHistory( web3Context.requestManager, blockCountFormatted, newestBlockFormatted, diff --git a/packages/web3-eth/src/rpc_methods.ts b/packages/web3-eth/src/rpc_methods.ts deleted file mode 100644 index 6c19a4b0dba..00000000000 --- a/packages/web3-eth/src/rpc_methods.ts +++ /dev/null @@ -1,565 +0,0 @@ -/* -This file is part of web3.js. - -web3.js is free software: you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -web3.js is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with web3.js. If not, see . -*/ - -import { Web3RequestManager } from 'web3-core'; -import { - Address, - BlockNumberOrTag, - Filter, - HexString32Bytes, - HexString8Bytes, - HexStringBytes, - TransactionCallAPI, - TransactionWithSenderAPI, - Uint, - Uint256, -} from 'web3-types'; -import { validator } from 'web3-validator'; -import { Web3EthExecutionAPI } from './web3_eth_execution_api'; - -export async function getProtocolVersion(requestManager: Web3RequestManager) { - return requestManager.send({ - method: 'eth_protocolVersion', - params: [], - }); -} - -export async function getSyncing(requestManager: Web3RequestManager) { - return requestManager.send({ - method: 'eth_syncing', - params: [], - }); -} - -export async function getCoinbase(requestManager: Web3RequestManager) { - return requestManager.send({ - method: 'eth_coinbase', - params: [], - }); -} - -export async function getMining(requestManager: Web3RequestManager) { - return requestManager.send({ - method: 'eth_mining', - params: [], - }); -} - -export async function getHashRate(requestManager: Web3RequestManager) { - return requestManager.send({ - method: 'eth_hashrate', - params: [], - }); -} - -export async function getGasPrice(requestManager: Web3RequestManager) { - return requestManager.send({ - method: 'eth_gasPrice', - params: [], - }); -} - -export async function getAccounts(requestManager: Web3RequestManager) { - return requestManager.send({ - method: 'eth_accounts', - params: [], - }); -} - -export async function getBlockNumber(requestManager: Web3RequestManager) { - return requestManager.send({ - method: 'eth_blockNumber', - params: [], - }); -} - -export async function getBalance( - requestManager: Web3RequestManager, - address: Address, - blockNumber: BlockNumberOrTag, -) { - validator.validate(['address', 'blockNumberOrTag'], [address, blockNumber]); - - return requestManager.send({ - method: 'eth_getBalance', - params: [address, blockNumber], - }); -} - -export async function getStorageAt( - requestManager: Web3RequestManager, - address: Address, - storageSlot: Uint256, - blockNumber: BlockNumberOrTag, -) { - validator.validate(['address', 'hex', 'blockNumberOrTag'], [address, storageSlot, blockNumber]); - - return requestManager.send({ - method: 'eth_getStorageAt', - params: [address, storageSlot, blockNumber], - }); -} - -export async function getTransactionCount( - requestManager: Web3RequestManager, - address: Address, - blockNumber: BlockNumberOrTag, -) { - validator.validate(['address', 'blockNumberOrTag'], [address, blockNumber]); - - return requestManager.send({ - method: 'eth_getTransactionCount', - params: [address, blockNumber], - }); -} - -export async function getBlockTransactionCountByHash( - requestManager: Web3RequestManager, - blockHash: HexString32Bytes, -) { - validator.validate(['bytes32'], [blockHash]); - - return requestManager.send({ - method: 'eth_getBlockTransactionCountByHash', - params: [blockHash], - }); -} - -export async function getBlockTransactionCountByNumber( - requestManager: Web3RequestManager, - blockNumber: BlockNumberOrTag, -) { - validator.validate(['blockNumberOrTag'], [blockNumber]); - - return requestManager.send({ - method: 'eth_getBlockTransactionCountByNumber', - params: [blockNumber], - }); -} - -export async function getUncleCountByBlockHash( - requestManager: Web3RequestManager, - blockHash: HexString32Bytes, -) { - validator.validate(['bytes32'], [blockHash]); - - return requestManager.send({ - method: 'eth_getUncleCountByBlockHash', - params: [blockHash], - }); -} - -export async function getUncleCountByBlockNumber( - requestManager: Web3RequestManager, - blockNumber: BlockNumberOrTag, -) { - validator.validate(['blockNumberOrTag'], [blockNumber]); - - return requestManager.send({ - method: 'eth_getUncleCountByBlockNumber', - params: [blockNumber], - }); -} - -export async function getCode( - requestManager: Web3RequestManager, - address: Address, - blockNumber: BlockNumberOrTag, -) { - validator.validate(['address', 'blockNumberOrTag'], [address, blockNumber]); - - return requestManager.send({ - method: 'eth_getCode', - params: [address, blockNumber], - }); -} - -export async function sign( - requestManager: Web3RequestManager, - address: Address, - message: HexStringBytes, -) { - validator.validate(['address', 'hex'], [address, message]); - - return requestManager.send({ - method: 'eth_sign', - params: [address, message], - }); -} - -// TODO - Validation should be: -// isTransactionWithSender(transaction) -// ? validateTransactionWithSender(transaction) -// : validateTransactionWithSender(transaction, true) with true being a isPartial flag -export async function signTransaction( - requestManager: Web3RequestManager, - transaction: TransactionWithSenderAPI | Partial, -) { - return requestManager.send({ - method: 'eth_signTransaction', - params: [transaction], - }); -} - -// TODO - Validation should be: -// isTransactionWithSender(transaction) -// ? validateTransactionWithSender(transaction) -// : validateTransactionWithSender(transaction, true) with true being a isPartial flag -export async function sendTransaction( - requestManager: Web3RequestManager, - transaction: TransactionWithSenderAPI | Partial, -) { - return requestManager.send({ - method: 'eth_sendTransaction', - params: [transaction], - }); -} - -export async function sendRawTransaction( - requestManager: Web3RequestManager, - transaction: HexStringBytes, -) { - validator.validate(['hex'], [transaction]); - - return requestManager.send({ - method: 'eth_sendRawTransaction', - params: [transaction], - }); -} - -// TODO - validate transaction -export async function call( - requestManager: Web3RequestManager, - transaction: TransactionCallAPI, - blockNumber: BlockNumberOrTag, -) { - // validateTransactionCall(transaction); - validator.validate(['blockNumberOrTag'], [blockNumber]); - - return requestManager.send({ - method: 'eth_call', - params: [transaction, blockNumber], - }); -} - -// TODO Not sure how to best validate Partial -export async function estimateGas( - requestManager: Web3RequestManager, - transaction: Partial, - blockNumber: BlockNumberOrTag, -) { - validator.validate(['blockNumberOrTag'], [blockNumber]); - - return requestManager.send({ - method: 'eth_estimateGas', - params: [transaction, blockNumber], - }); -} - -export async function getBlockByHash( - requestManager: Web3RequestManager, - blockHash: HexString32Bytes, - hydrated: boolean, -) { - validator.validate(['bytes32', 'bool'], [blockHash, hydrated]); - - return requestManager.send({ - method: 'eth_getBlockByHash', - params: [blockHash, hydrated], - }); -} - -export async function getBlockByNumber( - requestManager: Web3RequestManager, - blockNumber: BlockNumberOrTag, - hydrated: boolean, -) { - validator.validate(['blockNumberOrTag', 'bool'], [blockNumber, hydrated]); - - return requestManager.send({ - method: 'eth_getBlockByNumber', - params: [blockNumber, hydrated], - }); -} - -export async function getTransactionByHash( - requestManager: Web3RequestManager, - transactionHash: HexString32Bytes, -) { - validator.validate(['bytes32'], [transactionHash]); - - return requestManager.send({ - method: 'eth_getTransactionByHash', - params: [transactionHash], - }); -} - -export async function getTransactionByBlockHashAndIndex( - requestManager: Web3RequestManager, - blockHash: HexString32Bytes, - transactionIndex: Uint, -) { - validator.validate(['bytes32', 'hex'], [blockHash, transactionIndex]); - - return requestManager.send({ - method: 'eth_getTransactionByBlockHashAndIndex', - params: [blockHash, transactionIndex], - }); -} - -export async function getTransactionByBlockNumberAndIndex( - requestManager: Web3RequestManager, - blockNumber: BlockNumberOrTag, - transactionIndex: Uint, -) { - validator.validate(['blockNumberOrTag', 'hex'], [blockNumber, transactionIndex]); - - return requestManager.send({ - method: 'eth_getTransactionByBlockNumberAndIndex', - params: [blockNumber, transactionIndex], - }); -} - -export async function getTransactionReceipt( - requestManager: Web3RequestManager, - transactionHash: HexString32Bytes, -) { - validator.validate(['bytes32'], [transactionHash]); - - return requestManager.send({ - method: 'eth_getTransactionReceipt', - params: [transactionHash], - }); -} - -export async function getUncleByBlockHashAndIndex( - requestManager: Web3RequestManager, - blockHash: HexString32Bytes, - uncleIndex: Uint, -) { - validator.validate(['bytes32', 'hex'], [blockHash, uncleIndex]); - - return requestManager.send({ - method: 'eth_getUncleByBlockHashAndIndex', - params: [blockHash, uncleIndex], - }); -} - -export async function getUncleByBlockNumberAndIndex( - requestManager: Web3RequestManager, - blockNumber: BlockNumberOrTag, - uncleIndex: Uint, -) { - validator.validate(['blockNumberOrTag', 'hex'], [blockNumber, uncleIndex]); - - return requestManager.send({ - method: 'eth_getUncleByBlockNumberAndIndex', - params: [blockNumber, uncleIndex], - }); -} - -export async function getCompilers(requestManager: Web3RequestManager) { - return requestManager.send({ - method: 'eth_getCompilers', - params: [], - }); -} - -export async function compileSolidity(requestManager: Web3RequestManager, code: string) { - validator.validate(['string'], [code]); - - return requestManager.send({ - method: 'eth_compileSolidity', - params: [code], - }); -} - -export async function compileLLL(requestManager: Web3RequestManager, code: string) { - validator.validate(['string'], [code]); - - return requestManager.send({ - method: 'eth_compileLLL', - params: [code], - }); -} - -export async function compileSerpent(requestManager: Web3RequestManager, code: string) { - validator.validate(['string'], [code]); - - return requestManager.send({ - method: 'eth_compileSerpent', - params: [code], - }); -} - -export async function newFilter(requestManager: Web3RequestManager, filter: Filter) { - validator.validate(['filter'], [filter]); - - return requestManager.send({ - method: 'eth_newFilter', - params: [filter], - }); -} - -export async function newBlockFilter(requestManager: Web3RequestManager) { - return requestManager.send({ - method: 'eth_newBlockFilter', - params: [], - }); -} - -export async function newPendingTransactionFilter(requestManager: Web3RequestManager) { - return requestManager.send({ - method: 'eth_newPendingTransactionFilter', - params: [], - }); -} - -export async function uninstallFilter(requestManager: Web3RequestManager, filterIdentifier: Uint) { - validator.validate(['hex'], [filterIdentifier]); - - return requestManager.send({ - method: 'eth_uninstallFilter', - params: [filterIdentifier], - }); -} - -export async function getFilterChanges(requestManager: Web3RequestManager, filterIdentifier: Uint) { - validator.validate(['hex'], [filterIdentifier]); - - return requestManager.send({ - method: 'eth_getFilterChanges', - params: [filterIdentifier], - }); -} - -export async function getFilterLogs(requestManager: Web3RequestManager, filterIdentifier: Uint) { - validator.validate(['hex'], [filterIdentifier]); - - return requestManager.send({ - method: 'eth_getFilterLogs', - params: [filterIdentifier], - }); -} - -export async function getLogs(requestManager: Web3RequestManager, filter: Filter) { - validator.validate(['filter'], [filter]); - - return requestManager.send({ - method: 'eth_getLogs', - params: [filter], - }); -} - -export async function getWork(requestManager: Web3RequestManager) { - return requestManager.send({ - method: 'eth_getWork', - params: [], - }); -} - -export async function submitWork( - requestManager: Web3RequestManager, - nonce: HexString8Bytes, - hash: HexString32Bytes, - digest: HexString32Bytes, -) { - validator.validate(['bytes8', 'bytes32', 'bytes32'], [nonce, hash, digest]); - - return requestManager.send({ - method: 'eth_submitWork', - params: [nonce, hash, digest], - }); -} - -export async function submitHashrate( - requestManager: Web3RequestManager, - hashRate: HexString32Bytes, - id: HexString32Bytes, -) { - validator.validate(['bytes32', 'bytes32'], [hashRate, id]); - - return requestManager.send({ - method: 'eth_submitHashrate', - params: [hashRate, id], - }); -} - -export async function getFeeHistory( - requestManager: Web3RequestManager, - blockCount: Uint, - newestBlock: BlockNumberOrTag, - rewardPercentiles: number[], -) { - validator.validate(['hex', 'blockNumberOrTag'], [blockCount, newestBlock]); - - for (const rewardPercentile of rewardPercentiles) { - validator.validate(['number'], [rewardPercentile]); - } - - return requestManager.send({ - method: 'eth_feeHistory', - params: [blockCount, newestBlock, rewardPercentiles], - }); -} - -export async function getPendingTransactions( - requestManager: Web3RequestManager, -) { - return requestManager.send({ - method: 'eth_pendingTransactions', - params: [], - }); -} - -export async function requestAccounts(requestManager: Web3RequestManager) { - return requestManager.send({ - method: 'eth_requestAccounts', - params: [], - }); -} - -export async function getChainId(requestManager: Web3RequestManager) { - return requestManager.send({ - method: 'eth_chainId', - params: [], - }); -} - -export async function getProof( - requestManager: Web3RequestManager, - address: Address, - storageKeys: HexString32Bytes[], - blockNumber: BlockNumberOrTag, -) { - validator.validate( - ['address', 'bytes32[]', 'blockNumberOrTag'], - [address, storageKeys, blockNumber], - ); - - return requestManager.send({ - method: 'eth_getProof', - params: [address, storageKeys, blockNumber], - }); -} - -export async function getNodeInfo(requestManager: Web3RequestManager) { - return requestManager.send({ - method: 'web3_clientVersion', - params: [], - }); -} diff --git a/packages/web3-eth/src/utils/transaction_builder.ts b/packages/web3-eth/src/utils/transaction_builder.ts index ae941d002c8..0a690f84be2 100644 --- a/packages/web3-eth/src/utils/transaction_builder.ts +++ b/packages/web3-eth/src/utils/transaction_builder.ts @@ -31,10 +31,11 @@ import { Hardfork, Transaction, TransactionWithLocalWalletIndex, + Web3NetAPI, } from 'web3-types'; import { Web3Context } from 'web3-core'; import { privateKeyToAddress } from 'web3-eth-accounts'; -import { getId, Web3NetAPI } from 'web3-net'; +import { getId } from 'web3-net'; import { isNullish, isNumber } from 'web3-validator'; import { NUMBER_DATA_FORMAT } from '../constants'; import { diff --git a/packages/web3-eth/src/utils/watch_transaction_for_confirmations.ts b/packages/web3-eth/src/utils/watch_transaction_for_confirmations.ts index 2d15987dbfc..db30d71e162 100644 --- a/packages/web3-eth/src/utils/watch_transaction_for_confirmations.ts +++ b/packages/web3-eth/src/utils/watch_transaction_for_confirmations.ts @@ -25,13 +25,13 @@ import { import { Web3Context, Web3PromiEvent } from 'web3-core'; import { DataFormat, format, numberToHex } from 'web3-utils'; import { isNullish } from 'web3-validator'; +import { ethRpcMethods } from 'web3-rpc-methods'; import { TransactionMissingReceiptOrBlockHashError, TransactionReceiptMissingBlockNumberError, } from '../errors'; import { SendSignedTransactionEvents, SendTransactionEvents } from '../types'; -import { getBlockByNumber } from '../rpc_methods'; import { NewHeadsSubscription } from '../web3_subscriptions'; import { transactionReceiptSchema } from '../schemas'; @@ -60,7 +60,7 @@ const watchByPolling = = web3Context.transactionConfirmationBlocks) clearInterval(intervalId); - const nextBlock = await getBlockByNumber( + const nextBlock = await ethRpcMethods.getBlockByNumber( web3Context.requestManager, numberToHex(BigInt(transactionReceipt.blockNumber) + BigInt(confirmations)), false, diff --git a/packages/web3-eth/src/web3_eth.ts b/packages/web3-eth/src/web3_eth.ts index 1ad29f91773..eeac763c031 100644 --- a/packages/web3-eth/src/web3_eth.ts +++ b/packages/web3-eth/src/web3_eth.ts @@ -31,14 +31,15 @@ import { Transaction, TransactionCall, TransactionWithLocalWalletIndex, + Web3EthExecutionAPI, } from 'web3-types'; import { isSupportedProvider, Web3Context, Web3ContextInitOptions } from 'web3-core'; import { TransactionNotFound } from 'web3-errors'; import { toChecksumAddress, DataFormat, DEFAULT_RETURN_FORMAT } from 'web3-utils'; -import * as rpcMethods from './rpc_methods'; +import { ethRpcMethods } from 'web3-rpc-methods'; + import * as rpcMethodsWrappers from './rpc_method_wrappers'; import { SendTransactionOptions } from './types'; -import { Web3EthExecutionAPI } from './web3_eth_execution_api'; import { LogsSubscription, NewPendingTransactionsSubscription, @@ -100,7 +101,7 @@ export class Web3Eth extends Web3Context toChecksumAddress(address)); } @@ -1233,7 +1234,7 @@ export class Web3Eth extends Web3Context. import { Net } from './net'; export * from './net'; -export * as rpcMethods from './rpc_methods'; export * from './rpc_method_wrappers'; -export * from './web3_net_api'; export default Net; diff --git a/packages/web3-net/src/net.ts b/packages/web3-net/src/net.ts index 390e9935c66..311f3cf0bc5 100644 --- a/packages/web3-net/src/net.ts +++ b/packages/web3-net/src/net.ts @@ -14,11 +14,11 @@ GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with web3.js. If not, see . */ - import { DataFormat, DEFAULT_RETURN_FORMAT } from 'web3-utils'; import { Web3Context } from 'web3-core'; +import { Web3NetAPI } from 'web3-types'; + import * as rpcMethodsWrappers from './rpc_method_wrappers'; -import { Web3NetAPI } from './web3_net_api'; export class Net extends Web3Context { /** diff --git a/packages/web3-net/src/rpc_method_wrappers.ts b/packages/web3-net/src/rpc_method_wrappers.ts index bf00551ee8f..6ba1a37d958 100644 --- a/packages/web3-net/src/rpc_method_wrappers.ts +++ b/packages/web3-net/src/rpc_method_wrappers.ts @@ -17,14 +17,14 @@ along with web3.js. If not, see . import { DataFormat, format } from 'web3-utils'; import { Web3Context } from 'web3-core'; -import * as rpcMethods from './rpc_methods'; -import { Web3NetAPI } from './web3_net_api'; +import { Web3NetAPI } from 'web3-types'; +import { netRpcMethods } from 'web3-rpc-methods'; export async function getId( web3Context: Web3Context, returnFormat: ReturnFormat, ) { - const response = await rpcMethods.getId(web3Context.requestManager); + const response = await netRpcMethods.getId(web3Context.requestManager); return format({ eth: 'uint' }, response as unknown as number, returnFormat); } @@ -33,11 +33,11 @@ export async function getPeerCount( web3Context: Web3Context, returnFormat: ReturnFormat, ) { - const response = await rpcMethods.getPeerCount(web3Context.requestManager); + const response = await netRpcMethods.getPeerCount(web3Context.requestManager); // Data returned is number in hex format return format({ eth: 'uint' }, response as unknown as number, returnFormat); } export const isListening = async (web3Context: Web3Context) => - rpcMethods.isListening(web3Context.requestManager); + netRpcMethods.isListening(web3Context.requestManager); diff --git a/packages/web3-net/src/rpc_methods.ts b/packages/web3-net/src/rpc_methods.ts deleted file mode 100644 index 4f43d41f954..00000000000 --- a/packages/web3-net/src/rpc_methods.ts +++ /dev/null @@ -1,40 +0,0 @@ -/* -This file is part of web3.js. - -web3.js is free software: you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -web3.js is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with web3.js. If not, see . -*/ - -import { Web3RequestManager } from 'web3-core'; -import { Web3NetAPI } from './web3_net_api'; - -export async function getId(requestManager: Web3RequestManager) { - return requestManager.send({ - method: 'net_version', - params: [], - }); -} - -export async function getPeerCount(requestManager: Web3RequestManager) { - return requestManager.send({ - method: 'net_peerCount', - params: [], - }); -} - -export async function isListening(requestManager: Web3RequestManager) { - return requestManager.send({ - method: 'net_listening', - params: [], - }); -} diff --git a/packages/web3-types/src/apis/web3_eth_execution_api.ts b/packages/web3-types/src/apis/web3_eth_execution_api.ts new file mode 100644 index 00000000000..b8989b59252 --- /dev/null +++ b/packages/web3-types/src/apis/web3_eth_execution_api.ts @@ -0,0 +1,44 @@ +/* +This file is part of web3.js. + +web3.js is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +web3.js is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with web3.js. If not, see . +*/ +import { EthExecutionAPI } from './eth_execution_api'; +import { + AccountObject, + Address, + BlockNumberOrTag, + HexString32Bytes, + TransactionInfo, + Uint, +} from '../eth_types'; + +export type Web3EthExecutionAPI = EthExecutionAPI & { + eth_pendingTransactions: () => TransactionInfo[]; + + // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1102.md + eth_requestAccounts: () => Address[]; + + // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-695.md + eth_chainId: () => Uint; + + web3_clientVersion: () => string; + + // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1186.md + eth_getProof: ( + address: Address, + storageKeys: HexString32Bytes[], + blockNumber: BlockNumberOrTag, + ) => AccountObject; +}; diff --git a/packages/web3-net/src/web3_net_api.ts b/packages/web3-types/src/apis/web3_net_api.ts similarity index 94% rename from packages/web3-net/src/web3_net_api.ts rename to packages/web3-types/src/apis/web3_net_api.ts index 93794657729..9160e25bf46 100644 --- a/packages/web3-net/src/web3_net_api.ts +++ b/packages/web3-types/src/apis/web3_net_api.ts @@ -1,4 +1,4 @@ -/* +/* This file is part of web3.js. web3.js is free software: you can redistribute it and/or modify @@ -14,8 +14,7 @@ GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with web3.js. If not, see . */ - -import { HexString } from 'web3-types'; +import { HexString } from '../primitives_types'; export type Web3NetAPI = { net_version: () => string; // https://eth.wiki/json-rpc/API#net_version diff --git a/packages/web3-types/src/eth_execution_api.ts b/packages/web3-types/src/eth_execution_api.ts deleted file mode 100644 index 2e7dd24e5dc..00000000000 --- a/packages/web3-types/src/eth_execution_api.ts +++ /dev/null @@ -1,323 +0,0 @@ -/* -This file is part of web3.js. - -web3.js is free software: you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -web3.js is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with web3.js. If not, see . -*/ - -import { - Address, - HexString32Bytes, - Uint, - HexStringBytes, - HexStringSingleByte, - HexString256Bytes, - Topic, - HexString8Bytes, - Uint256, - BlockNumberOrTag, - Filter, - AccessList, - TransactionHash, - Uncles, -} from './eth_types'; -import { HexString } from './primitives_types'; - -// The types are generated manually by referring to following doc -// https://github.com/ethereum/execution-apis -export interface TransactionCallAPI { - readonly from?: Address; - readonly to: Address; - readonly gas?: Uint; - readonly gasPrice?: Uint; - readonly value?: Uint; - readonly data?: HexStringBytes; - readonly type?: HexStringSingleByte; - readonly maxFeePerGas?: Uint; - readonly maxPriorityFeePerGas?: Uint; - readonly accessList?: AccessList; -} - -export interface BaseTransactionAPI { - // eslint-disable-next-line @typescript-eslint/ban-types - readonly to?: Address | null; - readonly type: HexStringSingleByte; - readonly nonce: Uint; - readonly gas: Uint; - readonly value: Uint; - // TODO - https://github.com/ethereum/execution-apis/pull/201 - readonly input: HexStringBytes; - readonly data?: HexStringBytes; - readonly chainId?: Uint; - readonly hash?: HexString32Bytes; -} - -export interface Transaction1559UnsignedAPI extends BaseTransactionAPI { - readonly maxFeePerGas: Uint; - readonly maxPriorityFeePerGas: Uint; - readonly accessList: AccessList; -} - -export interface Transaction1559SignedAPI extends Transaction1559UnsignedAPI { - readonly yParity: Uint; - readonly r: Uint; - readonly s: Uint; -} - -export interface Transaction2930UnsignedAPI extends BaseTransactionAPI { - readonly gasPrice: Uint; - readonly accessList: AccessList; -} - -export interface Transaction2930SignedAPI extends Transaction2930UnsignedAPI { - readonly yParity: Uint; - readonly r: Uint; - readonly s: Uint; -} - -export interface TransactionLegacyUnsignedAPI extends BaseTransactionAPI { - readonly gasPrice: Uint; -} - -export interface TransactionLegacySignedAPI extends TransactionLegacyUnsignedAPI { - readonly v: Uint; - readonly r: Uint; - readonly s: Uint; -} - -// https://github.com/ethereum/execution-apis/blob/main/src/schemas/transaction.json#L178 -export type TransactionUnsignedAPI = - | Transaction1559UnsignedAPI - | Transaction2930UnsignedAPI - | TransactionLegacyUnsignedAPI; - -// https://github.com/ethereum/execution-apis/blob/main/src/schemas/transaction.json#L262 -export type TransactionSignedAPI = - | Transaction1559SignedAPI - | Transaction2930SignedAPI - | TransactionLegacySignedAPI; - -// https://github.com/ethereum/execution-apis/blob/main/src/schemas/transaction.json#L269 -export type TransactionInfoAPI = TransactionSignedAPI & { - readonly blockHash?: HexString32Bytes; - readonly blockNumber?: Uint; - readonly from: Address; - readonly hash: HexString32Bytes; - readonly transactionIndex?: Uint; -}; - -export interface SignedTransactionInfoAPI { - raw: HexStringBytes; - tx: TransactionSignedAPI; -} - -// https://github.com/ethereum/execution-apis/blob/main/src/schemas/transaction.json#L24 -export type TransactionWithSenderAPI = TransactionUnsignedAPI & { from: Address }; - -// https://github.com/ethereum/execution-apis/blob/main/src/schemas/block.json#L2 -export interface BlockAPI { - readonly parentHash: HexString32Bytes; - readonly sha3Uncles: HexString32Bytes; - readonly miner: HexString; - readonly stateRoot: HexString32Bytes; - readonly transactionsRoot: HexString32Bytes; - readonly receiptsRoot: HexString32Bytes; - readonly logsBloom?: HexString256Bytes; - readonly difficulty?: Uint; - readonly number?: Uint; - readonly gasLimit: Uint; - readonly gasUsed: Uint; - readonly timestamp: Uint; - readonly extraData: HexStringBytes; - readonly mixHash: HexString32Bytes; - readonly nonce?: Uint; - readonly totalDifficulty: Uint; - readonly baseFeePerGas?: Uint; - readonly size: Uint; - readonly transactions: TransactionHash[] | TransactionInfoAPI[]; - readonly uncles: Uncles; - readonly hash?: HexString32Bytes; -} - -// https://github.com/ethereum/execution-apis/blob/main/src/schemas/receipt.json#L2 -export interface LogAPI { - readonly removed?: boolean; - readonly logIndex?: Uint; - readonly transactionIndex?: Uint; - readonly transactionHash?: HexString32Bytes; - readonly blockHash?: HexString32Bytes; - readonly blockNumber?: Uint; - readonly address?: Address; - readonly data?: HexStringBytes; - readonly topics?: Topic | Topic[]; -} - -// https://github.com/ethereum/execution-apis/blob/main/src/schemas/receipt.json#L44 -export interface TransactionReceiptAPI { - readonly transactionHash: HexString32Bytes; - readonly transactionIndex: Uint; - readonly blockHash: HexString32Bytes; - readonly blockNumber: Uint; - readonly from: Address; - readonly to: Address; - readonly cumulativeGasUsed: Uint; - readonly gasUsed: Uint; - readonly contractAddress?: Address; - readonly logs: LogAPI[]; - readonly logsBloom: HexString256Bytes; - readonly root: HexString32Bytes; - readonly status: '0x1' | '0x0'; - readonly effectiveGasPrice: Uint; -} - -// https://github.com/ethereum/execution-apis/blob/main/src/schemas/client.json#L2 -export type SyncingStatusAPI = - | { startingBlock: Uint; currentBlock: Uint; highestBlock: Uint } - | boolean; - -// https://github.com/ethereum/execution-apis/blob/main/src/eth/fee_market.json#L53 -export interface FeeHistoryResultAPI { - readonly oldestBlock: Uint; - readonly baseFeePerGas: Uint; - readonly reward: number[][]; -} - -// https://github.com/ethereum/execution-apis/blob/main/src/schemas/filter.json#L2 -export type FilterResultsAPI = HexString32Bytes[] | LogAPI[]; - -export interface CompileResultAPI { - readonly code: HexStringBytes; - readonly info: { - readonly source: string; - readonly language: string; - readonly languageVersion: string; - readonly compilerVersion: string; - readonly abiDefinition: Record[]; - readonly userDoc: { - readonly methods: Record; - }; - readonly developerDoc: { - readonly methods: Record; - }; - }; -} - -/* eslint-disable camelcase */ -export type EthExecutionAPI = { - // https://github.com/ethereum/execution-apis/blob/main/src/eth/block.json - eth_getBlockByHash: (blockHash: HexString32Bytes, hydrated: boolean) => BlockAPI; - eth_getBlockByNumber: (blockNumber: BlockNumberOrTag, hydrated: boolean) => BlockAPI; - eth_getBlockTransactionCountByHash: (blockHash: HexString32Bytes) => Uint; - eth_getBlockTransactionCountByNumber: (blockNumber: BlockNumberOrTag) => Uint; - eth_getUncleCountByBlockHash: (blockHash: HexString32Bytes) => Uint; - eth_getUncleCountByBlockNumber: (blockNumber: BlockNumberOrTag) => Uint; - eth_getUncleByBlockHashAndIndex: (blockHash: HexString32Bytes, uncleIndex: Uint) => BlockAPI; - eth_getUncleByBlockNumberAndIndex: ( - blockNumber: BlockNumberOrTag, - uncleIndex: Uint, - ) => BlockAPI; - - // https://github.com/ethereum/execution-apis/blob/main/src/eth/transaction.json - eth_getTransactionByHash: (transactionHash: HexString32Bytes) => TransactionInfoAPI | undefined; - eth_getTransactionByBlockHashAndIndex: ( - blockHash: HexString32Bytes, - transactionIndex: Uint, - ) => TransactionInfoAPI | undefined; - eth_getTransactionByBlockNumberAndIndex: ( - blockNumber: BlockNumberOrTag, - transactionIndex: Uint, - ) => TransactionInfoAPI | undefined; - eth_getTransactionReceipt: ( - transactionHash: HexString32Bytes, - ) => TransactionReceiptAPI | undefined; - - // https://github.com/ethereum/execution-apis/blob/main/src/eth/client.json - eth_protocolVersion: () => string; - eth_syncing: () => SyncingStatusAPI; - eth_coinbase: () => Address; - eth_accounts: () => Address[]; - eth_blockNumber: () => Uint; - - // https://github.com/ethereum/execution-apis/blob/main/src/eth/execute.json - eth_call: (transaction: TransactionCallAPI, blockNumber: BlockNumberOrTag) => HexStringBytes; - eth_estimateGas: ( - transaction: Partial, - blockNumber: BlockNumberOrTag, - ) => Uint; - - // https://github.com/ethereum/execution-apis/blob/main/src/eth/fee_market.json - eth_gasPrice: () => Uint; - eth_feeHistory: ( - blockCount: Uint, - newestBlock: BlockNumberOrTag, - rewardPercentiles: number[], - ) => FeeHistoryResultAPI; - - // https://github.com/ethereum/execution-apis/blob/main/src/eth/filter.json - eth_newFilter: (filter: Filter) => Uint; - eth_newBlockFilter: () => Uint; - eth_newPendingTransactionFilter: () => Uint; - eth_uninstallFilter: (filterIdentifier: Uint) => boolean; - eth_getFilterChanges: (filterIdentifier: Uint) => FilterResultsAPI; - eth_getFilterLogs: (filterIdentifier: Uint) => FilterResultsAPI; - eth_getLogs: (filter: Filter) => FilterResultsAPI; - - // https://github.com/ethereum/execution-apis/blob/main/src/eth/mining.json - eth_mining: () => boolean; - eth_hashrate: () => Uint; - eth_getWork: () => [HexString32Bytes, HexString32Bytes, HexString32Bytes]; - eth_submitWork: ( - nonce: HexString8Bytes, - hash: HexString32Bytes, - digest: HexString32Bytes, - ) => boolean; - eth_submitHashrate: (hashRate: HexString32Bytes, id: HexString32Bytes) => boolean; - - // https://github.com/ethereum/execution-apis/blob/main/src/eth/sign.json - eth_sign: (address: Address, message: HexStringBytes) => HexString256Bytes; - eth_signTransaction: ( - transaction: TransactionWithSenderAPI | Partial, - ) => HexStringBytes | SignedTransactionInfoAPI; - - // https://github.com/ethereum/execution-apis/blob/main/src/eth/state.json - eth_getBalance: (address: Address, blockNumber: BlockNumberOrTag) => Uint; - eth_getStorageAt: ( - address: Address, - storageSlot: Uint256, - blockNumber: BlockNumberOrTag, - ) => HexStringBytes; - eth_getTransactionCount: (address: Address, blockNumber: BlockNumberOrTag) => Uint; - eth_getCode: (address: Address, blockNumber: BlockNumberOrTag) => HexStringBytes; - - // https://github.com/ethereum/execution-apis/blob/main/src/eth/submit.json - eth_sendTransaction: ( - transaction: TransactionWithSenderAPI | Partial, - ) => HexString32Bytes; - eth_sendRawTransaction: (transaction: HexStringBytes) => HexString32Bytes; - - // https://geth.ethereum.org/docs/rpc/pubsub - eth_subscribe: ( - ...params: - | ['newHeads'] - | ['newPendingTransactions'] - | ['syncing'] - | ['logs', { address?: HexString; topics?: HexString[] }] - ) => HexString; - eth_unsubscribe: (subscriptionId: HexString) => HexString; - eth_clearSubscriptions: (keepSyncing?: boolean) => void; - // Non-supported by execution-apis specs - eth_getCompilers: () => string[]; - eth_compileSolidity: (code: string) => CompileResultAPI; - eth_compileLLL: (code: string) => HexStringBytes; - eth_compileSerpent: (code: string) => HexStringBytes; -}; diff --git a/packages/web3-types/src/index.ts b/packages/web3-types/src/index.ts index 902b6ca9c42..e894153169b 100644 --- a/packages/web3-types/src/index.ts +++ b/packages/web3-types/src/index.ts @@ -16,7 +16,10 @@ along with web3.js. If not, see . */ export * from './error_types'; -export * from './eth_execution_api'; +export * from './apis/eth_execution_api'; +export * from './apis/web3_eth_execution_api'; +export * from './apis/web3_net_api'; +export * from './apis/eth_personal_api'; export * from './eth_types'; export * from './json_rpc_types'; export * from './primitives_types'; From a44a1efc09348ea160a9d4c080450bba21cc0e27 Mon Sep 17 00:00:00 2001 From: Wyatt Barnes Date: Wed, 14 Sep 2022 15:45:14 -1000 Subject: [PATCH 08/16] Add ^ to web3-rpc-methods version --- packages/web3-eth-personal/package.json | 2 +- packages/web3-eth/package.json | 2 +- packages/web3-net/package.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/web3-eth-personal/package.json b/packages/web3-eth-personal/package.json index 51a05740b8a..a3696de6429 100644 --- a/packages/web3-eth-personal/package.json +++ b/packages/web3-eth-personal/package.json @@ -27,7 +27,7 @@ "dependencies": { "web3-core": "^4.0.1-alpha.0", "web3-eth": "^4.0.1-alpha.0", - "web3-rpc-methods": "0.1.0-alpha.0", + "web3-rpc-methods": "^0.1.0-alpha.0", "web3-types": "^0.1.1-alpha.0", "web3-utils": "^4.0.1-alpha.0", "web3-validator": "^0.1.1-alpha.0" diff --git a/packages/web3-eth/package.json b/packages/web3-eth/package.json index 50335da2ce0..1cc99f1a8a1 100644 --- a/packages/web3-eth/package.json +++ b/packages/web3-eth/package.json @@ -52,7 +52,7 @@ "web3-eth-accounts": "^4.0.1-alpha.0", "web3-net": "^4.0.1-alpha.0", "web3-providers-ws": "^4.0.1-alpha.0", - "web3-rpc-methods": "0.1.0-alpha.0", + "web3-rpc-methods": "^0.1.0-alpha.0", "web3-types": "^0.1.1-alpha.0", "web3-utils": "^4.0.1-alpha.0", "web3-validator": "^0.1.1-alpha.0" diff --git a/packages/web3-net/package.json b/packages/web3-net/package.json index 3397207e0d7..46d588f4d58 100644 --- a/packages/web3-net/package.json +++ b/packages/web3-net/package.json @@ -40,7 +40,7 @@ }, "dependencies": { "web3-core": "^4.0.1-alpha.0", - "web3-rpc-methods": "0.1.0-alpha.0", + "web3-rpc-methods": "^0.1.0-alpha.0", "web3-types": "^0.1.1-alpha.0", "web3-utils": "^4.0.1-alpha.0" } From 6bab085bc0cbeb904fe6c463f5dab9103b963481 Mon Sep 17 00:00:00 2001 From: Wyatt Barnes Date: Wed, 14 Sep 2022 15:45:35 -1000 Subject: [PATCH 09/16] Update CHANGELOG.md for affected packages --- packages/web3-eth-ens/CHANGELOG.md | 6 ++++++ packages/web3-eth-personal/CHANGELOG.md | 10 ++++++++++ packages/web3-eth/CHANGELOG.md | 6 ++++++ packages/web3-net/CHANGELOG.md | 11 +++++++++++ packages/web3-types/CHANGELOG.md | 9 +++++++++ 5 files changed, 42 insertions(+) diff --git a/packages/web3-eth-ens/CHANGELOG.md b/packages/web3-eth-ens/CHANGELOG.md index dc93264a3e0..62116e57693 100644 --- a/packages/web3-eth-ens/CHANGELOG.md +++ b/packages/web3-eth-ens/CHANGELOG.md @@ -34,3 +34,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - I've improved the security in XY (#1000) --> + +## [4.0.1-alpha.1] + +### Changed + +- `Web3NetAPI` is now imported from `web3-types` (#5441) diff --git a/packages/web3-eth-personal/CHANGELOG.md b/packages/web3-eth-personal/CHANGELOG.md index dc93264a3e0..097c24fb45e 100644 --- a/packages/web3-eth-personal/CHANGELOG.md +++ b/packages/web3-eth-personal/CHANGELOG.md @@ -34,3 +34,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - I've improved the security in XY (#1000) --> + +## [4.0.1-alpha.1] + +### Added + +- `web3-rpc-methods` dependency (#5441) + +### Removed + +- Exported type `EthPersonalAPIManager`, `EthPersonalAPI` is not exported via `web3-types` (#5441) diff --git a/packages/web3-eth/CHANGELOG.md b/packages/web3-eth/CHANGELOG.md index dc93264a3e0..6597f4daca3 100644 --- a/packages/web3-eth/CHANGELOG.md +++ b/packages/web3-eth/CHANGELOG.md @@ -34,3 +34,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - I've improved the security in XY (#1000) --> + +## [4.0.1-alpha.1] + +### Added + +- `web3-rpc-methods` dependency (#5441) diff --git a/packages/web3-net/CHANGELOG.md b/packages/web3-net/CHANGELOG.md index dc93264a3e0..a783a339a7b 100644 --- a/packages/web3-net/CHANGELOG.md +++ b/packages/web3-net/CHANGELOG.md @@ -34,3 +34,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - I've improved the security in XY (#1000) --> + +## [4.0.1-alpha.1] + +### Added + +- `web3-rpc-methods` dependency (#5441) + +### Removed + +- `rpcMethods` export, these methods are now exported via `web3-rpc-methods` as `netRpcMethods` (#5441) +- `Web3NetAPI` export, now exported via `web3-types` as `Web3NetAPI` (#5441) diff --git a/packages/web3-types/CHANGELOG.md b/packages/web3-types/CHANGELOG.md index dc93264a3e0..454982e04ea 100644 --- a/packages/web3-types/CHANGELOG.md +++ b/packages/web3-types/CHANGELOG.md @@ -34,3 +34,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - I've improved the security in XY (#1000) --> + +## [0.1.1-alpha.1] + +### Added + +- `EthExecutionAPI` export (#5441) +- `Web3EthExecutionAPI` export (#5441) +- `Web3NetAPI` export (#5441) +- `EthPersonalAPI` export (#5441) From 98b38fad5f0e017ce50fad3310c709d1386b35c1 Mon Sep 17 00:00:00 2001 From: Wyatt Barnes Date: Wed, 14 Sep 2022 16:57:54 -1000 Subject: [PATCH 10/16] Update CHANGELOG.md for affected packages --- packages/web3-eth-ens/CHANGELOG.md | 2 +- packages/web3-eth-personal/CHANGELOG.md | 6 ++++++ packages/web3-eth/CHANGELOG.md | 6 ++++++ packages/web3-net/CHANGELOG.md | 5 +++++ packages/web3-types/CHANGELOG.md | 1 - 5 files changed, 18 insertions(+), 2 deletions(-) diff --git a/packages/web3-eth-ens/CHANGELOG.md b/packages/web3-eth-ens/CHANGELOG.md index 62116e57693..78ab7cb9987 100644 --- a/packages/web3-eth-ens/CHANGELOG.md +++ b/packages/web3-eth-ens/CHANGELOG.md @@ -39,4 +39,4 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed -- `Web3NetAPI` is now imported from `web3-types` (#5441) +- `Web3NetAPI` is now imported from `web3-types` instead of `web3-types` (#5441) diff --git a/packages/web3-eth-personal/CHANGELOG.md b/packages/web3-eth-personal/CHANGELOG.md index 097c24fb45e..e0ed8532263 100644 --- a/packages/web3-eth-personal/CHANGELOG.md +++ b/packages/web3-eth-personal/CHANGELOG.md @@ -41,6 +41,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `web3-rpc-methods` dependency (#5441) +### Changed + +- Import `EthPersonalAPI` from `web3-types` instead of local import (#5441) +- Replace the imported methods from `rcp_methods.ts` with `personalRpcMethods` imports from `web3-rpc-methods` (#5441) +- Replace use of `EthPersonalAPIManager` with `Web3RequestManager` (#5441) + ### Removed - Exported type `EthPersonalAPIManager`, `EthPersonalAPI` is not exported via `web3-types` (#5441) diff --git a/packages/web3-eth/CHANGELOG.md b/packages/web3-eth/CHANGELOG.md index 6597f4daca3..722eb5629bc 100644 --- a/packages/web3-eth/CHANGELOG.md +++ b/packages/web3-eth/CHANGELOG.md @@ -40,3 +40,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - `web3-rpc-methods` dependency (#5441) + +### Changed + +- `Web3EthExecutionAPI` is now imported via `web3-types` instead of `web3_eth_execution_api.ts` (#5441) +- Replace the imported methods from `rpc_methods.ts` with `ethRpcMethods` imports from `web3-rpc-methods` (#5441) +- `Web3NetAPI` is now imported from `web3-types` instead of `web3-net` (#5441) diff --git a/packages/web3-net/CHANGELOG.md b/packages/web3-net/CHANGELOG.md index a783a339a7b..2d32fc4d415 100644 --- a/packages/web3-net/CHANGELOG.md +++ b/packages/web3-net/CHANGELOG.md @@ -41,6 +41,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `web3-rpc-methods` dependency (#5441) +### Changed + +- `Web3NetAPI` is now imported from `web3-types` instead of `web3_net_api.ts` (#5441) +- Replace the imported methods from `rpc_methods.ts` with `netRpcMethods` imports from `web3-rpc-methods` (#5441) + ### Removed - `rpcMethods` export, these methods are now exported via `web3-rpc-methods` as `netRpcMethods` (#5441) diff --git a/packages/web3-types/CHANGELOG.md b/packages/web3-types/CHANGELOG.md index 454982e04ea..37991b821ce 100644 --- a/packages/web3-types/CHANGELOG.md +++ b/packages/web3-types/CHANGELOG.md @@ -39,7 +39,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added -- `EthExecutionAPI` export (#5441) - `Web3EthExecutionAPI` export (#5441) - `Web3NetAPI` export (#5441) - `EthPersonalAPI` export (#5441) From 2f156d84b293b7e4ac8fb3e130eb09a34e748232 Mon Sep 17 00:00:00 2001 From: Wyatt Barnes Date: Wed, 14 Sep 2022 20:08:59 -1000 Subject: [PATCH 11/16] Fix linter errors --- .../web3-eth/test/integration/eth.test.ts | 3 +- .../unit/default_transaction_builder.test.ts | 13 +++--- .../prepare_transaction_for_signing.test.ts | 4 +- .../unit/rpc_method_wrappers/call.test.ts | 8 ++-- .../rpc_method_wrappers/estimate_gas.test.ts | 8 ++-- .../rpc_method_wrappers/get_balance.test.ts | 8 ++-- .../rpc_method_wrappers/get_block.test.ts | 17 ++++---- .../get_block_number.test.ts | 8 ++-- .../get_block_transaction_count.test.ts | 16 +++----- .../get_block_uncle_count.test.ts | 13 +++--- .../rpc_method_wrappers/get_chain_id.test.ts | 8 ++-- .../unit/rpc_method_wrappers/get_code.test.ts | 8 ++-- .../rpc_method_wrappers/get_coinbase.test.ts | 6 +-- .../get_fee_history.test.ts | 8 ++-- .../rpc_method_wrappers/get_gas_price.test.ts | 8 ++-- .../rpc_method_wrappers/get_hash_rate.test.ts | 8 ++-- .../unit/rpc_method_wrappers/get_logs.test.ts | 10 ++--- .../get_pending_transactions.test.ts | 12 +++--- .../rpc_method_wrappers/get_proof.test.ts | 8 ++-- .../get_protocol_version.test.ts | 6 +-- .../get_storage_at.test.ts | 8 ++-- .../get_transaction.test.ts | 10 +++-- .../get_transaction_count.test.ts | 8 ++-- .../get_transaction_from_block.test.ts | 16 +++----- .../get_transaction_receipt.test.ts | 10 +++-- .../rpc_method_wrappers/get_uncle.test.ts | 16 ++++---- .../rpc_method_wrappers/is_mining.test.ts | 6 +-- .../rpc_method_wrappers/is_syncing.test.ts | 6 +-- .../send_signed_transaction.test.ts | 40 +++++++++---------- .../send_transaction.test.ts | 40 +++++++++---------- .../unit/rpc_method_wrappers/sign.test.ts | 8 ++-- .../sign_transaction.test.ts | 11 +++-- .../test/unit/rpc_methods/call.test.ts | 6 +-- .../test/unit/rpc_methods/compile_lll.test.ts | 6 +-- .../unit/rpc_methods/compile_serpent.test.ts | 6 +-- .../unit/rpc_methods/compile_solidity.test.ts | 6 +-- .../unit/rpc_methods/estimate_gas.test.ts | 6 +-- .../unit/rpc_methods/get_accounts.test.ts | 5 +-- .../test/unit/rpc_methods/get_balance.test.ts | 6 +-- .../rpc_methods/get_block_by_hash.test.ts | 6 +-- .../rpc_methods/get_block_by_number.test.ts | 6 +-- .../unit/rpc_methods/get_block_number.test.ts | 5 +-- ...et_block_transaction_count_by_hash.test.ts | 6 +-- ..._block_transaction_count_by_number.test.ts | 12 ++++-- .../unit/rpc_methods/get_chain_id.test.ts | 5 +-- .../test/unit/rpc_methods/get_code.test.ts | 6 +-- .../unit/rpc_methods/get_coinbase.test.ts | 5 +-- .../unit/rpc_methods/get_compilers.test.ts | 5 +-- .../unit/rpc_methods/get_fee_history.test.ts | 6 +-- .../rpc_methods/get_filter_changes.test.ts | 6 +-- .../unit/rpc_methods/get_filter_logs.test.ts | 6 +-- .../unit/rpc_methods/get_gas_price.test.ts | 5 +-- .../unit/rpc_methods/get_hash_rate.test.ts | 5 +-- .../test/unit/rpc_methods/get_logs.test.ts | 6 +-- .../test/unit/rpc_methods/get_mining.test.ts | 5 +-- .../unit/rpc_methods/get_node_info.test.ts | 5 +-- .../get_pending_transaction.test.ts | 5 +-- .../test/unit/rpc_methods/get_proof.test.ts | 6 +-- .../rpc_methods/get_protocol_version.test.ts | 5 +-- .../unit/rpc_methods/get_storage_at.test.ts | 6 +-- .../test/unit/rpc_methods/get_syncing.test.ts | 5 +-- ...ransaction_by_block_hash_and_index.test.ts | 12 ++++-- ...nsaction_by_block_number_and_index.test.ts | 12 ++++-- .../get_transaction_by_hash.test.ts | 6 +-- .../rpc_methods/get_transaction_count.test.ts | 6 +-- .../get_transaction_receipt.test.ts | 6 +-- .../get_uncle_by_block_hash_and_index.test.ts | 6 +-- .../get_uncle_count_by_block_hash.test.ts | 6 +-- .../get_uncle_count_by_block_number.test.ts | 6 +-- .../test/unit/rpc_methods/get_work.test.ts | 5 +-- .../unit/rpc_methods/new_block_filter.test.ts | 5 +-- .../test/unit/rpc_methods/new_filter.test.ts | 6 +-- .../new_pending_transaction_filter.test.ts | 5 +-- .../unit/rpc_methods/request_accounts.test.ts | 5 +-- .../rpc_methods/send_raw_transaction.test.ts | 6 +-- .../unit/rpc_methods/send_transaction.test.ts | 6 +-- .../test/unit/rpc_methods/sign.test.ts | 6 +-- .../unit/rpc_methods/sign_transaction.test.ts | 6 +-- .../unit/rpc_methods/submit_hashrate.test.ts | 6 +-- .../test/unit/rpc_methods/submit_work.test.ts | 6 +-- .../unit/rpc_methods/uninstall_filter.test.ts | 6 +-- .../web3_eth_methods_no_parameters.test.ts | 26 ++++++------ .../web3_eth_methods_with_parameters.test.ts | 17 ++++---- .../test/unit/rpc_method_wrappers.test.ts | 14 ++++--- .../web3-net/test/unit/rpc_methods.test.ts | 11 +++-- packages/web3-types/src/web3_api_types.ts | 1 + packages/web3-types/src/web3_base_provider.ts | 2 + packages/web3/src/types.ts | 1 + .../test/integration/web3.accounts.test.ts | 3 +- packages/web3/test/integration/web3.test.ts | 8 +++- 90 files changed, 372 insertions(+), 366 deletions(-) diff --git a/packages/web3-eth/test/integration/eth.test.ts b/packages/web3-eth/test/integration/eth.test.ts index 64b9261847a..681d94cd0a8 100644 --- a/packages/web3-eth/test/integration/eth.test.ts +++ b/packages/web3-eth/test/integration/eth.test.ts @@ -19,7 +19,7 @@ import HttpProvider from 'web3-providers-http'; // eslint-disable-next-line import/no-extraneous-dependencies import { Contract } from 'web3-eth-contract'; // eslint-disable-next-line import/no-extraneous-dependencies -import { SupportedProviders } from 'web3-types'; +import { SupportedProviders, Web3EthExecutionAPI } from 'web3-types'; // eslint-disable-next-line import/no-extraneous-dependencies import IpcProvider from 'web3-providers-ipc'; import { Web3Eth } from '../../src'; @@ -32,7 +32,6 @@ import { isWs, } from '../fixtures/system_test_utils'; import { BasicAbi, BasicBytecode } from '../shared_fixtures/build/Basic'; -import { Web3EthExecutionAPI } from '../../src/web3_eth_execution_api'; describe('eth', () => { let web3Eth: Web3Eth; diff --git a/packages/web3-eth/test/unit/default_transaction_builder.test.ts b/packages/web3-eth/test/unit/default_transaction_builder.test.ts index ac5f09a19ba..ea0e191373e 100644 --- a/packages/web3-eth/test/unit/default_transaction_builder.test.ts +++ b/packages/web3-eth/test/unit/default_transaction_builder.test.ts @@ -23,13 +23,14 @@ import { import { Web3Context } from 'web3-core'; import HttpProvider from 'web3-providers-http'; import { isNullish } from 'web3-validator'; +import { ethRpcMethods } from 'web3-rpc-methods'; + import { Eip1559NotSupportedError, UnableToPopulateNonceError, UnsupportedTransactionTypeError, } from '../../src/errors'; import { defaultTransactionBuilder } from '../../src/utils/transaction_builder'; -import * as rpcMethods from '../../src/rpc_methods'; jest.mock('../../src/rpc_methods'); @@ -111,12 +112,12 @@ describe('defaultTransactionBuilder', () => { let getTransactionCountSpy: jest.SpyInstance; beforeEach(() => { - jest.spyOn(rpcMethods, 'getBlockByNumber').mockResolvedValue(mockBlockData); + jest.spyOn(ethRpcMethods, 'getBlockByNumber').mockResolvedValue(mockBlockData); getTransactionCountSpy = jest - .spyOn(rpcMethods, 'getTransactionCount') + .spyOn(ethRpcMethods, 'getTransactionCount') .mockResolvedValue(expectedNonce); - jest.spyOn(rpcMethods, 'getGasPrice').mockResolvedValue(expectedGasPrice); - jest.spyOn(rpcMethods, 'getChainId').mockResolvedValue(expectedChainId); + jest.spyOn(ethRpcMethods, 'getGasPrice').mockResolvedValue(expectedGasPrice); + jest.spyOn(ethRpcMethods, 'getChainId').mockResolvedValue(expectedChainId); web3Context = new Web3Context(new HttpProvider('http://127.0.0.1')); }); @@ -406,7 +407,7 @@ describe('defaultTransactionBuilder', () => { describe('should populate maxPriorityFeePerGas and maxFeePerGas', () => { it('should throw Eip1559NotSupportedError', async () => { const mockBlockDataNoBaseFeePerGas = { ...mockBlockData, baseFeePerGas: undefined }; - jest.spyOn(rpcMethods, 'getBlockByNumber').mockImplementation( + jest.spyOn(ethRpcMethods, 'getBlockByNumber').mockImplementation( // @ts-expect-error - Mocked implementation doesn't have correct method signature // (i.e. requestManager, blockNumber, hydrated params), but that doesn't matter for the test () => mockBlockDataNoBaseFeePerGas, diff --git a/packages/web3-eth/test/unit/prepare_transaction_for_signing.test.ts b/packages/web3-eth/test/unit/prepare_transaction_for_signing.test.ts index 8d2c6c916e7..bd3b0e360c7 100644 --- a/packages/web3-eth/test/unit/prepare_transaction_for_signing.test.ts +++ b/packages/web3-eth/test/unit/prepare_transaction_for_signing.test.ts @@ -24,8 +24,8 @@ import { FeeMarketEIP1559Transaction, Transaction, } from '@ethereumjs/tx'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import * as rpcMethods from '../../src/rpc_methods'; import { prepareTransactionForSigning } from '../../src/utils/prepare_transaction_for_signing'; import { validTransactions } from '../fixtures/prepare_transaction_for_signing'; @@ -52,7 +52,7 @@ describe('prepareTransactionForSigning', () => { ) => { // @ts-expect-error - Mocked implementation doesn't have correct method signature // (i.e. requestManager, blockNumber, hydrated params), but that doesn't matter for the test - jest.spyOn(rpcMethods, 'getBlockByNumber').mockImplementation(() => mockBlock); + jest.spyOn(ethRpcMethods, 'getBlockByNumber').mockImplementation(() => mockBlock); const ethereumjsTx = await prepareTransactionForSigning( expectedTransaction, diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/call.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/call.test.ts index 795723318f1..aedbbe88d21 100644 --- a/packages/web3-eth/test/unit/rpc_method_wrappers/call.test.ts +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/call.test.ts @@ -15,11 +15,11 @@ You should have received a copy of the GNU Lesser General Public License along with web3.js. If not, see . */ import { Web3Context } from 'web3-core'; +import { Web3EthExecutionAPI } from 'web3-types'; import { isNullish } from 'web3-validator'; import { DEFAULT_RETURN_FORMAT, ETH_DATA_FORMAT, FMT_BYTES, FMT_NUMBER, format } from 'web3-utils'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import { call as rpcMethodsCall } from '../../../src/rpc_methods'; -import { Web3EthExecutionAPI } from '../../../src/web3_eth_execution_api'; import { call } from '../../../src/rpc_method_wrappers'; import { mockRpcResponse, testData } from './fixtures/call'; import { formatTransaction } from '../../../src'; @@ -52,7 +52,7 @@ describe('call', () => { } await call(web3Context, ...inputParameters, DEFAULT_RETURN_FORMAT); - expect(rpcMethodsCall).toHaveBeenCalledWith( + expect(ethRpcMethods.call).toHaveBeenCalledWith( web3Context.requestManager, inputTransactionFormatted, inputBlockNumberFormatted, @@ -69,7 +69,7 @@ describe('call', () => { mockRpcResponse, expectedReturnFormat, ); - (rpcMethodsCall as jest.Mock).mockResolvedValueOnce(mockRpcResponse); + (ethRpcMethods.call as jest.Mock).mockResolvedValueOnce(mockRpcResponse); const result = await call(web3Context, ...inputParameters, expectedReturnFormat); expect(result).toStrictEqual(expectedFormattedResult); diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/estimate_gas.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/estimate_gas.test.ts index 4d6b06a9038..b574ebec098 100644 --- a/packages/web3-eth/test/unit/rpc_method_wrappers/estimate_gas.test.ts +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/estimate_gas.test.ts @@ -17,9 +17,9 @@ along with web3.js. If not, see . import { Web3Context } from 'web3-core'; import { isNullish } from 'web3-validator'; import { DEFAULT_RETURN_FORMAT, ETH_DATA_FORMAT, FMT_BYTES, FMT_NUMBER, format } from 'web3-utils'; +import { Web3EthExecutionAPI } from 'web3-types'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import { estimateGas as rpcMethodsEstimateGas } from '../../../src/rpc_methods'; -import { Web3EthExecutionAPI } from '../../../src/web3_eth_execution_api'; import { estimateGas } from '../../../src/rpc_method_wrappers'; import { mockRpcResponse, testData } from './fixtures/estimate_gas'; import { formatTransaction } from '../../../src'; @@ -52,7 +52,7 @@ describe('call', () => { } await estimateGas(web3Context, ...inputParameters, DEFAULT_RETURN_FORMAT); - expect(rpcMethodsEstimateGas).toHaveBeenCalledWith( + expect(ethRpcMethods.estimateGas).toHaveBeenCalledWith( web3Context.requestManager, inputTransactionFormatted, inputBlockNumberFormatted, @@ -69,7 +69,7 @@ describe('call', () => { mockRpcResponse, expectedReturnFormat, ); - (rpcMethodsEstimateGas as jest.Mock).mockResolvedValueOnce(mockRpcResponse); + (ethRpcMethods.estimateGas as jest.Mock).mockResolvedValueOnce(mockRpcResponse); const result = await estimateGas(web3Context, ...inputParameters, expectedReturnFormat); expect(result).toStrictEqual(expectedFormattedResult); diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_balance.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_balance.test.ts index 57b1e31fd8e..3eb9481c6fc 100644 --- a/packages/web3-eth/test/unit/rpc_method_wrappers/get_balance.test.ts +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_balance.test.ts @@ -17,9 +17,9 @@ along with web3.js. If not, see . import { Web3Context } from 'web3-core'; import { DEFAULT_RETURN_FORMAT, ETH_DATA_FORMAT, FMT_BYTES, FMT_NUMBER, format } from 'web3-utils'; import { isNullish } from 'web3-validator'; +import { Web3EthExecutionAPI } from 'web3-types'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import { getBalance as rpcMethodsGetBalance } from '../../../src/rpc_methods'; -import { Web3EthExecutionAPI } from '../../../src/web3_eth_execution_api'; import { getBalance } from '../../../src/rpc_method_wrappers'; import { mockRpcResponse, testData } from './fixtures/get_balance'; @@ -50,7 +50,7 @@ describe('getBalance', () => { } await getBalance(web3Context, ...inputParameters, DEFAULT_RETURN_FORMAT); - expect(rpcMethodsGetBalance).toHaveBeenCalledWith( + expect(ethRpcMethods.getBalance).toHaveBeenCalledWith( web3Context.requestManager, inputAddress, inputBlockNumberFormatted, @@ -67,7 +67,7 @@ describe('getBalance', () => { mockRpcResponse, expectedReturnFormat, ); - (rpcMethodsGetBalance as jest.Mock).mockResolvedValueOnce(mockRpcResponse); + (ethRpcMethods.getBalance as jest.Mock).mockResolvedValueOnce(mockRpcResponse); const result = await getBalance(web3Context, ...inputParameters, expectedReturnFormat); expect(result).toBe(expectedFormattedResult); diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_block.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_block.test.ts index db3a0bcffca..7b6e60632d1 100644 --- a/packages/web3-eth/test/unit/rpc_method_wrappers/get_block.test.ts +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_block.test.ts @@ -17,10 +17,9 @@ along with web3.js. If not, see . import { Web3Context } from 'web3-core'; import { DEFAULT_RETURN_FORMAT, ETH_DATA_FORMAT, FMT_BYTES, FMT_NUMBER, format } from 'web3-utils'; import { isBytes, isNullish } from 'web3-validator'; -import { Bytes } from 'web3-types'; +import { Bytes, Web3EthExecutionAPI } from 'web3-types'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import { getBlockByHash, getBlockByNumber } from '../../../src/rpc_methods'; -import { Web3EthExecutionAPI } from '../../../src/web3_eth_execution_api'; import { getBlock } from '../../../src/rpc_method_wrappers'; import { mockRpcResponse, mockRpcResponseHydrated, testData } from './fixtures/get_block'; import { blockSchema } from '../../../src/schemas'; @@ -51,11 +50,9 @@ describe('getBlock', () => { } await getBlock(web3Context, ...inputParameters, DEFAULT_RETURN_FORMAT); - expect(inputBlockIsBytes ? getBlockByHash : getBlockByNumber).toHaveBeenCalledWith( - web3Context.requestManager, - inputBlockFormatted, - hydrated, - ); + expect( + inputBlockIsBytes ? ethRpcMethods.getBlockByHash : ethRpcMethods.getBlockByNumber, + ).toHaveBeenCalledWith(web3Context.requestManager, inputBlockFormatted, hydrated); }, ); @@ -72,7 +69,9 @@ describe('getBlock', () => { ); const inputBlockIsBytes = isBytes(inputBlock as Bytes); ( - (inputBlockIsBytes ? getBlockByHash : getBlockByNumber) as jest.Mock + (inputBlockIsBytes + ? ethRpcMethods.getBlockByHash + : ethRpcMethods.getBlockByNumber) as jest.Mock ).mockResolvedValueOnce(expectedMockRpcResponse); const result = await getBlock(web3Context, ...inputParameters, expectedReturnFormat); diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_block_number.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_block_number.test.ts index 1fdb0843748..148223eef3f 100644 --- a/packages/web3-eth/test/unit/rpc_method_wrappers/get_block_number.test.ts +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_block_number.test.ts @@ -16,9 +16,9 @@ along with web3.js. If not, see . */ import { Web3Context } from 'web3-core'; import { DEFAULT_RETURN_FORMAT, FMT_BYTES, FMT_NUMBER, format } from 'web3-utils'; +import { Web3EthExecutionAPI } from 'web3-types'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import { getBlockNumber as rpcMethodsGetBlockNumber } from '../../../src/rpc_methods'; -import { Web3EthExecutionAPI } from '../../../src/web3_eth_execution_api'; import { getBlockNumber } from '../../../src/rpc_method_wrappers'; jest.mock('../../../src/rpc_methods'); @@ -32,7 +32,7 @@ describe('getBlockNumber', () => { it('should call rpcMethods.getBlockNumber with expected parameters', async () => { await getBlockNumber(web3Context, DEFAULT_RETURN_FORMAT); - expect(rpcMethodsGetBlockNumber).toHaveBeenCalledWith(web3Context.requestManager); + expect(ethRpcMethods.getBlockNumber).toHaveBeenCalledWith(web3Context.requestManager); }); it('should format mockRpcResponse using provided return format', async () => { @@ -43,7 +43,7 @@ describe('getBlockNumber', () => { mockRpcResponse, expectedReturnFormat, ); - (rpcMethodsGetBlockNumber as jest.Mock).mockResolvedValueOnce(mockRpcResponse); + (ethRpcMethods.getBlockNumber as jest.Mock).mockResolvedValueOnce(mockRpcResponse); const result = await getBlockNumber(web3Context, expectedReturnFormat); expect(result).toBe(expectedFormattedResult); diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_block_transaction_count.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_block_transaction_count.test.ts index 3f875750f19..14812d7ffc9 100644 --- a/packages/web3-eth/test/unit/rpc_method_wrappers/get_block_transaction_count.test.ts +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_block_transaction_count.test.ts @@ -17,13 +17,9 @@ along with web3.js. If not, see . import { Web3Context } from 'web3-core'; import { DEFAULT_RETURN_FORMAT, ETH_DATA_FORMAT, FMT_BYTES, FMT_NUMBER, format } from 'web3-utils'; import { isBytes, isNullish } from 'web3-validator'; -import { Bytes } from 'web3-types'; +import { Bytes, Web3EthExecutionAPI } from 'web3-types'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import { - getBlockTransactionCountByHash, - getBlockTransactionCountByNumber, -} from '../../../src/rpc_methods'; -import { Web3EthExecutionAPI } from '../../../src/web3_eth_execution_api'; import { getBlockTransactionCount } from '../../../src/rpc_method_wrappers'; import { mockRpcResponse, testData } from './fixtures/get_block_transaction_count'; @@ -55,8 +51,8 @@ describe('getBlockTransactionCount', () => { await getBlockTransactionCount(web3Context, ...inputParameters, DEFAULT_RETURN_FORMAT); expect( inputBlockIsBytes - ? getBlockTransactionCountByHash - : getBlockTransactionCountByNumber, + ? ethRpcMethods.getBlockTransactionCountByHash + : ethRpcMethods.getBlockTransactionCountByNumber, ).toHaveBeenCalledWith(web3Context.requestManager, inputBlockFormatted); }, ); @@ -74,8 +70,8 @@ describe('getBlockTransactionCount', () => { const inputBlockIsBytes = isBytes(inputBlock as Bytes); ( (inputBlockIsBytes - ? getBlockTransactionCountByHash - : getBlockTransactionCountByNumber) as jest.Mock + ? ethRpcMethods.getBlockTransactionCountByHash + : ethRpcMethods.getBlockTransactionCountByNumber) as jest.Mock ).mockResolvedValueOnce(mockRpcResponse); const result = await getBlockTransactionCount( diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_block_uncle_count.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_block_uncle_count.test.ts index c3db67ccb89..96603e6252c 100644 --- a/packages/web3-eth/test/unit/rpc_method_wrappers/get_block_uncle_count.test.ts +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_block_uncle_count.test.ts @@ -17,10 +17,9 @@ along with web3.js. If not, see . import { Web3Context } from 'web3-core'; import { DEFAULT_RETURN_FORMAT, ETH_DATA_FORMAT, FMT_BYTES, FMT_NUMBER, format } from 'web3-utils'; import { isBytes, isNullish } from 'web3-validator'; -import { Bytes } from 'web3-types'; +import { Bytes, Web3EthExecutionAPI } from 'web3-types'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import { getUncleCountByBlockHash, getUncleCountByBlockNumber } from '../../../src/rpc_methods'; -import { Web3EthExecutionAPI } from '../../../src/web3_eth_execution_api'; import { getBlockUncleCount } from '../../../src/rpc_method_wrappers'; import { mockRpcResponse, testData } from './fixtures/get_block_uncle_count'; @@ -51,7 +50,9 @@ describe('getBlockUncleCount', () => { await getBlockUncleCount(web3Context, inputBlock, DEFAULT_RETURN_FORMAT); expect( - inputBlockIsBytes ? getUncleCountByBlockHash : getUncleCountByBlockNumber, + inputBlockIsBytes + ? ethRpcMethods.getUncleCountByBlockHash + : ethRpcMethods.getUncleCountByBlockNumber, ).toHaveBeenCalledWith(web3Context.requestManager, inputBlockFormatted); }, ); @@ -69,8 +70,8 @@ describe('getBlockUncleCount', () => { const inputBlockIsBytes = isBytes(inputBlock as Bytes); ( (inputBlockIsBytes - ? getUncleCountByBlockHash - : getUncleCountByBlockNumber) as jest.Mock + ? ethRpcMethods.getUncleCountByBlockHash + : ethRpcMethods.getUncleCountByBlockNumber) as jest.Mock ).mockResolvedValueOnce(mockRpcResponse); const result = await getBlockUncleCount(web3Context, inputBlock, expectedReturnFormat); diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_chain_id.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_chain_id.test.ts index 6adefc7616f..5f1a22a7c74 100644 --- a/packages/web3-eth/test/unit/rpc_method_wrappers/get_chain_id.test.ts +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_chain_id.test.ts @@ -16,9 +16,9 @@ along with web3.js. If not, see . */ import { Web3Context } from 'web3-core'; import { DEFAULT_RETURN_FORMAT, FMT_BYTES, FMT_NUMBER, format } from 'web3-utils'; +import { Web3EthExecutionAPI } from 'web3-types'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import { getChainId as rpcMethodsGetChainId } from '../../../src/rpc_methods'; -import { Web3EthExecutionAPI } from '../../../src/web3_eth_execution_api'; import { getChainId } from '../../../src/rpc_method_wrappers'; jest.mock('../../../src/rpc_methods'); @@ -32,7 +32,7 @@ describe('getChainId', () => { it('should call rpcMethods.getBlockNumber with expected parameters', async () => { await getChainId(web3Context, DEFAULT_RETURN_FORMAT); - expect(rpcMethodsGetChainId).toHaveBeenCalledWith(web3Context.requestManager); + expect(ethRpcMethods.getChainId).toHaveBeenCalledWith(web3Context.requestManager); }); it('should format mockRpcResponse using provided return format', async () => { @@ -43,7 +43,7 @@ describe('getChainId', () => { mockRpcResponse, expectedReturnFormat, ); - (rpcMethodsGetChainId as jest.Mock).mockResolvedValueOnce(mockRpcResponse); + (ethRpcMethods.getChainId as jest.Mock).mockResolvedValueOnce(mockRpcResponse); const result = await getChainId(web3Context, expectedReturnFormat); expect(result).toBe(expectedFormattedResult); diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_code.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_code.test.ts index 597a598c7d4..eb685153333 100644 --- a/packages/web3-eth/test/unit/rpc_method_wrappers/get_code.test.ts +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_code.test.ts @@ -17,9 +17,9 @@ along with web3.js. If not, see . import { Web3Context } from 'web3-core'; import { DEFAULT_RETURN_FORMAT, ETH_DATA_FORMAT, FMT_BYTES, FMT_NUMBER, format } from 'web3-utils'; import { isNullish } from 'web3-validator'; +import { Web3EthExecutionAPI } from 'web3-types'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import { getCode as rpcMethodsGetCode } from '../../../src/rpc_methods'; -import { Web3EthExecutionAPI } from '../../../src/web3_eth_execution_api'; import { getCode } from '../../../src/rpc_method_wrappers'; import { mockRpcResponse, testData } from './fixtures/get_code'; @@ -50,7 +50,7 @@ describe('getCode', () => { } await getCode(web3Context, ...inputParameters, DEFAULT_RETURN_FORMAT); - expect(rpcMethodsGetCode).toHaveBeenCalledWith( + expect(ethRpcMethods.getCode).toHaveBeenCalledWith( web3Context.requestManager, inputAddress, inputBlockNumberFormatted, @@ -67,7 +67,7 @@ describe('getCode', () => { mockRpcResponse, expectedReturnFormat, ); - (rpcMethodsGetCode as jest.Mock).mockResolvedValueOnce(mockRpcResponse); + (ethRpcMethods.getCode as jest.Mock).mockResolvedValueOnce(mockRpcResponse); const result = await getCode(web3Context, ...inputParameters, expectedReturnFormat); expect(result).toStrictEqual(expectedFormattedResult); diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_coinbase.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_coinbase.test.ts index 45f5b39b801..1a351a22bda 100644 --- a/packages/web3-eth/test/unit/rpc_method_wrappers/get_coinbase.test.ts +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_coinbase.test.ts @@ -15,9 +15,9 @@ You should have received a copy of the GNU Lesser General Public License along with web3.js. If not, see . */ import { Web3Context } from 'web3-core'; +import { Web3EthExecutionAPI } from 'web3-types'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import { getCoinbase as rpcMethodsGetCoinbase } from '../../../src/rpc_methods'; -import { Web3EthExecutionAPI } from '../../../src/web3_eth_execution_api'; import { getCoinbase } from '../../../src/rpc_method_wrappers'; jest.mock('../../../src/rpc_methods'); @@ -31,6 +31,6 @@ describe('getCoinbase', () => { it('should call rpcMethods.getCoinbase with expected parameters', async () => { await getCoinbase(web3Context); - expect(rpcMethodsGetCoinbase).toHaveBeenCalledWith(web3Context.requestManager); + expect(ethRpcMethods.getCoinbase).toHaveBeenCalledWith(web3Context.requestManager); }); }); diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_fee_history.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_fee_history.test.ts index ac7b16277a0..aa1bf09ec05 100644 --- a/packages/web3-eth/test/unit/rpc_method_wrappers/get_fee_history.test.ts +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_fee_history.test.ts @@ -17,9 +17,9 @@ along with web3.js. If not, see . import { Web3Context } from 'web3-core'; import { DEFAULT_RETURN_FORMAT, ETH_DATA_FORMAT, FMT_BYTES, FMT_NUMBER, format } from 'web3-utils'; import { isNullish } from 'web3-validator'; +import { Web3EthExecutionAPI } from 'web3-types'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import { getFeeHistory as rpcMethodsGetFeeHistory } from '../../../src/rpc_methods'; -import { Web3EthExecutionAPI } from '../../../src/web3_eth_execution_api'; import { getFeeHistory } from '../../../src/rpc_method_wrappers'; import { mockRpcResponse, testData } from './fixtures/get_fee_history'; import { feeHistorySchema } from '../../../src/schemas'; @@ -67,7 +67,7 @@ describe('getFeeHistory', () => { } await getFeeHistory(web3Context, ...inputParameters, DEFAULT_RETURN_FORMAT); - expect(rpcMethodsGetFeeHistory).toHaveBeenCalledWith( + expect(ethRpcMethods.getFeeHistory).toHaveBeenCalledWith( web3Context.requestManager, inputBlockCountFormatted, inputNewestBlockFormatted, @@ -85,7 +85,7 @@ describe('getFeeHistory', () => { mockRpcResponse, expectedReturnFormat, ); - (rpcMethodsGetFeeHistory as jest.Mock).mockResolvedValueOnce(mockRpcResponse); + (ethRpcMethods.getFeeHistory as jest.Mock).mockResolvedValueOnce(mockRpcResponse); const result = await getFeeHistory( web3Context, diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_gas_price.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_gas_price.test.ts index 29e67bbf7a1..f35fb02ebd2 100644 --- a/packages/web3-eth/test/unit/rpc_method_wrappers/get_gas_price.test.ts +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_gas_price.test.ts @@ -16,9 +16,9 @@ along with web3.js. If not, see . */ import { Web3Context } from 'web3-core'; import { DEFAULT_RETURN_FORMAT, FMT_BYTES, FMT_NUMBER, format } from 'web3-utils'; +import { Web3EthExecutionAPI } from 'web3-types'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import { getGasPrice as rpcMethodsGetGasPrice } from '../../../src/rpc_methods'; -import { Web3EthExecutionAPI } from '../../../src/web3_eth_execution_api'; import { getGasPrice } from '../../../src/rpc_method_wrappers'; jest.mock('../../../src/rpc_methods'); @@ -32,7 +32,7 @@ describe('getGasPrice', () => { it('should call rpcMethods.getGasPrice with expected parameters', async () => { await getGasPrice(web3Context, DEFAULT_RETURN_FORMAT); - expect(rpcMethodsGetGasPrice).toHaveBeenCalledWith(web3Context.requestManager); + expect(ethRpcMethods.getGasPrice).toHaveBeenCalledWith(web3Context.requestManager); }); it('should format mockRpcResponse using provided return format', async () => { @@ -43,7 +43,7 @@ describe('getGasPrice', () => { mockRpcResponse, expectedReturnFormat, ); - (rpcMethodsGetGasPrice as jest.Mock).mockResolvedValueOnce(mockRpcResponse); + (ethRpcMethods.getGasPrice as jest.Mock).mockResolvedValueOnce(mockRpcResponse); const result = await getGasPrice(web3Context, expectedReturnFormat); expect(result).toBe(expectedFormattedResult); diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_hash_rate.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_hash_rate.test.ts index 3c506326525..eee7215553e 100644 --- a/packages/web3-eth/test/unit/rpc_method_wrappers/get_hash_rate.test.ts +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_hash_rate.test.ts @@ -16,9 +16,9 @@ along with web3.js. If not, see . */ import { Web3Context } from 'web3-core'; import { DEFAULT_RETURN_FORMAT, FMT_BYTES, FMT_NUMBER, format } from 'web3-utils'; +import { Web3EthExecutionAPI } from 'web3-types'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import { getHashRate as rpcMethodsGetHashRate } from '../../../src/rpc_methods'; -import { Web3EthExecutionAPI } from '../../../src/web3_eth_execution_api'; import { getHashRate } from '../../../src/rpc_method_wrappers'; jest.mock('../../../src/rpc_methods'); @@ -32,7 +32,7 @@ describe('getHashRate', () => { it('should call rpcMethods.getHashRate with expected parameters', async () => { await getHashRate(web3Context, DEFAULT_RETURN_FORMAT); - expect(rpcMethodsGetHashRate).toHaveBeenCalledWith(web3Context.requestManager); + expect(ethRpcMethods.getHashRate).toHaveBeenCalledWith(web3Context.requestManager); }); it('should format return value using provided return format', async () => { @@ -43,7 +43,7 @@ describe('getHashRate', () => { mockRpcResponse, expectedReturnFormat, ); - (rpcMethodsGetHashRate as jest.Mock).mockResolvedValueOnce(mockRpcResponse); + (ethRpcMethods.getHashRate as jest.Mock).mockResolvedValueOnce(mockRpcResponse); const result = await getHashRate(web3Context, expectedReturnFormat); expect(result).toBe(expectedFormattedResult); diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_logs.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_logs.test.ts index 2f5354ecebf..6b600b71258 100644 --- a/packages/web3-eth/test/unit/rpc_method_wrappers/get_logs.test.ts +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_logs.test.ts @@ -16,9 +16,9 @@ along with web3.js. If not, see . */ import { Web3Context } from 'web3-core'; import { DEFAULT_RETURN_FORMAT, FMT_BYTES, FMT_NUMBER, format } from 'web3-utils'; +import { Web3EthExecutionAPI } from 'web3-types'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import { getLogs as rpcMethodsGetLogs } from '../../../src/rpc_methods'; -import { Web3EthExecutionAPI } from '../../../src/web3_eth_execution_api'; import { getLogs } from '../../../src/rpc_method_wrappers'; import { mockRpcResponse, testData } from './fixtures/get_logs'; import { logSchema } from '../../../src/schemas'; @@ -35,9 +35,9 @@ describe('getLogs', () => { it.each(testData)( `should call rpcMethods.getLogs with expected parameters\nTitle: %s\nInput parameters: %s\n`, async (_, inputParameters) => { - (rpcMethodsGetLogs as jest.Mock).mockResolvedValueOnce(mockRpcResponse); + (ethRpcMethods.getLogs as jest.Mock).mockResolvedValueOnce(mockRpcResponse); await getLogs(web3Context, ...inputParameters, DEFAULT_RETURN_FORMAT); - expect(rpcMethodsGetLogs).toHaveBeenCalledWith( + expect(ethRpcMethods.getLogs).toHaveBeenCalledWith( web3Context.requestManager, ...inputParameters, ); @@ -55,7 +55,7 @@ describe('getLogs', () => { return format(logSchema, res, expectedReturnFormat); }); - (rpcMethodsGetLogs as jest.Mock).mockResolvedValueOnce(mockRpcResponse); + (ethRpcMethods.getLogs as jest.Mock).mockResolvedValueOnce(mockRpcResponse); const result = await getLogs(web3Context, ...inputParameters, expectedReturnFormat); expect(result).toStrictEqual(expectedFormattedResult); diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_pending_transactions.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_pending_transactions.test.ts index d0ef11ce082..54958e6d8f9 100644 --- a/packages/web3-eth/test/unit/rpc_method_wrappers/get_pending_transactions.test.ts +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_pending_transactions.test.ts @@ -16,9 +16,9 @@ along with web3.js. If not, see . */ import { Web3Context } from 'web3-core'; import { DEFAULT_RETURN_FORMAT, FMT_BYTES, FMT_NUMBER } from 'web3-utils'; +import { Web3EthExecutionAPI } from 'web3-types'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import { getPendingTransactions as rpcMethodsGetPendingTransactions } from '../../../src/rpc_methods'; -import { Web3EthExecutionAPI } from '../../../src/web3_eth_execution_api'; import { getPendingTransactions } from '../../../src/rpc_method_wrappers'; import { formatTransaction } from '../../../src'; import { mockRpcResponse } from './fixtures/get_pending_transactions'; @@ -33,9 +33,11 @@ describe('getPendingTransactions', () => { }); it('should call rpcMethods.getPendingTransactions with expected parameters', async () => { - (rpcMethodsGetPendingTransactions as jest.Mock).mockResolvedValueOnce(mockRpcResponse); + (ethRpcMethods.getPendingTransactions as jest.Mock).mockResolvedValueOnce(mockRpcResponse); await getPendingTransactions(web3Context, DEFAULT_RETURN_FORMAT); - expect(rpcMethodsGetPendingTransactions).toHaveBeenCalledWith(web3Context.requestManager); + expect(ethRpcMethods.getPendingTransactions).toHaveBeenCalledWith( + web3Context.requestManager, + ); }); it('should format return value using provided return format', async () => { @@ -43,7 +45,7 @@ describe('getPendingTransactions', () => { const expectedFormattedResult = mockRpcResponse.map(transaction => formatTransaction(transaction, expectedReturnFormat), ); - (rpcMethodsGetPendingTransactions as jest.Mock).mockResolvedValueOnce(mockRpcResponse); + (ethRpcMethods.getPendingTransactions as jest.Mock).mockResolvedValueOnce(mockRpcResponse); const result = await getPendingTransactions(web3Context, expectedReturnFormat); expect(result).toStrictEqual(expectedFormattedResult); diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_proof.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_proof.test.ts index f8d5b6469e8..3e36b06f602 100644 --- a/packages/web3-eth/test/unit/rpc_method_wrappers/get_proof.test.ts +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_proof.test.ts @@ -17,9 +17,9 @@ along with web3.js. If not, see . import { Web3Context } from 'web3-core'; import { DEFAULT_RETURN_FORMAT, ETH_DATA_FORMAT, FMT_BYTES, FMT_NUMBER, format } from 'web3-utils'; import { isNullish } from 'web3-validator'; +import { Web3EthExecutionAPI } from 'web3-types'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import { getProof as rpcMethodsGetProof } from '../../../src/rpc_methods'; -import { Web3EthExecutionAPI } from '../../../src/web3_eth_execution_api'; import { getProof } from '../../../src/rpc_method_wrappers'; import { mockRpcResponse, testData } from './fixtures/get_proof'; import { accountSchema } from '../../../src/schemas'; @@ -54,7 +54,7 @@ describe('getProof', () => { } await getProof(web3Context, ...inputParameters, DEFAULT_RETURN_FORMAT); - expect(rpcMethodsGetProof).toHaveBeenCalledWith( + expect(ethRpcMethods.getProof).toHaveBeenCalledWith( web3Context.requestManager, inputAddress, inputStorageKeyFormatted, @@ -72,7 +72,7 @@ describe('getProof', () => { mockRpcResponse, expectedReturnFormat, ); - (rpcMethodsGetProof as jest.Mock).mockResolvedValueOnce(mockRpcResponse); + (ethRpcMethods.getProof as jest.Mock).mockResolvedValueOnce(mockRpcResponse); const result = await getProof(web3Context, ...inputParameters, expectedReturnFormat); expect(result).toStrictEqual(expectedFormattedResult); diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_protocol_version.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_protocol_version.test.ts index 5b8c037ffbb..55a8f555ab6 100644 --- a/packages/web3-eth/test/unit/rpc_method_wrappers/get_protocol_version.test.ts +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_protocol_version.test.ts @@ -15,9 +15,9 @@ You should have received a copy of the GNU Lesser General Public License along with web3.js. If not, see . */ import { Web3Context } from 'web3-core'; +import { Web3EthExecutionAPI } from 'web3-types'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import { getProtocolVersion as rpcMethodsGetProtocolVersion } from '../../../src/rpc_methods'; -import { Web3EthExecutionAPI } from '../../../src/web3_eth_execution_api'; import { getProtocolVersion } from '../../../src/rpc_method_wrappers'; jest.mock('../../../src/rpc_methods'); @@ -31,6 +31,6 @@ describe('getProtocolVersion', () => { it('should call rpcMethods.getProtocolVersion with expected parameters', async () => { await getProtocolVersion(web3Context); - expect(rpcMethodsGetProtocolVersion).toHaveBeenCalledWith(web3Context.requestManager); + expect(ethRpcMethods.getProtocolVersion).toHaveBeenCalledWith(web3Context.requestManager); }); }); diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_storage_at.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_storage_at.test.ts index 38d90d51d0c..a542b2aaed9 100644 --- a/packages/web3-eth/test/unit/rpc_method_wrappers/get_storage_at.test.ts +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_storage_at.test.ts @@ -17,9 +17,9 @@ along with web3.js. If not, see . import { Web3Context } from 'web3-core'; import { DEFAULT_RETURN_FORMAT, ETH_DATA_FORMAT, FMT_BYTES, FMT_NUMBER, format } from 'web3-utils'; import { isNullish } from 'web3-validator'; +import { Web3EthExecutionAPI } from 'web3-types'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import { getStorageAt as rpcMethodsGetStorageAt } from '../../../src/rpc_methods'; -import { Web3EthExecutionAPI } from '../../../src/web3_eth_execution_api'; import { getStorageAt } from '../../../src/rpc_method_wrappers'; import { mockRpcResponse, testData } from './fixtures/get_storage_at'; @@ -55,7 +55,7 @@ describe('getStorageAt', () => { } await getStorageAt(web3Context, ...inputParameters, DEFAULT_RETURN_FORMAT); - expect(rpcMethodsGetStorageAt).toHaveBeenCalledWith( + expect(ethRpcMethods.getStorageAt).toHaveBeenCalledWith( web3Context.requestManager, inputAddress, inputStorageSlotFormatted, @@ -73,7 +73,7 @@ describe('getStorageAt', () => { mockRpcResponse, expectedReturnFormat, ); - (rpcMethodsGetStorageAt as jest.Mock).mockResolvedValueOnce(mockRpcResponse); + (ethRpcMethods.getStorageAt as jest.Mock).mockResolvedValueOnce(mockRpcResponse); const result = await getStorageAt( web3Context, diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_transaction.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_transaction.test.ts index 1cbac1163a6..58f9c737c41 100644 --- a/packages/web3-eth/test/unit/rpc_method_wrappers/get_transaction.test.ts +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_transaction.test.ts @@ -16,9 +16,9 @@ along with web3.js. If not, see . */ import { Web3Context } from 'web3-core'; import { DEFAULT_RETURN_FORMAT, FMT_BYTES, FMT_NUMBER, format } from 'web3-utils'; +import { Web3EthExecutionAPI } from 'web3-types'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import { getTransactionByHash } from '../../../src/rpc_methods'; -import { Web3EthExecutionAPI } from '../../../src/web3_eth_execution_api'; import { getTransaction } from '../../../src/rpc_method_wrappers'; import { mockRpcResponse, testData } from './fixtures/get_transaction'; import { formatTransaction } from '../../../src'; @@ -43,7 +43,7 @@ describe('getTransaction', () => { ); await getTransaction(web3Context, ...inputParameters, DEFAULT_RETURN_FORMAT); - expect(getTransactionByHash).toHaveBeenCalledWith( + expect(ethRpcMethods.getTransactionByHash).toHaveBeenCalledWith( web3Context.requestManager, inputTransactionHashFormatted, ); @@ -58,7 +58,9 @@ describe('getTransaction', () => { mockRpcResponse, expectedReturnFormat, ); - (getTransactionByHash as jest.Mock).mockResolvedValueOnce(mockRpcResponse); + (ethRpcMethods.getTransactionByHash as jest.Mock).mockResolvedValueOnce( + mockRpcResponse, + ); const result = await getTransaction( web3Context, diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_transaction_count.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_transaction_count.test.ts index 3f9febf2298..06cbc5b78bd 100644 --- a/packages/web3-eth/test/unit/rpc_method_wrappers/get_transaction_count.test.ts +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_transaction_count.test.ts @@ -17,9 +17,9 @@ along with web3.js. If not, see . import { Web3Context } from 'web3-core'; import { DEFAULT_RETURN_FORMAT, ETH_DATA_FORMAT, FMT_BYTES, FMT_NUMBER, format } from 'web3-utils'; import { isNullish } from 'web3-validator'; +import { Web3EthExecutionAPI } from 'web3-types'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import { getTransactionCount as rpcMethodsGetTransactionCount } from '../../../src/rpc_methods'; -import { Web3EthExecutionAPI } from '../../../src/web3_eth_execution_api'; import { getTransactionCount } from '../../../src/rpc_method_wrappers'; import { mockRpcResponse, testData } from './fixtures/get_transaction_count'; @@ -50,7 +50,7 @@ describe('getTransactionCount', () => { } await getTransactionCount(web3Context, ...inputParameters, DEFAULT_RETURN_FORMAT); - expect(rpcMethodsGetTransactionCount).toHaveBeenCalledWith( + expect(ethRpcMethods.getTransactionCount).toHaveBeenCalledWith( web3Context.requestManager, inputAddress, inputBlockNumberFormatted, @@ -67,7 +67,7 @@ describe('getTransactionCount', () => { mockRpcResponse, expectedReturnFormat, ); - (rpcMethodsGetTransactionCount as jest.Mock).mockResolvedValueOnce(mockRpcResponse); + (ethRpcMethods.getTransactionCount as jest.Mock).mockResolvedValueOnce(mockRpcResponse); const result = await getTransactionCount( web3Context, diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_transaction_from_block.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_transaction_from_block.test.ts index 6b67aa9d2cf..edaa6f66742 100644 --- a/packages/web3-eth/test/unit/rpc_method_wrappers/get_transaction_from_block.test.ts +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_transaction_from_block.test.ts @@ -16,14 +16,10 @@ along with web3.js. If not, see . */ import { Web3Context } from 'web3-core'; import { DEFAULT_RETURN_FORMAT, ETH_DATA_FORMAT, FMT_BYTES, FMT_NUMBER, format } from 'web3-utils'; -import { Bytes } from 'web3-types'; +import { Bytes, Web3EthExecutionAPI } from 'web3-types'; import { isBytes, isNullish } from 'web3-validator'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import { - getTransactionByBlockHashAndIndex, - getTransactionByBlockNumberAndIndex, -} from '../../../src/rpc_methods'; -import { Web3EthExecutionAPI } from '../../../src/web3_eth_execution_api'; import { getTransactionFromBlock } from '../../../src/rpc_method_wrappers'; import { mockRpcResponse, testData } from './fixtures/get_transaction_from_block'; import { formatTransaction } from '../../../src'; @@ -61,8 +57,8 @@ describe('getTransactionFromBlock', () => { await getTransactionFromBlock(web3Context, ...inputParameters, DEFAULT_RETURN_FORMAT); expect( inputBlockIsBytes - ? getTransactionByBlockHashAndIndex - : getTransactionByBlockNumberAndIndex, + ? ethRpcMethods.getTransactionByBlockHashAndIndex + : ethRpcMethods.getTransactionByBlockNumberAndIndex, ).toHaveBeenCalledWith( web3Context.requestManager, inputBlockFormatted, @@ -83,8 +79,8 @@ describe('getTransactionFromBlock', () => { const inputBlockIsBytes = isBytes(inputBlock as Bytes); ( (inputBlockIsBytes - ? getTransactionByBlockHashAndIndex - : getTransactionByBlockNumberAndIndex) as jest.Mock + ? ethRpcMethods.getTransactionByBlockHashAndIndex + : ethRpcMethods.getTransactionByBlockNumberAndIndex) as jest.Mock ).mockResolvedValueOnce(mockRpcResponse); const result = await getTransactionFromBlock( diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_transaction_receipt.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_transaction_receipt.test.ts index 3124ac05e92..11b084ed18f 100644 --- a/packages/web3-eth/test/unit/rpc_method_wrappers/get_transaction_receipt.test.ts +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_transaction_receipt.test.ts @@ -16,9 +16,9 @@ along with web3.js. If not, see . */ import { Web3Context } from 'web3-core'; import { DEFAULT_RETURN_FORMAT, FMT_BYTES, FMT_NUMBER, format } from 'web3-utils'; +import { Web3EthExecutionAPI } from 'web3-types'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import { getTransactionReceipt as rpcMethodsGetTransactionReceipt } from '../../../src/rpc_methods'; -import { Web3EthExecutionAPI } from '../../../src/web3_eth_execution_api'; import { getTransactionReceipt } from '../../../src/rpc_method_wrappers'; import { mockRpcResponse, testData } from './fixtures/get_transaction_receipt'; import { transactionReceiptSchema } from '../../../src/schemas'; @@ -43,7 +43,7 @@ describe('getTransactionReceipt', () => { ); await getTransactionReceipt(web3Context, ...inputParameters, DEFAULT_RETURN_FORMAT); - expect(rpcMethodsGetTransactionReceipt).toHaveBeenCalledWith( + expect(ethRpcMethods.getTransactionReceipt).toHaveBeenCalledWith( web3Context.requestManager, inputTransactionHashFormatted, ); @@ -59,7 +59,9 @@ describe('getTransactionReceipt', () => { mockRpcResponse, expectedReturnFormat, ); - (rpcMethodsGetTransactionReceipt as jest.Mock).mockResolvedValueOnce(mockRpcResponse); + (ethRpcMethods.getTransactionReceipt as jest.Mock).mockResolvedValueOnce( + mockRpcResponse, + ); const result = await getTransactionReceipt( web3Context, diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_uncle.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_uncle.test.ts index ceaebd5027e..2f43c243b1e 100644 --- a/packages/web3-eth/test/unit/rpc_method_wrappers/get_uncle.test.ts +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_uncle.test.ts @@ -17,13 +17,9 @@ along with web3.js. If not, see . import { Web3Context } from 'web3-core'; import { DEFAULT_RETURN_FORMAT, ETH_DATA_FORMAT, FMT_BYTES, FMT_NUMBER, format } from 'web3-utils'; import { isBytes, isNullish } from 'web3-validator'; -import { Bytes } from 'web3-types'; +import { Bytes, Web3EthExecutionAPI } from 'web3-types'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import { - getUncleByBlockHashAndIndex, - getUncleByBlockNumberAndIndex, -} from '../../../src/rpc_methods'; -import { Web3EthExecutionAPI } from '../../../src/web3_eth_execution_api'; import { getUncle } from '../../../src/rpc_method_wrappers'; import { mockRpcResponse, testData } from './fixtures/get_uncle'; import { blockSchema } from '../../../src/schemas'; @@ -60,7 +56,9 @@ describe('getUncle', () => { await getUncle(web3Context, ...inputParameters, DEFAULT_RETURN_FORMAT); expect( - inputBlockIsBytes ? getUncleByBlockHashAndIndex : getUncleByBlockNumberAndIndex, + inputBlockIsBytes + ? ethRpcMethods.getUncleByBlockHashAndIndex + : ethRpcMethods.getUncleByBlockNumberAndIndex, ).toHaveBeenCalledWith( web3Context.requestManager, inputBlockFormatted, @@ -82,8 +80,8 @@ describe('getUncle', () => { const inputBlockIsBytes = isBytes(inputBlock as Bytes); ( (inputBlockIsBytes - ? getUncleByBlockHashAndIndex - : getUncleByBlockNumberAndIndex) as jest.Mock + ? ethRpcMethods.getUncleByBlockHashAndIndex + : ethRpcMethods.getUncleByBlockNumberAndIndex) as jest.Mock ).mockResolvedValueOnce(mockRpcResponse); const result = await getUncle(web3Context, ...inputParameters, expectedReturnFormat); diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/is_mining.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/is_mining.test.ts index 978d84b961e..71e8198171c 100644 --- a/packages/web3-eth/test/unit/rpc_method_wrappers/is_mining.test.ts +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/is_mining.test.ts @@ -15,9 +15,9 @@ You should have received a copy of the GNU Lesser General Public License along with web3.js. If not, see . */ import { Web3Context } from 'web3-core'; +import { Web3EthExecutionAPI } from 'web3-types'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import { getMining } from '../../../src/rpc_methods'; -import { Web3EthExecutionAPI } from '../../../src/web3_eth_execution_api'; import { isMining } from '../../../src/rpc_method_wrappers'; jest.mock('../../../src/rpc_methods'); @@ -31,6 +31,6 @@ describe('isMining', () => { it('should call rpcMethods.getMining with expected parameters', async () => { await isMining(web3Context); - expect(getMining).toHaveBeenCalledWith(web3Context.requestManager); + expect(ethRpcMethods.getMining).toHaveBeenCalledWith(web3Context.requestManager); }); }); diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/is_syncing.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/is_syncing.test.ts index e0012741dce..113064bddcc 100644 --- a/packages/web3-eth/test/unit/rpc_method_wrappers/is_syncing.test.ts +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/is_syncing.test.ts @@ -15,9 +15,9 @@ You should have received a copy of the GNU Lesser General Public License along with web3.js. If not, see . */ import { Web3Context } from 'web3-core'; +import { Web3EthExecutionAPI } from 'web3-types'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import { getSyncing } from '../../../src/rpc_methods'; -import { Web3EthExecutionAPI } from '../../../src/web3_eth_execution_api'; import { isSyncing } from '../../../src/rpc_method_wrappers'; jest.mock('../../../src/rpc_methods'); @@ -31,6 +31,6 @@ describe('isSyncing', () => { it('should call rpcMethods.getSyncing with expected parameters', async () => { await isSyncing(web3Context); - expect(getSyncing).toHaveBeenCalledWith(web3Context.requestManager); + expect(ethRpcMethods.getSyncing).toHaveBeenCalledWith(web3Context.requestManager); }); }); diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/send_signed_transaction.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/send_signed_transaction.test.ts index ceb15cb4fb8..99f79b8aad2 100644 --- a/packages/web3-eth/test/unit/rpc_method_wrappers/send_signed_transaction.test.ts +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/send_signed_transaction.test.ts @@ -15,10 +15,10 @@ You should have received a copy of the GNU Lesser General Public License along with web3.js. If not, see . */ import { Web3Context } from 'web3-core'; - import { DEFAULT_RETURN_FORMAT, format } from 'web3-utils'; -import * as rpcMethods from '../../../src/rpc_methods'; -import { Web3EthExecutionAPI } from '../../../src/web3_eth_execution_api'; +import { Web3EthExecutionAPI } from 'web3-types'; +import { ethRpcMethods } from 'web3-rpc-methods'; + import { sendSignedTransaction } from '../../../src/rpc_method_wrappers'; import * as WaitForTransactionReceipt from '../../../src/utils/wait_for_transaction_receipt'; import * as WatchTransactionForConfirmations from '../../../src/utils/watch_transaction_for_confirmations'; @@ -47,7 +47,7 @@ describe('sendTransaction', () => { it.each(testData)( `sending event should emit with inputSignedTransaction\n ${testMessage}`, async (_, inputSignedTransaction) => { - (rpcMethods.getTransactionReceipt as jest.Mock).mockResolvedValueOnce( + (ethRpcMethods.getTransactionReceipt as jest.Mock).mockResolvedValueOnce( expectedTransactionReceipt, ); @@ -69,9 +69,9 @@ describe('sendTransaction', () => { ); it.each(testData)( - `should call rpcMethods.sendRawTransaction with expected parameters\n ${testMessage}`, + `should call ethRpcMethods.sendRawTransaction with expected parameters\n ${testMessage}`, async (_, inputSignedTransaction) => { - (rpcMethods.getTransactionReceipt as jest.Mock).mockResolvedValueOnce( + (ethRpcMethods.getTransactionReceipt as jest.Mock).mockResolvedValueOnce( expectedTransactionReceipt, ); @@ -81,7 +81,7 @@ describe('sendTransaction', () => { DEFAULT_RETURN_FORMAT, ); await sendSignedTransaction(web3Context, inputSignedTransaction, DEFAULT_RETURN_FORMAT); - expect(rpcMethods.sendRawTransaction).toHaveBeenCalledWith( + expect(ethRpcMethods.sendRawTransaction).toHaveBeenCalledWith( web3Context.requestManager, inputSignedTransactionFormatted, ); @@ -91,7 +91,7 @@ describe('sendTransaction', () => { it.each(testData)( `sent event should emit with inputSignedTransaction\n ${testMessage}`, async (_, inputSignedTransaction) => { - (rpcMethods.getTransactionReceipt as jest.Mock).mockResolvedValueOnce( + (ethRpcMethods.getTransactionReceipt as jest.Mock).mockResolvedValueOnce( expectedTransactionReceipt, ); @@ -116,11 +116,11 @@ describe('sendTransaction', () => { it.each(testData)( `transactionHash event should emit with inputSignedTransaction\n ${testMessage}`, async (_, inputSignedTransaction) => { - (rpcMethods.getTransactionReceipt as jest.Mock).mockResolvedValueOnce( + (ethRpcMethods.getTransactionReceipt as jest.Mock).mockResolvedValueOnce( expectedTransactionReceipt, ); - (rpcMethods.sendRawTransaction as jest.Mock).mockResolvedValueOnce( + (ethRpcMethods.sendRawTransaction as jest.Mock).mockResolvedValueOnce( expectedTransactionHash, ); @@ -137,17 +137,17 @@ describe('sendTransaction', () => { ); it.each(testData)( - `should call rpcMethods.getTransactionReceipt with expected parameters\n ${testMessage}`, + `should call ethRpcMethods.getTransactionReceipt with expected parameters\n ${testMessage}`, async (_, inputSignedTransaction) => { - (rpcMethods.sendRawTransaction as jest.Mock).mockResolvedValueOnce( + (ethRpcMethods.sendRawTransaction as jest.Mock).mockResolvedValueOnce( expectedTransactionHash, ); - (rpcMethods.getTransactionReceipt as jest.Mock).mockResolvedValueOnce( + (ethRpcMethods.getTransactionReceipt as jest.Mock).mockResolvedValueOnce( expectedTransactionReceipt, ); await sendSignedTransaction(web3Context, inputSignedTransaction, DEFAULT_RETURN_FORMAT); - expect(rpcMethods.getTransactionReceipt).toHaveBeenCalledWith( + expect(ethRpcMethods.getTransactionReceipt).toHaveBeenCalledWith( web3Context.requestManager, expectedTransactionHash, ); @@ -161,7 +161,7 @@ describe('sendTransaction', () => { .spyOn(WaitForTransactionReceipt, 'waitForTransactionReceipt') .mockResolvedValueOnce(expectedTransactionReceipt); - (rpcMethods.sendRawTransaction as jest.Mock).mockResolvedValueOnce( + (ethRpcMethods.sendRawTransaction as jest.Mock).mockResolvedValueOnce( expectedTransactionHash, ); @@ -184,7 +184,7 @@ describe('sendTransaction', () => { DEFAULT_RETURN_FORMAT, ); - (rpcMethods.getTransactionReceipt as jest.Mock).mockResolvedValueOnce( + (ethRpcMethods.getTransactionReceipt as jest.Mock).mockResolvedValueOnce( expectedTransactionReceipt, ); @@ -209,7 +209,7 @@ describe('sendTransaction', () => { DEFAULT_RETURN_FORMAT, ); - (rpcMethods.getTransactionReceipt as jest.Mock).mockResolvedValueOnce( + (ethRpcMethods.getTransactionReceipt as jest.Mock).mockResolvedValueOnce( expectedTransactionReceipt, ); expect( @@ -235,10 +235,10 @@ describe('sendTransaction', () => { DEFAULT_RETURN_FORMAT, ); - (rpcMethods.sendRawTransaction as jest.Mock).mockResolvedValueOnce( + (ethRpcMethods.sendRawTransaction as jest.Mock).mockResolvedValueOnce( expectedTransactionHash, ); - (rpcMethods.getTransactionReceipt as jest.Mock).mockResolvedValueOnce( + (ethRpcMethods.getTransactionReceipt as jest.Mock).mockResolvedValueOnce( expectedTransactionReceipt, ); @@ -250,7 +250,7 @@ describe('sendTransaction', () => { await promiEvent; - expect(rpcMethods.getTransactionReceipt).toHaveBeenCalledWith( + expect(ethRpcMethods.getTransactionReceipt).toHaveBeenCalledWith( web3Context.requestManager, expectedTransactionHash, ); diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/send_transaction.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/send_transaction.test.ts index f3620ed781c..715223ad5ba 100644 --- a/packages/web3-eth/test/unit/rpc_method_wrappers/send_transaction.test.ts +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/send_transaction.test.ts @@ -17,9 +17,9 @@ along with web3.js. If not, see . import { Web3Context } from 'web3-core'; import { DEFAULT_RETURN_FORMAT, ETH_DATA_FORMAT, format } from 'web3-utils'; import { isNullish } from 'web3-validator'; +import { Web3EthExecutionAPI } from 'web3-types'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import * as rpcMethods from '../../../src/rpc_methods'; -import { Web3EthExecutionAPI } from '../../../src/web3_eth_execution_api'; import { sendTransaction } from '../../../src/rpc_method_wrappers'; import { formatTransaction } from '../../../src'; import * as GetTransactionGasPricing from '../../../src/utils/get_transaction_gas_pricing'; @@ -54,7 +54,7 @@ describe('sendTransaction', () => { GetTransactionGasPricing, 'getTransactionGasPricing', ); - (rpcMethods.getTransactionReceipt as jest.Mock).mockResolvedValue( + (ethRpcMethods.getTransactionReceipt as jest.Mock).mockResolvedValue( expectedTransactionReceipt, ); await sendTransaction( @@ -81,7 +81,7 @@ describe('sendTransaction', () => { `sending event should emit with formattedTransaction\n ${testMessage}`, async (_, inputTransaction, sendTransactionOptions) => { const formattedTransaction = formatTransaction(inputTransaction, ETH_DATA_FORMAT); - (rpcMethods.getTransactionReceipt as jest.Mock).mockResolvedValue( + (ethRpcMethods.getTransactionReceipt as jest.Mock).mockResolvedValue( expectedTransactionReceipt, ); await sendTransaction( @@ -98,10 +98,10 @@ describe('sendTransaction', () => { ); it.each(testData)( - `should call rpcMethods.sendTransaction with expected parameters\n ${testMessage}`, + `should call ethRpcMethods.sendTransaction with expected parameters\n ${testMessage}`, async (_, inputTransaction, sendTransactionOptions) => { const formattedTransaction = formatTransaction(inputTransaction, ETH_DATA_FORMAT); - (rpcMethods.getTransactionReceipt as jest.Mock).mockResolvedValue( + (ethRpcMethods.getTransactionReceipt as jest.Mock).mockResolvedValue( expectedTransactionReceipt, ); await sendTransaction( @@ -110,7 +110,7 @@ describe('sendTransaction', () => { DEFAULT_RETURN_FORMAT, sendTransactionOptions, ); - expect(rpcMethods.sendTransaction).toHaveBeenCalledWith( + expect(ethRpcMethods.sendTransaction).toHaveBeenCalledWith( web3Context.requestManager, formattedTransaction, ); @@ -121,7 +121,7 @@ describe('sendTransaction', () => { `sent event should emit with formattedTransaction\n ${testMessage}`, async (_, inputTransaction, sendTransactionOptions) => { const formattedTransaction = formatTransaction(inputTransaction, ETH_DATA_FORMAT); - (rpcMethods.getTransactionReceipt as jest.Mock).mockResolvedValue( + (ethRpcMethods.getTransactionReceipt as jest.Mock).mockResolvedValue( expectedTransactionReceipt, ); @@ -141,10 +141,10 @@ describe('sendTransaction', () => { it.each(testData)( `transactionHash event should emit with expectedTransactionHash\n ${testMessage}`, async (_, inputTransaction, sendTransactionOptions) => { - (rpcMethods.sendTransaction as jest.Mock).mockResolvedValueOnce( + (ethRpcMethods.sendTransaction as jest.Mock).mockResolvedValueOnce( expectedTransactionHash, ); - (rpcMethods.getTransactionReceipt as jest.Mock).mockResolvedValue( + (ethRpcMethods.getTransactionReceipt as jest.Mock).mockResolvedValue( expectedTransactionReceipt, ); @@ -162,12 +162,12 @@ describe('sendTransaction', () => { ); it.each(testData)( - `should call rpcMethods.getTransactionReceipt with expected parameters\n ${testMessage}`, + `should call ethRpcMethods.getTransactionReceipt with expected parameters\n ${testMessage}`, async (_, inputTransaction, sendTransactionOptions) => { - (rpcMethods.sendTransaction as jest.Mock).mockResolvedValueOnce( + (ethRpcMethods.sendTransaction as jest.Mock).mockResolvedValueOnce( expectedTransactionHash, ); - (rpcMethods.getTransactionReceipt as jest.Mock).mockResolvedValue( + (ethRpcMethods.getTransactionReceipt as jest.Mock).mockResolvedValue( expectedTransactionReceipt, ); @@ -177,7 +177,7 @@ describe('sendTransaction', () => { DEFAULT_RETURN_FORMAT, sendTransactionOptions, ); - expect(rpcMethods.getTransactionReceipt).toHaveBeenCalledWith( + expect(ethRpcMethods.getTransactionReceipt).toHaveBeenCalledWith( web3Context.requestManager, expectedTransactionHash, ); @@ -191,7 +191,7 @@ describe('sendTransaction', () => { .spyOn(WaitForTransactionReceipt, 'waitForTransactionReceipt') .mockResolvedValueOnce(expectedTransactionReceipt); - (rpcMethods.sendTransaction as jest.Mock).mockResolvedValueOnce( + (ethRpcMethods.sendTransaction as jest.Mock).mockResolvedValueOnce( expectedTransactionHash, ); @@ -218,7 +218,7 @@ describe('sendTransaction', () => { expectedTransactionReceipt, DEFAULT_RETURN_FORMAT, ); - (rpcMethods.getTransactionReceipt as jest.Mock).mockResolvedValueOnce( + (ethRpcMethods.getTransactionReceipt as jest.Mock).mockResolvedValueOnce( formattedTransactionReceipt, ); @@ -243,7 +243,7 @@ describe('sendTransaction', () => { expectedTransactionReceipt, DEFAULT_RETURN_FORMAT, ); - (rpcMethods.getTransactionReceipt as jest.Mock).mockResolvedValueOnce( + (ethRpcMethods.getTransactionReceipt as jest.Mock).mockResolvedValueOnce( formattedTransactionReceipt, ); expect( @@ -270,10 +270,10 @@ describe('sendTransaction', () => { DEFAULT_RETURN_FORMAT, ); - (rpcMethods.sendTransaction as jest.Mock).mockResolvedValueOnce( + (ethRpcMethods.sendTransaction as jest.Mock).mockResolvedValueOnce( expectedTransactionHash, ); - (rpcMethods.getTransactionReceipt as jest.Mock).mockResolvedValueOnce( + (ethRpcMethods.getTransactionReceipt as jest.Mock).mockResolvedValueOnce( expectedTransactionReceipt, ); @@ -286,7 +286,7 @@ describe('sendTransaction', () => { await promiEvent; - expect(rpcMethods.getTransactionReceipt).toHaveBeenCalledWith( + expect(ethRpcMethods.getTransactionReceipt).toHaveBeenCalledWith( web3Context.requestManager, expectedTransactionHash, ); diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/sign.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/sign.test.ts index 141c7cd59c3..7c829a8479a 100644 --- a/packages/web3-eth/test/unit/rpc_method_wrappers/sign.test.ts +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/sign.test.ts @@ -16,9 +16,9 @@ along with web3.js. If not, see . */ import { Web3Context } from 'web3-core'; import { DEFAULT_RETURN_FORMAT, FMT_BYTES, FMT_NUMBER, format } from 'web3-utils'; +import { Web3EthExecutionAPI } from 'web3-types'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import { sign as rpcMethodsSign } from '../../../src/rpc_methods'; -import { Web3EthExecutionAPI } from '../../../src/web3_eth_execution_api'; import { sign } from '../../../src/rpc_method_wrappers'; import { mockRpcResponse, testData } from './fixtures/sign'; @@ -42,7 +42,7 @@ describe('sign', () => { ); await sign(web3Context, ...inputParameters, DEFAULT_RETURN_FORMAT); - expect(rpcMethodsSign).toHaveBeenCalledWith( + expect(ethRpcMethods.sign).toHaveBeenCalledWith( web3Context.requestManager, inputAddress, inputMessageFormatted, @@ -59,7 +59,7 @@ describe('sign', () => { mockRpcResponse, expectedReturnFormat, ); - (rpcMethodsSign as jest.Mock).mockResolvedValueOnce(mockRpcResponse); + (ethRpcMethods.sign as jest.Mock).mockResolvedValueOnce(mockRpcResponse); const result = await sign(web3Context, ...inputParameters, expectedReturnFormat); expect(result).toStrictEqual(expectedFormattedResult); diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/sign_transaction.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/sign_transaction.test.ts index f19419326b0..cc189e5776c 100644 --- a/packages/web3-eth/test/unit/rpc_method_wrappers/sign_transaction.test.ts +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/sign_transaction.test.ts @@ -17,10 +17,9 @@ along with web3.js. If not, see . import { Web3Context } from 'web3-core'; import { DEFAULT_RETURN_FORMAT, ETH_DATA_FORMAT } from 'web3-utils'; import { isString } from 'web3-validator'; -import { SignedTransactionInfoAPI } from 'web3-types'; +import { SignedTransactionInfoAPI, Web3EthExecutionAPI } from 'web3-types'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import { signTransaction as rpcMethodsSignTransaction } from '../../../src/rpc_methods'; -import { Web3EthExecutionAPI } from '../../../src/web3_eth_execution_api'; import { signTransaction } from '../../../src/rpc_method_wrappers'; import { returnFormat, testData } from './fixtures/sign_transaction'; import { formatTransaction } from '../../../src'; @@ -40,14 +39,14 @@ describe('signTransaction', () => { const [inputTransaction, signedTransactionInfo] = inputParameters; const inputTransactionFormatted = formatTransaction(inputTransaction, ETH_DATA_FORMAT); - (rpcMethodsSignTransaction as jest.Mock).mockResolvedValueOnce( + (ethRpcMethods.signTransaction as jest.Mock).mockResolvedValueOnce( isString(signedTransactionInfo as string) ? signedTransactionInfo : (signedTransactionInfo as SignedTransactionInfoAPI).raw, ); await signTransaction(web3Context, inputTransaction, DEFAULT_RETURN_FORMAT); - expect(rpcMethodsSignTransaction).toHaveBeenCalledWith( + expect(ethRpcMethods.signTransaction).toHaveBeenCalledWith( web3Context.requestManager, inputTransactionFormatted, ); @@ -59,7 +58,7 @@ describe('signTransaction', () => { async (_, inputParameters) => { const [inputTransaction, signedTransactionInfo, expectedFormattedResult] = inputParameters; - (rpcMethodsSignTransaction as jest.Mock).mockResolvedValueOnce( + (ethRpcMethods.signTransaction as jest.Mock).mockResolvedValueOnce( isString(signedTransactionInfo as string) ? signedTransactionInfo : (signedTransactionInfo as SignedTransactionInfoAPI).raw, diff --git a/packages/web3-eth/test/unit/rpc_methods/call.test.ts b/packages/web3-eth/test/unit/rpc_methods/call.test.ts index 49420443ef9..062be2402d8 100644 --- a/packages/web3-eth/test/unit/rpc_methods/call.test.ts +++ b/packages/web3-eth/test/unit/rpc_methods/call.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import { call } from '../../../src/rpc_methods'; import { testData } from './fixtures/call'; jest.mock('web3-validator'); @@ -49,7 +49,7 @@ describe('call', () => { it.each(testData)( 'should call requestManager.send with call method and expect parameters\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { - await call(requestManager, ...inputParameters); + await ethRpcMethods.call(requestManager, ...inputParameters); expect(requestManagerSendSpy).toHaveBeenCalledWith({ method: 'eth_call', params: inputParameters, @@ -62,7 +62,7 @@ describe('call', () => { // eslint-disable-next-line @typescript-eslint/no-unused-vars async (_, inputParameters) => { const validatorSpy = jest.spyOn(validator, 'validate'); - await call(requestManager, ...inputParameters); + await ethRpcMethods.call(requestManager, ...inputParameters); // eslint-disable-next-line @typescript-eslint/no-unused-vars const [__, expectedBlockNumber] = inputParameters; expect(validatorSpy).toHaveBeenCalledWith(['blockNumberOrTag'], [expectedBlockNumber]); diff --git a/packages/web3-eth/test/unit/rpc_methods/compile_lll.test.ts b/packages/web3-eth/test/unit/rpc_methods/compile_lll.test.ts index ba4d626568e..c1963da7ea3 100644 --- a/packages/web3-eth/test/unit/rpc_methods/compile_lll.test.ts +++ b/packages/web3-eth/test/unit/rpc_methods/compile_lll.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import { compileLLL } from '../../../src/rpc_methods'; import { testData } from './fixtures/compile_lll'; jest.mock('web3-validator'); @@ -49,7 +49,7 @@ describe('compileLLL', () => { it.each(testData)( 'should call requestManager.send with compileLLL method and expect parameters\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { - await compileLLL(requestManager, ...inputParameters); + await ethRpcMethods.compileLLL(requestManager, ...inputParameters); expect(requestManagerSendSpy).toHaveBeenCalledWith({ method: 'eth_compileLLL', params: inputParameters, @@ -61,7 +61,7 @@ describe('compileLLL', () => { 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { const validatorSpy = jest.spyOn(validator, 'validate'); - await compileLLL(requestManager, ...inputParameters); + await ethRpcMethods.compileLLL(requestManager, ...inputParameters); expect(validatorSpy).toHaveBeenCalledWith(['string'], inputParameters); }, ); diff --git a/packages/web3-eth/test/unit/rpc_methods/compile_serpent.test.ts b/packages/web3-eth/test/unit/rpc_methods/compile_serpent.test.ts index 1783ae8f566..01bc0b2c957 100644 --- a/packages/web3-eth/test/unit/rpc_methods/compile_serpent.test.ts +++ b/packages/web3-eth/test/unit/rpc_methods/compile_serpent.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import { compileSerpent } from '../../../src/rpc_methods'; import { testData } from './fixtures/compile_lll'; jest.mock('web3-validator'); @@ -49,7 +49,7 @@ describe('compileSerpent', () => { it.each(testData)( 'should call requestManager.send with compileSerpent method and expect parameters\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { - await compileSerpent(requestManager, ...inputParameters); + await ethRpcMethods.compileSerpent(requestManager, ...inputParameters); expect(requestManagerSendSpy).toHaveBeenCalledWith({ method: 'eth_compileSerpent', params: inputParameters, @@ -61,7 +61,7 @@ describe('compileSerpent', () => { 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { const validatorSpy = jest.spyOn(validator, 'validate'); - await compileSerpent(requestManager, ...inputParameters); + await ethRpcMethods.compileSerpent(requestManager, ...inputParameters); expect(validatorSpy).toHaveBeenCalledWith(['string'], inputParameters); }, ); diff --git a/packages/web3-eth/test/unit/rpc_methods/compile_solidity.test.ts b/packages/web3-eth/test/unit/rpc_methods/compile_solidity.test.ts index eae0d19182c..eb9811223cd 100644 --- a/packages/web3-eth/test/unit/rpc_methods/compile_solidity.test.ts +++ b/packages/web3-eth/test/unit/rpc_methods/compile_solidity.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import { compileSolidity } from '../../../src/rpc_methods'; import { testData } from './fixtures/compile_solidity'; jest.mock('web3-validator'); @@ -49,7 +49,7 @@ describe('compileSolidity', () => { it.each(testData)( 'should call requestManager.send with compileSolidity method and expect parameters\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { - await compileSolidity(requestManager, ...inputParameters); + await ethRpcMethods.compileSolidity(requestManager, ...inputParameters); expect(requestManagerSendSpy).toHaveBeenCalledWith({ method: 'eth_compileSolidity', params: inputParameters, @@ -61,7 +61,7 @@ describe('compileSolidity', () => { 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { const validatorSpy = jest.spyOn(validator, 'validate'); - await compileSolidity(requestManager, ...inputParameters); + await ethRpcMethods.compileSolidity(requestManager, ...inputParameters); expect(validatorSpy).toHaveBeenCalledWith(['string'], inputParameters); }, ); diff --git a/packages/web3-eth/test/unit/rpc_methods/estimate_gas.test.ts b/packages/web3-eth/test/unit/rpc_methods/estimate_gas.test.ts index cee2402a0e2..8e515a1c414 100644 --- a/packages/web3-eth/test/unit/rpc_methods/estimate_gas.test.ts +++ b/packages/web3-eth/test/unit/rpc_methods/estimate_gas.test.ts @@ -31,8 +31,8 @@ along with web3.js. If not, see . /* eslint-disable @typescript-eslint/no-unused-vars */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import { estimateGas } from '../../../src/rpc_methods'; import { testData } from './fixtures/estimate_gas'; jest.mock('web3-validator'); @@ -50,7 +50,7 @@ describe('estimateGas', () => { it.each(testData)( 'should call requestManager.send with estimateGas method and expect parameters\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { - await estimateGas(requestManager, ...inputParameters); + await ethRpcMethods.estimateGas(requestManager, ...inputParameters); expect(requestManagerSendSpy).toHaveBeenCalledWith({ method: 'eth_estimateGas', params: inputParameters, @@ -62,7 +62,7 @@ describe('estimateGas', () => { 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { const validatorSpy = jest.spyOn(validator, 'validate'); - await estimateGas(requestManager, ...inputParameters); + await ethRpcMethods.estimateGas(requestManager, ...inputParameters); const [__, expectedBlockNumber] = inputParameters; expect(validatorSpy).toHaveBeenCalledWith(['blockNumberOrTag'], [expectedBlockNumber]); }, diff --git a/packages/web3-eth/test/unit/rpc_methods/get_accounts.test.ts b/packages/web3-eth/test/unit/rpc_methods/get_accounts.test.ts index 3d60f0d9663..e257c86db76 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_accounts.test.ts +++ b/packages/web3-eth/test/unit/rpc_methods/get_accounts.test.ts @@ -29,8 +29,7 @@ along with web3.js. If not, see . // along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; - -import { getAccounts } from '../../../src/rpc_methods'; +import { ethRpcMethods } from 'web3-rpc-methods'; describe('getAccounts', () => { let requestManagerSendSpy: jest.Mock; @@ -43,7 +42,7 @@ describe('getAccounts', () => { }); it('should call requestManager.send with getAccounts method', async () => { - await getAccounts(requestManager); + await ethRpcMethods.getAccounts(requestManager); expect(requestManagerSendSpy).toHaveBeenCalledWith({ method: 'eth_accounts', params: [], diff --git a/packages/web3-eth/test/unit/rpc_methods/get_balance.test.ts b/packages/web3-eth/test/unit/rpc_methods/get_balance.test.ts index 7a450757d09..fff5c6699f7 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_balance.test.ts +++ b/packages/web3-eth/test/unit/rpc_methods/get_balance.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import { getBalance } from '../../../src/rpc_methods'; import { testData } from './fixtures/get_balance'; jest.mock('web3-validator'); @@ -49,7 +49,7 @@ describe('getBalance', () => { it.each(testData)( 'should call requestManager.send with getBalance method and expect parameters\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { - await getBalance(requestManager, ...inputParameters); + await ethRpcMethods.getBalance(requestManager, ...inputParameters); expect(requestManagerSendSpy).toHaveBeenCalledWith({ method: 'eth_getBalance', params: inputParameters, @@ -61,7 +61,7 @@ describe('getBalance', () => { 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { const validatorSpy = jest.spyOn(validator, 'validate'); - await getBalance(requestManager, ...inputParameters); + await ethRpcMethods.getBalance(requestManager, ...inputParameters); expect(validatorSpy).toHaveBeenCalledWith( ['address', 'blockNumberOrTag'], inputParameters, diff --git a/packages/web3-eth/test/unit/rpc_methods/get_block_by_hash.test.ts b/packages/web3-eth/test/unit/rpc_methods/get_block_by_hash.test.ts index e749486097b..ccb595cf198 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_block_by_hash.test.ts +++ b/packages/web3-eth/test/unit/rpc_methods/get_block_by_hash.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import { getBlockByHash } from '../../../src/rpc_methods'; import { testData } from './fixtures/get_block_by_hash'; jest.mock('web3-validator'); @@ -49,7 +49,7 @@ describe('getBlockByHash', () => { it.each(testData)( 'should call requestManager.send with getBlockByHash method and expect parameters\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { - await getBlockByHash(requestManager, ...inputParameters); + await ethRpcMethods.getBlockByHash(requestManager, ...inputParameters); expect(requestManagerSendSpy).toHaveBeenCalledWith({ method: 'eth_getBlockByHash', params: inputParameters, @@ -61,7 +61,7 @@ describe('getBlockByHash', () => { 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { const validatorSpy = jest.spyOn(validator, 'validate'); - await getBlockByHash(requestManager, ...inputParameters); + await ethRpcMethods.getBlockByHash(requestManager, ...inputParameters); expect(validatorSpy).toHaveBeenCalledWith(['bytes32', 'bool'], inputParameters); }, ); diff --git a/packages/web3-eth/test/unit/rpc_methods/get_block_by_number.test.ts b/packages/web3-eth/test/unit/rpc_methods/get_block_by_number.test.ts index d786fc099f1..4664410c401 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_block_by_number.test.ts +++ b/packages/web3-eth/test/unit/rpc_methods/get_block_by_number.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import { getBlockByNumber } from '../../../src/rpc_methods'; import { testData } from './fixtures/get_block_by_number'; jest.mock('web3-validator'); @@ -49,7 +49,7 @@ describe('getBlockByNumber', () => { it.each(testData)( 'should call requestManager.send with getBlockByNumber method and expect parameters\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { - await getBlockByNumber(requestManager, ...inputParameters); + await ethRpcMethods.getBlockByNumber(requestManager, ...inputParameters); expect(requestManagerSendSpy).toHaveBeenCalledWith({ method: 'eth_getBlockByNumber', params: inputParameters, @@ -61,7 +61,7 @@ describe('getBlockByNumber', () => { 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { const validatorSpy = jest.spyOn(validator, 'validate'); - await getBlockByNumber(requestManager, ...inputParameters); + await ethRpcMethods.getBlockByNumber(requestManager, ...inputParameters); expect(validatorSpy).toHaveBeenCalledWith( ['blockNumberOrTag', 'bool'], inputParameters, diff --git a/packages/web3-eth/test/unit/rpc_methods/get_block_number.test.ts b/packages/web3-eth/test/unit/rpc_methods/get_block_number.test.ts index edd45a51ed2..06901e66286 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_block_number.test.ts +++ b/packages/web3-eth/test/unit/rpc_methods/get_block_number.test.ts @@ -29,8 +29,7 @@ along with web3.js. If not, see . // along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; - -import { getBlockNumber } from '../../../src/rpc_methods'; +import { ethRpcMethods } from 'web3-rpc-methods'; describe('getBlockNumber', () => { let requestManagerSendSpy: jest.Mock; @@ -43,7 +42,7 @@ describe('getBlockNumber', () => { }); it('should call requestManager.send with getBlockNumber method', async () => { - await getBlockNumber(requestManager); + await ethRpcMethods.getBlockNumber(requestManager); expect(requestManagerSendSpy).toHaveBeenCalledWith({ method: 'eth_blockNumber', params: [], diff --git a/packages/web3-eth/test/unit/rpc_methods/get_block_transaction_count_by_hash.test.ts b/packages/web3-eth/test/unit/rpc_methods/get_block_transaction_count_by_hash.test.ts index 0578e4b0a15..77e83d366b9 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_block_transaction_count_by_hash.test.ts +++ b/packages/web3-eth/test/unit/rpc_methods/get_block_transaction_count_by_hash.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import { getBlockTransactionCountByHash } from '../../../src/rpc_methods'; import { testData } from './fixtures/get_block_transaction_count_by_hash'; jest.mock('web3-validator'); @@ -49,7 +49,7 @@ describe('getBlockTransactionCountByHash', () => { it.each(testData)( 'should call requestManager.send with getBlockTransactionCountByHash method and expect parameters\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { - await getBlockTransactionCountByHash(requestManager, ...inputParameters); + await ethRpcMethods.getBlockTransactionCountByHash(requestManager, ...inputParameters); expect(requestManagerSendSpy).toHaveBeenCalledWith({ method: 'eth_getBlockTransactionCountByHash', params: inputParameters, @@ -61,7 +61,7 @@ describe('getBlockTransactionCountByHash', () => { 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { const validatorSpy = jest.spyOn(validator, 'validate'); - await getBlockTransactionCountByHash(requestManager, ...inputParameters); + await ethRpcMethods.getBlockTransactionCountByHash(requestManager, ...inputParameters); expect(validatorSpy).toHaveBeenCalledWith(['bytes32'], inputParameters); }, ); diff --git a/packages/web3-eth/test/unit/rpc_methods/get_block_transaction_count_by_number.test.ts b/packages/web3-eth/test/unit/rpc_methods/get_block_transaction_count_by_number.test.ts index 52d5aab1d3b..5e9a3065ff4 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_block_transaction_count_by_number.test.ts +++ b/packages/web3-eth/test/unit/rpc_methods/get_block_transaction_count_by_number.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import { getBlockTransactionCountByNumber } from '../../../src/rpc_methods'; import { testData } from './fixtures/get_block_transaction_count_by_number'; jest.mock('web3-validator'); @@ -49,7 +49,10 @@ describe('getBlockTransactionCountByNumber', () => { it.each(testData)( 'should call requestManager.send with getBlockTransactionCountByNumber method and expect parameters\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { - await getBlockTransactionCountByNumber(requestManager, ...inputParameters); + await ethRpcMethods.getBlockTransactionCountByNumber( + requestManager, + ...inputParameters, + ); expect(requestManagerSendSpy).toHaveBeenCalledWith({ method: 'eth_getBlockTransactionCountByNumber', params: inputParameters, @@ -61,7 +64,10 @@ describe('getBlockTransactionCountByNumber', () => { 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { const validatorSpy = jest.spyOn(validator, 'validate'); - await getBlockTransactionCountByNumber(requestManager, ...inputParameters); + await ethRpcMethods.getBlockTransactionCountByNumber( + requestManager, + ...inputParameters, + ); expect(validatorSpy).toHaveBeenCalledWith(['blockNumberOrTag'], inputParameters); }, ); diff --git a/packages/web3-eth/test/unit/rpc_methods/get_chain_id.test.ts b/packages/web3-eth/test/unit/rpc_methods/get_chain_id.test.ts index 8ab2a6bd8bf..e145cd50c1f 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_chain_id.test.ts +++ b/packages/web3-eth/test/unit/rpc_methods/get_chain_id.test.ts @@ -29,8 +29,7 @@ along with web3.js. If not, see . // along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; - -import { getChainId } from '../../../src/rpc_methods'; +import { ethRpcMethods } from 'web3-rpc-methods'; describe('getChainId', () => { let requestManagerSendSpy: jest.Mock; @@ -43,7 +42,7 @@ describe('getChainId', () => { }); it('should call requestManager.send with getChainId method', async () => { - await getChainId(requestManager); + await ethRpcMethods.getChainId(requestManager); expect(requestManagerSendSpy).toHaveBeenCalledWith({ method: 'eth_chainId', params: [], diff --git a/packages/web3-eth/test/unit/rpc_methods/get_code.test.ts b/packages/web3-eth/test/unit/rpc_methods/get_code.test.ts index 15c209b3163..761d530c857 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_code.test.ts +++ b/packages/web3-eth/test/unit/rpc_methods/get_code.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import { getCode } from '../../../src/rpc_methods'; import { testData } from './fixtures/get_code'; jest.mock('web3-validator'); @@ -49,7 +49,7 @@ describe('getCode', () => { it.each(testData)( 'should call requestManager.send with getCode method and expect parameters\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { - await getCode(requestManager, ...inputParameters); + await ethRpcMethods.getCode(requestManager, ...inputParameters); expect(requestManagerSendSpy).toHaveBeenCalledWith({ method: 'eth_getCode', params: inputParameters, @@ -61,7 +61,7 @@ describe('getCode', () => { 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { const validatorSpy = jest.spyOn(validator, 'validate'); - await getCode(requestManager, ...inputParameters); + await ethRpcMethods.getCode(requestManager, ...inputParameters); expect(validatorSpy).toHaveBeenCalledWith( ['address', 'blockNumberOrTag'], inputParameters, diff --git a/packages/web3-eth/test/unit/rpc_methods/get_coinbase.test.ts b/packages/web3-eth/test/unit/rpc_methods/get_coinbase.test.ts index 4d37cea342f..57593fbed2b 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_coinbase.test.ts +++ b/packages/web3-eth/test/unit/rpc_methods/get_coinbase.test.ts @@ -29,8 +29,7 @@ along with web3.js. If not, see . // along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; - -import { getCoinbase } from '../../../src/rpc_methods'; +import { ethRpcMethods } from 'web3-rpc-methods'; describe('getCoinbase', () => { let requestManagerSendSpy: jest.Mock; @@ -43,7 +42,7 @@ describe('getCoinbase', () => { }); it('should call requestManager.send with getCoinbase method', async () => { - await getCoinbase(requestManager); + await ethRpcMethods.getCoinbase(requestManager); expect(requestManagerSendSpy).toHaveBeenCalledWith({ method: 'eth_coinbase', params: [], diff --git a/packages/web3-eth/test/unit/rpc_methods/get_compilers.test.ts b/packages/web3-eth/test/unit/rpc_methods/get_compilers.test.ts index 1dd3aac0274..7c8aeec58e3 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_compilers.test.ts +++ b/packages/web3-eth/test/unit/rpc_methods/get_compilers.test.ts @@ -29,8 +29,7 @@ along with web3.js. If not, see . // along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; - -import { getCompilers } from '../../../src/rpc_methods'; +import { ethRpcMethods } from 'web3-rpc-methods'; describe('getCompilers', () => { let requestManagerSendSpy: jest.Mock; @@ -43,7 +42,7 @@ describe('getCompilers', () => { }); it('should call requestManager.send with getCompilers method', async () => { - await getCompilers(requestManager); + await ethRpcMethods.getCompilers(requestManager); expect(requestManagerSendSpy).toHaveBeenCalledWith({ method: 'eth_getCompilers', params: [], diff --git a/packages/web3-eth/test/unit/rpc_methods/get_fee_history.test.ts b/packages/web3-eth/test/unit/rpc_methods/get_fee_history.test.ts index 22c1745d94a..7d353dc3afa 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_fee_history.test.ts +++ b/packages/web3-eth/test/unit/rpc_methods/get_fee_history.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import { getFeeHistory } from '../../../src/rpc_methods'; import { testData } from './fixtures/get_fee_history'; jest.mock('web3-validator'); @@ -49,7 +49,7 @@ describe('getFeeHistory', () => { it.each(testData)( 'should call requestManager.send with getFeeHistory method and expect parameters\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { - await getFeeHistory(requestManager, ...inputParameters); + await ethRpcMethods.getFeeHistory(requestManager, ...inputParameters); expect(requestManagerSendSpy).toHaveBeenCalledWith({ method: 'eth_feeHistory', params: inputParameters, @@ -61,7 +61,7 @@ describe('getFeeHistory', () => { 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { const validatorSpy = jest.spyOn(validator, 'validate'); - await getFeeHistory(requestManager, ...inputParameters); + await ethRpcMethods.getFeeHistory(requestManager, ...inputParameters); const [expectedBlockCount, expectedNewestBlock, expectedRewardPercentiles] = inputParameters; expect(validatorSpy).toHaveBeenCalledWith( diff --git a/packages/web3-eth/test/unit/rpc_methods/get_filter_changes.test.ts b/packages/web3-eth/test/unit/rpc_methods/get_filter_changes.test.ts index 74a370e1e63..c0df8b61b0f 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_filter_changes.test.ts +++ b/packages/web3-eth/test/unit/rpc_methods/get_filter_changes.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import { getFilterChanges } from '../../../src/rpc_methods'; import { testData } from './fixtures/uninstall_filter'; jest.mock('web3-validator'); @@ -49,7 +49,7 @@ describe('getFilterChanges', () => { it.each(testData)( 'should call requestManager.send with getFilterChanges method and expect parameters\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { - await getFilterChanges(requestManager, ...inputParameters); + await ethRpcMethods.getFilterChanges(requestManager, ...inputParameters); expect(requestManagerSendSpy).toHaveBeenCalledWith({ method: 'eth_getFilterChanges', params: inputParameters, @@ -61,7 +61,7 @@ describe('getFilterChanges', () => { 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { const validatorSpy = jest.spyOn(validator, 'validate'); - await getFilterChanges(requestManager, ...inputParameters); + await ethRpcMethods.getFilterChanges(requestManager, ...inputParameters); expect(validatorSpy).toHaveBeenCalledWith(['hex'], inputParameters); }, ); diff --git a/packages/web3-eth/test/unit/rpc_methods/get_filter_logs.test.ts b/packages/web3-eth/test/unit/rpc_methods/get_filter_logs.test.ts index 4dbe2c66488..02db963d3df 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_filter_logs.test.ts +++ b/packages/web3-eth/test/unit/rpc_methods/get_filter_logs.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import { getFilterLogs } from '../../../src/rpc_methods'; import { testData } from './fixtures/uninstall_filter'; jest.mock('web3-validator'); @@ -49,7 +49,7 @@ describe('getFilterLogs', () => { it.each(testData)( 'should call requestManager.send with getFilterLogs method and expect parameters\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { - await getFilterLogs(requestManager, ...inputParameters); + await ethRpcMethods.getFilterLogs(requestManager, ...inputParameters); expect(requestManagerSendSpy).toHaveBeenCalledWith({ method: 'eth_getFilterLogs', params: inputParameters, @@ -61,7 +61,7 @@ describe('getFilterLogs', () => { 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { const validatorSpy = jest.spyOn(validator, 'validate'); - await getFilterLogs(requestManager, ...inputParameters); + await ethRpcMethods.getFilterLogs(requestManager, ...inputParameters); expect(validatorSpy).toHaveBeenCalledWith(['hex'], inputParameters); }, ); diff --git a/packages/web3-eth/test/unit/rpc_methods/get_gas_price.test.ts b/packages/web3-eth/test/unit/rpc_methods/get_gas_price.test.ts index cb3186d287f..36e51f76227 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_gas_price.test.ts +++ b/packages/web3-eth/test/unit/rpc_methods/get_gas_price.test.ts @@ -29,8 +29,7 @@ along with web3.js. If not, see . // along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; - -import { getGasPrice } from '../../../src/rpc_methods'; +import { ethRpcMethods } from 'web3-rpc-methods'; describe('getGasPrice', () => { let requestManagerSendSpy: jest.Mock; @@ -43,7 +42,7 @@ describe('getGasPrice', () => { }); it('should call requestManager.send with getGasPrice method', async () => { - await getGasPrice(requestManager); + await ethRpcMethods.getGasPrice(requestManager); expect(requestManagerSendSpy).toHaveBeenCalledWith({ method: 'eth_gasPrice', params: [], diff --git a/packages/web3-eth/test/unit/rpc_methods/get_hash_rate.test.ts b/packages/web3-eth/test/unit/rpc_methods/get_hash_rate.test.ts index 9390f47b2a7..876a7e9852e 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_hash_rate.test.ts +++ b/packages/web3-eth/test/unit/rpc_methods/get_hash_rate.test.ts @@ -29,8 +29,7 @@ along with web3.js. If not, see . // along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; - -import { getHashRate } from '../../../src/rpc_methods'; +import { ethRpcMethods } from 'web3-rpc-methods'; describe('getHashRate', () => { let requestManagerSendSpy: jest.Mock; @@ -43,7 +42,7 @@ describe('getHashRate', () => { }); it('should call requestManager.send with getHashRate method', async () => { - await getHashRate(requestManager); + await ethRpcMethods.getHashRate(requestManager); expect(requestManagerSendSpy).toHaveBeenCalledWith({ method: 'eth_hashrate', params: [], diff --git a/packages/web3-eth/test/unit/rpc_methods/get_logs.test.ts b/packages/web3-eth/test/unit/rpc_methods/get_logs.test.ts index 623065f9b94..edb24f47ad2 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_logs.test.ts +++ b/packages/web3-eth/test/unit/rpc_methods/get_logs.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import { getLogs } from '../../../src/rpc_methods'; import { testData } from './fixtures/new_filter'; jest.mock('web3-validator'); @@ -49,7 +49,7 @@ describe('getLogs', () => { it.each(testData)( 'should call requestManager.send with getLogs method and expect parameters\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { - await getLogs(requestManager, ...inputParameters); + await ethRpcMethods.getLogs(requestManager, ...inputParameters); expect(requestManagerSendSpy).toHaveBeenCalledWith({ method: 'eth_getLogs', params: inputParameters, @@ -61,7 +61,7 @@ describe('getLogs', () => { 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { const validatorSpy = jest.spyOn(validator, 'validate'); - await getLogs(requestManager, ...inputParameters); + await ethRpcMethods.getLogs(requestManager, ...inputParameters); expect(validatorSpy).toHaveBeenCalledWith(['filter'], inputParameters); }, ); diff --git a/packages/web3-eth/test/unit/rpc_methods/get_mining.test.ts b/packages/web3-eth/test/unit/rpc_methods/get_mining.test.ts index 9e2afc24658..11f314f0c01 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_mining.test.ts +++ b/packages/web3-eth/test/unit/rpc_methods/get_mining.test.ts @@ -29,8 +29,7 @@ along with web3.js. If not, see . // along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; - -import { getMining } from '../../../src/rpc_methods'; +import { ethRpcMethods } from 'web3-rpc-methods'; describe('getMining', () => { let requestManagerSendSpy: jest.Mock; @@ -43,7 +42,7 @@ describe('getMining', () => { }); it('should call requestManager.send with getMining method', async () => { - await getMining(requestManager); + await ethRpcMethods.getMining(requestManager); expect(requestManagerSendSpy).toHaveBeenCalledWith({ method: 'eth_mining', params: [], diff --git a/packages/web3-eth/test/unit/rpc_methods/get_node_info.test.ts b/packages/web3-eth/test/unit/rpc_methods/get_node_info.test.ts index fb1bcc269ca..8c87ee2ad6e 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_node_info.test.ts +++ b/packages/web3-eth/test/unit/rpc_methods/get_node_info.test.ts @@ -29,8 +29,7 @@ along with web3.js. If not, see . // along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; - -import { getNodeInfo } from '../../../src/rpc_methods'; +import { ethRpcMethods } from 'web3-rpc-methods'; describe('getNodeInfo', () => { let requestManagerSendSpy: jest.Mock; @@ -43,7 +42,7 @@ describe('getNodeInfo', () => { }); it('should call requestManager.send with getNodeInfo method', async () => { - await getNodeInfo(requestManager); + await ethRpcMethods.getNodeInfo(requestManager); expect(requestManagerSendSpy).toHaveBeenCalledWith({ method: 'web3_clientVersion', params: [], diff --git a/packages/web3-eth/test/unit/rpc_methods/get_pending_transaction.test.ts b/packages/web3-eth/test/unit/rpc_methods/get_pending_transaction.test.ts index 0fe60da725a..3e0dca88234 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_pending_transaction.test.ts +++ b/packages/web3-eth/test/unit/rpc_methods/get_pending_transaction.test.ts @@ -29,8 +29,7 @@ along with web3.js. If not, see . // along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; - -import { getPendingTransactions } from '../../../src/rpc_methods'; +import { ethRpcMethods } from 'web3-rpc-methods'; describe('getPendingTransactions', () => { let requestManagerSendSpy: jest.Mock; @@ -43,7 +42,7 @@ describe('getPendingTransactions', () => { }); it('should call requestManager.send with getPendingTransactions method', async () => { - await getPendingTransactions(requestManager); + await ethRpcMethods.getPendingTransactions(requestManager); expect(requestManagerSendSpy).toHaveBeenCalledWith({ method: 'eth_pendingTransactions', params: [], diff --git a/packages/web3-eth/test/unit/rpc_methods/get_proof.test.ts b/packages/web3-eth/test/unit/rpc_methods/get_proof.test.ts index e9514f0f961..f63e303338e 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_proof.test.ts +++ b/packages/web3-eth/test/unit/rpc_methods/get_proof.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import { getProof } from '../../../src/rpc_methods'; import { testData } from './fixtures/get_proof'; jest.mock('web3-validator'); @@ -49,7 +49,7 @@ describe('getProof', () => { it.each(testData)( 'should call requestManager.send with getProof method and expect parameters\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { - await getProof(requestManager, ...inputParameters); + await ethRpcMethods.getProof(requestManager, ...inputParameters); expect(requestManagerSendSpy).toHaveBeenCalledWith({ method: 'eth_getProof', params: inputParameters, @@ -61,7 +61,7 @@ describe('getProof', () => { 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { const validatorSpy = jest.spyOn(validator, 'validate'); - await getProof(requestManager, ...inputParameters); + await ethRpcMethods.getProof(requestManager, ...inputParameters); expect(validatorSpy).toHaveBeenCalledWith( ['address', 'bytes32[]', 'blockNumberOrTag'], inputParameters, diff --git a/packages/web3-eth/test/unit/rpc_methods/get_protocol_version.test.ts b/packages/web3-eth/test/unit/rpc_methods/get_protocol_version.test.ts index 0560bced3cc..07de12e4e65 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_protocol_version.test.ts +++ b/packages/web3-eth/test/unit/rpc_methods/get_protocol_version.test.ts @@ -29,8 +29,7 @@ along with web3.js. If not, see . // along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; - -import { getProtocolVersion } from '../../../src/rpc_methods'; +import { ethRpcMethods } from 'web3-rpc-methods'; describe('getProtocolVersion', () => { let requestManagerSendSpy: jest.Mock; @@ -43,7 +42,7 @@ describe('getProtocolVersion', () => { }); it('should call requestManager.send with getProtocolVersion method', async () => { - await getProtocolVersion(requestManager); + await ethRpcMethods.getProtocolVersion(requestManager); expect(requestManagerSendSpy).toHaveBeenCalledWith({ method: 'eth_protocolVersion', params: [], diff --git a/packages/web3-eth/test/unit/rpc_methods/get_storage_at.test.ts b/packages/web3-eth/test/unit/rpc_methods/get_storage_at.test.ts index c504193ce26..8d76199408c 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_storage_at.test.ts +++ b/packages/web3-eth/test/unit/rpc_methods/get_storage_at.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import { getStorageAt } from '../../../src/rpc_methods'; import { testData } from './fixtures/get_storage_at'; jest.mock('web3-validator'); @@ -49,7 +49,7 @@ describe('getStorageAt', () => { it.each(testData)( 'should call requestManager.send with getStorageAt method and expect parameters\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { - await getStorageAt(requestManager, ...inputParameters); + await ethRpcMethods.getStorageAt(requestManager, ...inputParameters); expect(requestManagerSendSpy).toHaveBeenCalledWith({ method: 'eth_getStorageAt', params: inputParameters, @@ -61,7 +61,7 @@ describe('getStorageAt', () => { 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { const validatorSpy = jest.spyOn(validator, 'validate'); - await getStorageAt(requestManager, ...inputParameters); + await ethRpcMethods.getStorageAt(requestManager, ...inputParameters); expect(validatorSpy).toHaveBeenCalledWith( ['address', 'hex', 'blockNumberOrTag'], inputParameters, diff --git a/packages/web3-eth/test/unit/rpc_methods/get_syncing.test.ts b/packages/web3-eth/test/unit/rpc_methods/get_syncing.test.ts index 2bdf16f3b9f..de3e854a688 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_syncing.test.ts +++ b/packages/web3-eth/test/unit/rpc_methods/get_syncing.test.ts @@ -29,8 +29,7 @@ along with web3.js. If not, see . // along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; - -import { getSyncing } from '../../../src/rpc_methods'; +import { ethRpcMethods } from 'web3-rpc-methods'; describe('getSyncing', () => { let requestManagerSendSpy: jest.Mock; @@ -43,7 +42,7 @@ describe('getSyncing', () => { }); it('should call requestManager.send with getSyncing method', async () => { - await getSyncing(requestManager); + await ethRpcMethods.getSyncing(requestManager); expect(requestManagerSendSpy).toHaveBeenCalledWith({ method: 'eth_syncing', params: [], diff --git a/packages/web3-eth/test/unit/rpc_methods/get_transaction_by_block_hash_and_index.test.ts b/packages/web3-eth/test/unit/rpc_methods/get_transaction_by_block_hash_and_index.test.ts index dea7ed1c77b..c5bb293161a 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_transaction_by_block_hash_and_index.test.ts +++ b/packages/web3-eth/test/unit/rpc_methods/get_transaction_by_block_hash_and_index.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import { getTransactionByBlockHashAndIndex } from '../../../src/rpc_methods'; import { testData } from './fixtures/get_transaction_by_block_hash_and_index'; jest.mock('web3-validator'); @@ -49,7 +49,10 @@ describe('getTransactionByBlockHashAndIndex', () => { it.each(testData)( 'should call requestManager.send with getTransactionByBlockHashAndIndex method and expect parameters\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { - await getTransactionByBlockHashAndIndex(requestManager, ...inputParameters); + await ethRpcMethods.getTransactionByBlockHashAndIndex( + requestManager, + ...inputParameters, + ); expect(requestManagerSendSpy).toHaveBeenCalledWith({ method: 'eth_getTransactionByBlockHashAndIndex', params: inputParameters, @@ -61,7 +64,10 @@ describe('getTransactionByBlockHashAndIndex', () => { 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { const validatorSpy = jest.spyOn(validator, 'validate'); - await getTransactionByBlockHashAndIndex(requestManager, ...inputParameters); + await ethRpcMethods.getTransactionByBlockHashAndIndex( + requestManager, + ...inputParameters, + ); expect(validatorSpy).toHaveBeenCalledWith(['bytes32', 'hex'], inputParameters); }, ); diff --git a/packages/web3-eth/test/unit/rpc_methods/get_transaction_by_block_number_and_index.test.ts b/packages/web3-eth/test/unit/rpc_methods/get_transaction_by_block_number_and_index.test.ts index d9771317180..9e935c4179e 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_transaction_by_block_number_and_index.test.ts +++ b/packages/web3-eth/test/unit/rpc_methods/get_transaction_by_block_number_and_index.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import { getTransactionByBlockNumberAndIndex } from '../../../src/rpc_methods'; import { testData } from './fixtures/get_transaction_by_block_number_and_index'; jest.mock('web3-validator'); @@ -49,7 +49,10 @@ describe('getTransactionByBlockNumberAndIndex', () => { it.each(testData)( 'should call requestManager.send with getTransactionByBlockNumberAndIndex method and expect parameters\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { - await getTransactionByBlockNumberAndIndex(requestManager, ...inputParameters); + await ethRpcMethods.getTransactionByBlockNumberAndIndex( + requestManager, + ...inputParameters, + ); expect(requestManagerSendSpy).toHaveBeenCalledWith({ method: 'eth_getTransactionByBlockNumberAndIndex', params: inputParameters, @@ -61,7 +64,10 @@ describe('getTransactionByBlockNumberAndIndex', () => { 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { const validatorSpy = jest.spyOn(validator, 'validate'); - await getTransactionByBlockNumberAndIndex(requestManager, ...inputParameters); + await ethRpcMethods.getTransactionByBlockNumberAndIndex( + requestManager, + ...inputParameters, + ); expect(validatorSpy).toHaveBeenCalledWith(['blockNumberOrTag', 'hex'], inputParameters); }, ); diff --git a/packages/web3-eth/test/unit/rpc_methods/get_transaction_by_hash.test.ts b/packages/web3-eth/test/unit/rpc_methods/get_transaction_by_hash.test.ts index d34dd796088..e8885cd87a1 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_transaction_by_hash.test.ts +++ b/packages/web3-eth/test/unit/rpc_methods/get_transaction_by_hash.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import { getTransactionByHash } from '../../../src/rpc_methods'; import { testData } from './fixtures/get_transaction_by_hash'; jest.mock('web3-validator'); @@ -49,7 +49,7 @@ describe('getTransactionByHash', () => { it.each(testData)( 'should call requestManager.send with getTransactionByHash method and expect parameters\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { - await getTransactionByHash(requestManager, ...inputParameters); + await ethRpcMethods.getTransactionByHash(requestManager, ...inputParameters); expect(requestManagerSendSpy).toHaveBeenCalledWith({ method: 'eth_getTransactionByHash', params: inputParameters, @@ -61,7 +61,7 @@ describe('getTransactionByHash', () => { 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { const validatorSpy = jest.spyOn(validator, 'validate'); - await getTransactionByHash(requestManager, ...inputParameters); + await ethRpcMethods.getTransactionByHash(requestManager, ...inputParameters); expect(validatorSpy).toHaveBeenCalledWith(['bytes32'], inputParameters); }, ); diff --git a/packages/web3-eth/test/unit/rpc_methods/get_transaction_count.test.ts b/packages/web3-eth/test/unit/rpc_methods/get_transaction_count.test.ts index 98be5d51b37..fd2e67de2cd 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_transaction_count.test.ts +++ b/packages/web3-eth/test/unit/rpc_methods/get_transaction_count.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import { getTransactionCount } from '../../../src/rpc_methods'; import { testData } from './fixtures/get_transaction_count'; jest.mock('web3-validator'); @@ -49,7 +49,7 @@ describe('getTransactionCount', () => { it.each(testData)( 'should call requestManager.send with getTransactionCount method and expect parameters\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { - await getTransactionCount(requestManager, ...inputParameters); + await ethRpcMethods.getTransactionCount(requestManager, ...inputParameters); expect(requestManagerSendSpy).toHaveBeenCalledWith({ method: 'eth_getTransactionCount', params: inputParameters, @@ -61,7 +61,7 @@ describe('getTransactionCount', () => { 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { const validatorSpy = jest.spyOn(validator, 'validate'); - await getTransactionCount(requestManager, ...inputParameters); + await ethRpcMethods.getTransactionCount(requestManager, ...inputParameters); expect(validatorSpy).toHaveBeenCalledWith( ['address', 'blockNumberOrTag'], inputParameters, diff --git a/packages/web3-eth/test/unit/rpc_methods/get_transaction_receipt.test.ts b/packages/web3-eth/test/unit/rpc_methods/get_transaction_receipt.test.ts index 70ce93c1d22..51b59cfc102 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_transaction_receipt.test.ts +++ b/packages/web3-eth/test/unit/rpc_methods/get_transaction_receipt.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import { getTransactionReceipt } from '../../../src/rpc_methods'; import { testData } from './fixtures/get_transaction_receipt'; jest.mock('web3-validator'); @@ -49,7 +49,7 @@ describe('getTransactionReceipt', () => { it.each(testData)( 'should call requestManager.send with getTransactionReceipt method and expect parameters\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { - await getTransactionReceipt(requestManager, ...inputParameters); + await ethRpcMethods.getTransactionReceipt(requestManager, ...inputParameters); expect(requestManagerSendSpy).toHaveBeenCalledWith({ method: 'eth_getTransactionReceipt', params: inputParameters, @@ -61,7 +61,7 @@ describe('getTransactionReceipt', () => { 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { const validatorSpy = jest.spyOn(validator, 'validate'); - await getTransactionReceipt(requestManager, ...inputParameters); + await ethRpcMethods.getTransactionReceipt(requestManager, ...inputParameters); expect(validatorSpy).toHaveBeenCalledWith(['bytes32'], inputParameters); }, ); diff --git a/packages/web3-eth/test/unit/rpc_methods/get_uncle_by_block_hash_and_index.test.ts b/packages/web3-eth/test/unit/rpc_methods/get_uncle_by_block_hash_and_index.test.ts index 2b252df7a0b..41e273cd58c 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_uncle_by_block_hash_and_index.test.ts +++ b/packages/web3-eth/test/unit/rpc_methods/get_uncle_by_block_hash_and_index.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import { getUncleByBlockHashAndIndex } from '../../../src/rpc_methods'; import { testData } from './fixtures/get_uncle_by_block_hash_and_index'; jest.mock('web3-validator'); @@ -49,7 +49,7 @@ describe('getUncleByBlockHashAndIndex', () => { it.each(testData)( 'should call requestManager.send with getUncleByBlockHashAndIndex method and expect parameters\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { - await getUncleByBlockHashAndIndex(requestManager, ...inputParameters); + await ethRpcMethods.getUncleByBlockHashAndIndex(requestManager, ...inputParameters); expect(requestManagerSendSpy).toHaveBeenCalledWith({ method: 'eth_getUncleByBlockHashAndIndex', params: inputParameters, @@ -61,7 +61,7 @@ describe('getUncleByBlockHashAndIndex', () => { 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { const validatorSpy = jest.spyOn(validator, 'validate'); - await getUncleByBlockHashAndIndex(requestManager, ...inputParameters); + await ethRpcMethods.getUncleByBlockHashAndIndex(requestManager, ...inputParameters); expect(validatorSpy).toHaveBeenCalledWith(['bytes32', 'hex'], inputParameters); }, ); diff --git a/packages/web3-eth/test/unit/rpc_methods/get_uncle_count_by_block_hash.test.ts b/packages/web3-eth/test/unit/rpc_methods/get_uncle_count_by_block_hash.test.ts index 0533a84788d..d6fdff29841 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_uncle_count_by_block_hash.test.ts +++ b/packages/web3-eth/test/unit/rpc_methods/get_uncle_count_by_block_hash.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import { getUncleCountByBlockHash } from '../../../src/rpc_methods'; import { testData } from './fixtures/get_uncle_count_by_block_hash'; jest.mock('web3-validator'); @@ -49,7 +49,7 @@ describe('getUncleCountByBlockHash', () => { it.each(testData)( 'should call requestManager.send with getUncleCountByBlockHash method and expect parameters\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { - await getUncleCountByBlockHash(requestManager, ...inputParameters); + await ethRpcMethods.getUncleCountByBlockHash(requestManager, ...inputParameters); expect(requestManagerSendSpy).toHaveBeenCalledWith({ method: 'eth_getUncleCountByBlockHash', params: inputParameters, @@ -61,7 +61,7 @@ describe('getUncleCountByBlockHash', () => { 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { const validatorSpy = jest.spyOn(validator, 'validate'); - await getUncleCountByBlockHash(requestManager, ...inputParameters); + await ethRpcMethods.getUncleCountByBlockHash(requestManager, ...inputParameters); expect(validatorSpy).toHaveBeenCalledWith(['bytes32'], inputParameters); }, ); diff --git a/packages/web3-eth/test/unit/rpc_methods/get_uncle_count_by_block_number.test.ts b/packages/web3-eth/test/unit/rpc_methods/get_uncle_count_by_block_number.test.ts index 8c84495e297..fb76097dba9 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_uncle_count_by_block_number.test.ts +++ b/packages/web3-eth/test/unit/rpc_methods/get_uncle_count_by_block_number.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import { getUncleCountByBlockNumber } from '../../../src/rpc_methods'; import { testData } from './fixtures/get_uncle_count_by_block_number'; jest.mock('web3-validator'); @@ -49,7 +49,7 @@ describe('getUncleCountByBlockNumber', () => { it.each(testData)( 'should call requestManager.send with getUncleCountByBlockNumber method and expect parameters\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { - await getUncleCountByBlockNumber(requestManager, ...inputParameters); + await ethRpcMethods.getUncleCountByBlockNumber(requestManager, ...inputParameters); expect(requestManagerSendSpy).toHaveBeenCalledWith({ method: 'eth_getUncleCountByBlockNumber', params: inputParameters, @@ -61,7 +61,7 @@ describe('getUncleCountByBlockNumber', () => { 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { const validatorSpy = jest.spyOn(validator, 'validate'); - await getUncleCountByBlockNumber(requestManager, ...inputParameters); + await ethRpcMethods.getUncleCountByBlockNumber(requestManager, ...inputParameters); expect(validatorSpy).toHaveBeenCalledWith(['blockNumberOrTag'], inputParameters); }, ); diff --git a/packages/web3-eth/test/unit/rpc_methods/get_work.test.ts b/packages/web3-eth/test/unit/rpc_methods/get_work.test.ts index 0d81891cff9..ad1363f9436 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_work.test.ts +++ b/packages/web3-eth/test/unit/rpc_methods/get_work.test.ts @@ -29,8 +29,7 @@ along with web3.js. If not, see . // along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; - -import { getWork } from '../../../src/rpc_methods'; +import { ethRpcMethods } from 'web3-rpc-methods'; describe('getWork', () => { let requestManagerSendSpy: jest.Mock; @@ -43,7 +42,7 @@ describe('getWork', () => { }); it('should call requestManager.send with getWork method', async () => { - await getWork(requestManager); + await ethRpcMethods.getWork(requestManager); expect(requestManagerSendSpy).toHaveBeenCalledWith({ method: 'eth_getWork', params: [], diff --git a/packages/web3-eth/test/unit/rpc_methods/new_block_filter.test.ts b/packages/web3-eth/test/unit/rpc_methods/new_block_filter.test.ts index a9106579e44..bf9bb074292 100644 --- a/packages/web3-eth/test/unit/rpc_methods/new_block_filter.test.ts +++ b/packages/web3-eth/test/unit/rpc_methods/new_block_filter.test.ts @@ -29,8 +29,7 @@ along with web3.js. If not, see . // along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; - -import { newBlockFilter } from '../../../src/rpc_methods'; +import { ethRpcMethods } from 'web3-rpc-methods'; describe('newBlockFilter', () => { let requestManagerSendSpy: jest.Mock; @@ -43,7 +42,7 @@ describe('newBlockFilter', () => { }); it('should call requestManager.send with newBlockFilter method', async () => { - await newBlockFilter(requestManager); + await ethRpcMethods.newBlockFilter(requestManager); expect(requestManagerSendSpy).toHaveBeenCalledWith({ method: 'eth_newBlockFilter', params: [], diff --git a/packages/web3-eth/test/unit/rpc_methods/new_filter.test.ts b/packages/web3-eth/test/unit/rpc_methods/new_filter.test.ts index 151b8d4a4ce..fa2c6c1d469 100644 --- a/packages/web3-eth/test/unit/rpc_methods/new_filter.test.ts +++ b/packages/web3-eth/test/unit/rpc_methods/new_filter.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import { newFilter } from '../../../src/rpc_methods'; import { testData } from './fixtures/new_filter'; jest.mock('web3-validator'); @@ -49,7 +49,7 @@ describe('newFilter', () => { it.each(testData)( 'should call requestManager.send with newFilter method and expect parameters\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { - await newFilter(requestManager, ...inputParameters); + await ethRpcMethods.newFilter(requestManager, ...inputParameters); expect(requestManagerSendSpy).toHaveBeenCalledWith({ method: 'eth_newFilter', params: inputParameters, @@ -61,7 +61,7 @@ describe('newFilter', () => { 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { const validatorSpy = jest.spyOn(validator, 'validate'); - await newFilter(requestManager, ...inputParameters); + await ethRpcMethods.newFilter(requestManager, ...inputParameters); expect(validatorSpy).toHaveBeenCalledWith(['filter'], inputParameters); }, ); diff --git a/packages/web3-eth/test/unit/rpc_methods/new_pending_transaction_filter.test.ts b/packages/web3-eth/test/unit/rpc_methods/new_pending_transaction_filter.test.ts index ab59ce120a2..1c8c067352b 100644 --- a/packages/web3-eth/test/unit/rpc_methods/new_pending_transaction_filter.test.ts +++ b/packages/web3-eth/test/unit/rpc_methods/new_pending_transaction_filter.test.ts @@ -29,8 +29,7 @@ along with web3.js. If not, see . // along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; - -import { newPendingTransactionFilter } from '../../../src/rpc_methods'; +import { ethRpcMethods } from 'web3-rpc-methods'; describe('newPendingTransactionFilter', () => { let requestManagerSendSpy: jest.Mock; @@ -43,7 +42,7 @@ describe('newPendingTransactionFilter', () => { }); it('should call requestManager.send with newPendingTransactionFilter method', async () => { - await newPendingTransactionFilter(requestManager); + await ethRpcMethods.newPendingTransactionFilter(requestManager); expect(requestManagerSendSpy).toHaveBeenCalledWith({ method: 'eth_newPendingTransactionFilter', params: [], diff --git a/packages/web3-eth/test/unit/rpc_methods/request_accounts.test.ts b/packages/web3-eth/test/unit/rpc_methods/request_accounts.test.ts index 623ed09116c..73e05bef571 100644 --- a/packages/web3-eth/test/unit/rpc_methods/request_accounts.test.ts +++ b/packages/web3-eth/test/unit/rpc_methods/request_accounts.test.ts @@ -29,8 +29,7 @@ along with web3.js. If not, see . // along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; - -import { requestAccounts } from '../../../src/rpc_methods'; +import { ethRpcMethods } from 'web3-rpc-methods'; describe('requestAccounts', () => { let requestManagerSendSpy: jest.Mock; @@ -43,7 +42,7 @@ describe('requestAccounts', () => { }); it('should call requestManager.send with requestAccounts method', async () => { - await requestAccounts(requestManager); + await ethRpcMethods.requestAccounts(requestManager); expect(requestManagerSendSpy).toHaveBeenCalledWith({ method: 'eth_requestAccounts', params: [], diff --git a/packages/web3-eth/test/unit/rpc_methods/send_raw_transaction.test.ts b/packages/web3-eth/test/unit/rpc_methods/send_raw_transaction.test.ts index ba09233614e..dcc37faf3d2 100644 --- a/packages/web3-eth/test/unit/rpc_methods/send_raw_transaction.test.ts +++ b/packages/web3-eth/test/unit/rpc_methods/send_raw_transaction.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import { sendRawTransaction } from '../../../src/rpc_methods'; import { testData } from './fixtures/send_raw_transaction'; jest.mock('web3-validator'); @@ -49,7 +49,7 @@ describe('sendRawTransaction', () => { it.each(testData)( 'should call requestManager.send with sendRawTransaction method and expect parameters\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { - await sendRawTransaction(requestManager, ...inputParameters); + await ethRpcMethods.sendRawTransaction(requestManager, ...inputParameters); expect(requestManagerSendSpy).toHaveBeenCalledWith({ method: 'eth_sendRawTransaction', params: inputParameters, @@ -61,7 +61,7 @@ describe('sendRawTransaction', () => { 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { const validatorSpy = jest.spyOn(validator, 'validate'); - await sendRawTransaction(requestManager, ...inputParameters); + await ethRpcMethods.sendRawTransaction(requestManager, ...inputParameters); expect(validatorSpy).toHaveBeenCalledWith(['hex'], inputParameters); }, ); diff --git a/packages/web3-eth/test/unit/rpc_methods/send_transaction.test.ts b/packages/web3-eth/test/unit/rpc_methods/send_transaction.test.ts index 9c86a11e245..ffb55966871 100644 --- a/packages/web3-eth/test/unit/rpc_methods/send_transaction.test.ts +++ b/packages/web3-eth/test/unit/rpc_methods/send_transaction.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import { sendTransaction } from '../../../src/rpc_methods'; import { testData } from './fixtures/send_transaction'; jest.mock('web3-validator'); @@ -49,7 +49,7 @@ describe('sendTransaction', () => { it.each(testData)( 'should call requestManager.send with sendTransaction method and expect parameters\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { - await sendTransaction(requestManager, ...inputParameters); + await ethRpcMethods.sendTransaction(requestManager, ...inputParameters); expect(requestManagerSendSpy).toHaveBeenCalledWith({ method: 'eth_sendTransaction', params: inputParameters, @@ -62,7 +62,7 @@ describe('sendTransaction', () => { 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { const validatorSpy = jest.spyOn(validator, 'validate'); - await sendTransaction(requestManager, ...inputParameters); + await ethRpcMethods.sendTransaction(requestManager, ...inputParameters); expect(validatorSpy).toHaveBeenCalledWith([''], inputParameters); }, ); diff --git a/packages/web3-eth/test/unit/rpc_methods/sign.test.ts b/packages/web3-eth/test/unit/rpc_methods/sign.test.ts index 98c1ff3328e..15bbdaba4e8 100644 --- a/packages/web3-eth/test/unit/rpc_methods/sign.test.ts +++ b/packages/web3-eth/test/unit/rpc_methods/sign.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import { sign } from '../../../src/rpc_methods'; import { testData } from './fixtures/sign'; jest.mock('web3-validator'); @@ -49,7 +49,7 @@ describe('sign', () => { it.each(testData)( 'should call requestManager.send with sign method and expect parameters\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { - await sign(requestManager, ...inputParameters); + await ethRpcMethods.sign(requestManager, ...inputParameters); expect(requestManagerSendSpy).toHaveBeenCalledWith({ method: 'eth_sign', params: inputParameters, @@ -61,7 +61,7 @@ describe('sign', () => { 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { const validatorSpy = jest.spyOn(validator, 'validate'); - await sign(requestManager, ...inputParameters); + await ethRpcMethods.sign(requestManager, ...inputParameters); expect(validatorSpy).toHaveBeenCalledWith(['address', 'hex'], inputParameters); }, ); diff --git a/packages/web3-eth/test/unit/rpc_methods/sign_transaction.test.ts b/packages/web3-eth/test/unit/rpc_methods/sign_transaction.test.ts index 002c303c008..fb42056b244 100644 --- a/packages/web3-eth/test/unit/rpc_methods/sign_transaction.test.ts +++ b/packages/web3-eth/test/unit/rpc_methods/sign_transaction.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import { signTransaction } from '../../../src/rpc_methods'; import { testData } from './fixtures/sign_transaction'; jest.mock('web3-validator'); @@ -49,7 +49,7 @@ describe('signTransaction', () => { it.each(testData)( 'should call requestManager.send with signTransaction method and expect parameters\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { - await signTransaction(requestManager, ...inputParameters); + await ethRpcMethods.signTransaction(requestManager, ...inputParameters); expect(requestManagerSendSpy).toHaveBeenCalledWith({ method: 'eth_signTransaction', params: inputParameters, @@ -62,7 +62,7 @@ describe('signTransaction', () => { 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { const validatorSpy = jest.spyOn(validator, 'validate'); - await signTransaction(requestManager, ...inputParameters); + await ethRpcMethods.signTransaction(requestManager, ...inputParameters); expect(validatorSpy).toHaveBeenCalledWith([''], inputParameters); }, ); diff --git a/packages/web3-eth/test/unit/rpc_methods/submit_hashrate.test.ts b/packages/web3-eth/test/unit/rpc_methods/submit_hashrate.test.ts index e8347ffc39d..17ed8475aa3 100644 --- a/packages/web3-eth/test/unit/rpc_methods/submit_hashrate.test.ts +++ b/packages/web3-eth/test/unit/rpc_methods/submit_hashrate.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import { submitHashrate } from '../../../src/rpc_methods'; import { testData } from './fixtures/submit_hashrate'; jest.mock('web3-validator'); @@ -49,7 +49,7 @@ describe('submitHashrate', () => { it.each(testData)( 'should call requestManager.send with submitHashrate method and expect parameters\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { - await submitHashrate(requestManager, ...inputParameters); + await ethRpcMethods.submitHashrate(requestManager, ...inputParameters); expect(requestManagerSendSpy).toHaveBeenCalledWith({ method: 'eth_submitHashrate', params: inputParameters, @@ -61,7 +61,7 @@ describe('submitHashrate', () => { 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { const validatorSpy = jest.spyOn(validator, 'validate'); - await submitHashrate(requestManager, ...inputParameters); + await ethRpcMethods.submitHashrate(requestManager, ...inputParameters); expect(validatorSpy).toHaveBeenCalledWith(['bytes32', 'bytes32'], inputParameters); }, ); diff --git a/packages/web3-eth/test/unit/rpc_methods/submit_work.test.ts b/packages/web3-eth/test/unit/rpc_methods/submit_work.test.ts index ee866ffb877..1d3129f7a0f 100644 --- a/packages/web3-eth/test/unit/rpc_methods/submit_work.test.ts +++ b/packages/web3-eth/test/unit/rpc_methods/submit_work.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import { submitWork } from '../../../src/rpc_methods'; import { testData } from './fixtures/submit_work'; jest.mock('web3-validator'); @@ -49,7 +49,7 @@ describe('submitWork', () => { it.each(testData)( 'should call requestManager.send with submitWork method and expect parameters\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { - await submitWork(requestManager, ...inputParameters); + await ethRpcMethods.submitWork(requestManager, ...inputParameters); expect(requestManagerSendSpy).toHaveBeenCalledWith({ method: 'eth_submitWork', params: inputParameters, @@ -61,7 +61,7 @@ describe('submitWork', () => { 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { const validatorSpy = jest.spyOn(validator, 'validate'); - await submitWork(requestManager, ...inputParameters); + await ethRpcMethods.submitWork(requestManager, ...inputParameters); expect(validatorSpy).toHaveBeenCalledWith( ['bytes8', 'bytes32', 'bytes32'], inputParameters, diff --git a/packages/web3-eth/test/unit/rpc_methods/uninstall_filter.test.ts b/packages/web3-eth/test/unit/rpc_methods/uninstall_filter.test.ts index 6d90d4fc82d..a1a9cc31b2f 100644 --- a/packages/web3-eth/test/unit/rpc_methods/uninstall_filter.test.ts +++ b/packages/web3-eth/test/unit/rpc_methods/uninstall_filter.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; +import { ethRpcMethods } from 'web3-rpc-methods'; -import { uninstallFilter } from '../../../src/rpc_methods'; import { testData } from './fixtures/uninstall_filter'; jest.mock('web3-validator'); @@ -49,7 +49,7 @@ describe('uninstallFilter', () => { it.each(testData)( 'should call requestManager.send with uninstallFilter method and expect parameters\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { - await uninstallFilter(requestManager, ...inputParameters); + await ethRpcMethods.uninstallFilter(requestManager, ...inputParameters); expect(requestManagerSendSpy).toHaveBeenCalledWith({ method: 'eth_uninstallFilter', params: inputParameters, @@ -61,7 +61,7 @@ describe('uninstallFilter', () => { 'should call validator.validate with expected params\n Title: %s\n Input parameters: %s', async (_, inputParameters) => { const validatorSpy = jest.spyOn(validator, 'validate'); - await uninstallFilter(requestManager, ...inputParameters); + await ethRpcMethods.uninstallFilter(requestManager, ...inputParameters); expect(validatorSpy).toHaveBeenCalledWith(['hex'], inputParameters); }, ); diff --git a/packages/web3-eth/test/unit/web3_eth_methods_no_parameters.test.ts b/packages/web3-eth/test/unit/web3_eth_methods_no_parameters.test.ts index 2800aced3fe..827d680962b 100644 --- a/packages/web3-eth/test/unit/web3_eth_methods_no_parameters.test.ts +++ b/packages/web3-eth/test/unit/web3_eth_methods_no_parameters.test.ts @@ -14,9 +14,9 @@ GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with web3.js. If not, see . */ -/* eslint-disable import/no-named-as-default */ +import { ethRpcMethods } from 'web3-rpc-methods'; + import Web3Eth from '../../src/index'; -import * as rpcMethods from '../../src/rpc_methods'; jest.mock('../../src/rpc_methods'); @@ -30,49 +30,51 @@ describe('web3_eth_methods_no_parameters', () => { describe('should call RPC method with only request manager parameter', () => { it('getProtocolVersion', async () => { await web3Eth.getProtocolVersion(); - expect(rpcMethods.getProtocolVersion).toHaveBeenCalledWith(web3Eth.requestManager); + expect(ethRpcMethods.getProtocolVersion).toHaveBeenCalledWith(web3Eth.requestManager); }); it('isSyncing', async () => { await web3Eth.isSyncing(); - expect(rpcMethods.getSyncing).toHaveBeenCalledWith(web3Eth.requestManager); + expect(ethRpcMethods.getSyncing).toHaveBeenCalledWith(web3Eth.requestManager); }); it('getCoinbase', async () => { await web3Eth.getCoinbase(); - expect(rpcMethods.getCoinbase).toHaveBeenCalledWith(web3Eth.requestManager); + expect(ethRpcMethods.getCoinbase).toHaveBeenCalledWith(web3Eth.requestManager); }); it('isMining', async () => { await web3Eth.isMining(); - expect(rpcMethods.getMining).toHaveBeenCalledWith(web3Eth.requestManager); + expect(ethRpcMethods.getMining).toHaveBeenCalledWith(web3Eth.requestManager); }); it('getAccounts', async () => { await web3Eth.getAccounts(); - expect(rpcMethods.getAccounts).toHaveBeenCalledWith(web3Eth.requestManager); + expect(ethRpcMethods.getAccounts).toHaveBeenCalledWith(web3Eth.requestManager); }); it('getWork', async () => { await web3Eth.getWork(); - expect(rpcMethods.getWork).toHaveBeenCalledWith(web3Eth.requestManager); + expect(ethRpcMethods.getWork).toHaveBeenCalledWith(web3Eth.requestManager); }); it('getPendingTransactions', async () => { - (rpcMethods.getPendingTransactions as jest.Mock).mockResolvedValueOnce([]); + (ethRpcMethods.getPendingTransactions as jest.Mock).mockResolvedValueOnce([]); await web3Eth.getPendingTransactions(); - expect(rpcMethods.getPendingTransactions).toHaveBeenCalledWith(web3Eth.requestManager); + expect(ethRpcMethods.getPendingTransactions).toHaveBeenCalledWith( + web3Eth.requestManager, + ); }); it('requestAccounts', async () => { await web3Eth.requestAccounts(); - expect(rpcMethods.requestAccounts).toHaveBeenCalledWith(web3Eth.requestManager); + expect(ethRpcMethods.requestAccounts).toHaveBeenCalledWith(web3Eth.requestManager); }); it('getNodeInfo', async () => { await web3Eth.getNodeInfo(); - expect(rpcMethods.getNodeInfo).toHaveBeenCalledWith(web3Eth.requestManager); + expect(ethRpcMethods.getNodeInfo).toHaveBeenCalledWith(web3Eth.requestManager); }); }); }); diff --git a/packages/web3-eth/test/unit/web3_eth_methods_with_parameters.test.ts b/packages/web3-eth/test/unit/web3_eth_methods_with_parameters.test.ts index 2920e756c5e..442839d581c 100644 --- a/packages/web3-eth/test/unit/web3_eth_methods_with_parameters.test.ts +++ b/packages/web3-eth/test/unit/web3_eth_methods_with_parameters.test.ts @@ -14,12 +14,9 @@ GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with web3.js. If not, see . */ +import { ethRpcMethods } from 'web3-rpc-methods'; -/* eslint-disable import/namespace */ - -// eslint-disable-next-line import/no-named-as-default import Web3Eth from '../../src/index'; -import * as rpcMethods from '../../src/rpc_methods'; import * as rpcMethodWrappers from '../../src/rpc_method_wrappers'; import { getBlockNumberValidData, @@ -274,7 +271,7 @@ describe('web3_eth_methods_with_parameters', () => { 'input: %s\nrpcMethodParameters: %s', async (input, rpcMethodParameters) => { await web3Eth.getStorageAt(...input); - expect(rpcMethods.getStorageAt).toHaveBeenCalledWith( + expect(ethRpcMethods.getStorageAt).toHaveBeenCalledWith( web3Eth.requestManager, ...rpcMethodParameters, ); @@ -287,7 +284,7 @@ describe('web3_eth_methods_with_parameters', () => { 'input: %s\nrpcMethodParameters: %s', async (input, rpcMethodParameters) => { await web3Eth.getCode(...input); - expect(rpcMethods.getCode).toHaveBeenCalledWith( + expect(ethRpcMethods.getCode).toHaveBeenCalledWith( web3Eth.requestManager, ...rpcMethodParameters, ); @@ -298,7 +295,7 @@ describe('web3_eth_methods_with_parameters', () => { describe.skip('sendSignedTransaction', () => { it.each(sendSignedTransactionValidData)('input: %s', async input => { await web3Eth.sendSignedTransaction(input); - expect(rpcMethods.sendRawTransaction).toHaveBeenCalledWith( + expect(ethRpcMethods.sendRawTransaction).toHaveBeenCalledWith( web3Eth.requestManager, input, ); @@ -308,7 +305,7 @@ describe('web3_eth_methods_with_parameters', () => { describe.skip('sign', () => { it.each(signValidData)('input: %s', async input => { await web3Eth.sign(...input); - expect(rpcMethods.sign).toHaveBeenCalledWith( + expect(ethRpcMethods.sign).toHaveBeenCalledWith( web3Eth.requestManager, ...input, ); @@ -320,7 +317,7 @@ describe('web3_eth_methods_with_parameters', () => { 'input: %s\nrpcMethodParameters: %s', async (input, rpcMethodParameters) => { await web3Eth.getPastLogs(input); - expect(rpcMethods.getLogs).toHaveBeenCalledWith( + expect(ethRpcMethods.getLogs).toHaveBeenCalledWith( web3Eth.requestManager, rpcMethodParameters, ); @@ -331,7 +328,7 @@ describe('web3_eth_methods_with_parameters', () => { describe('submitWork', () => { it.each(submitWorkValidData)('input: %s', async input => { await web3Eth.submitWork(...input); - expect(rpcMethods.submitWork).toHaveBeenCalledWith( + expect(ethRpcMethods.submitWork).toHaveBeenCalledWith( web3Eth.requestManager, ...input, ); diff --git a/packages/web3-net/test/unit/rpc_method_wrappers.test.ts b/packages/web3-net/test/unit/rpc_method_wrappers.test.ts index bb781c4d43e..ee5f2915346 100644 --- a/packages/web3-net/test/unit/rpc_method_wrappers.test.ts +++ b/packages/web3-net/test/unit/rpc_method_wrappers.test.ts @@ -14,10 +14,10 @@ GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with web3.js. If not, see . */ +import { netRpcMethods } from 'web3-rpc-methods'; import { Net } from '../../src'; import { getIdValidData, getPeerCountValidData } from '../fixtures/rpc_method_wrappers'; -import * as rpcMethods from '../../src/rpc_methods'; import { getId, getPeerCount, isListening } from '../../src/rpc_method_wrappers'; jest.mock('../../src/rpc_methods'); @@ -34,11 +34,11 @@ describe('rpc_method_wrappers', () => { it.each(getIdValidData)( 'returnType: %s mockRpcResponse: %s output: %s', async (returnType, mockRpcResponse, output) => { - (rpcMethods.getId as jest.Mock).mockResolvedValueOnce(mockRpcResponse); + (netRpcMethods.getId as jest.Mock).mockResolvedValueOnce(mockRpcResponse); const result = await getId(web3Net, returnType); expect(result).toBe(output); - expect(rpcMethods.getId).toHaveBeenCalledWith(web3Net.requestManager); + expect(netRpcMethods.getId).toHaveBeenCalledWith(web3Net.requestManager); }, ); }); @@ -47,17 +47,19 @@ describe('rpc_method_wrappers', () => { it.each(getPeerCountValidData)( 'returnType: %s mockRpcResponse: %s output: %s', async (returnType, mockRpcResponse, output) => { - (rpcMethods.getPeerCount as jest.Mock).mockResolvedValueOnce(mockRpcResponse); + (netRpcMethods.getPeerCount as jest.Mock).mockResolvedValueOnce( + mockRpcResponse, + ); expect(await getPeerCount(web3Net, returnType)).toBe(output); - expect(rpcMethods.getPeerCount).toHaveBeenCalledWith(web3Net.requestManager); + expect(netRpcMethods.getPeerCount).toHaveBeenCalledWith(web3Net.requestManager); }, ); }); it('isListening', async () => { await isListening(web3Net); - expect(rpcMethods.isListening).toHaveBeenCalledWith(web3Net.requestManager); + expect(netRpcMethods.isListening).toHaveBeenCalledWith(web3Net.requestManager); }); }); }); diff --git a/packages/web3-net/test/unit/rpc_methods.test.ts b/packages/web3-net/test/unit/rpc_methods.test.ts index d1924b51281..3ab59e097e2 100644 --- a/packages/web3-net/test/unit/rpc_methods.test.ts +++ b/packages/web3-net/test/unit/rpc_methods.test.ts @@ -16,9 +16,8 @@ along with web3.js. If not, see . */ import { Web3RequestManager } from 'web3-core'; - -import { getId, getPeerCount, isListening } from '../../src/rpc_methods'; -import { Web3NetAPI } from '../../src/web3_net_api'; +import { Web3NetAPI } from 'web3-types'; +import { netRpcMethods } from 'web3-rpc-methods'; describe('rpc_methods', () => { const requestManagerSendSpy = jest.fn(); @@ -33,7 +32,7 @@ describe('rpc_methods', () => { describe('should make call with expected parameters', () => { it('getId', async () => { - await getId(requestManager); + await netRpcMethods.getId(requestManager); expect(requestManagerSendSpy).toHaveBeenCalledWith({ method: 'net_version', @@ -42,7 +41,7 @@ describe('rpc_methods', () => { }); it('getPeerCount', async () => { - await getPeerCount(requestManager); + await netRpcMethods.getPeerCount(requestManager); expect(requestManagerSendSpy).toHaveBeenCalledWith({ method: 'net_peerCount', @@ -51,7 +50,7 @@ describe('rpc_methods', () => { }); it('isListening', async () => { - await isListening(requestManager); + await netRpcMethods.isListening(requestManager); expect(requestManagerSendSpy).toHaveBeenCalledWith({ method: 'net_listening', diff --git a/packages/web3-types/src/web3_api_types.ts b/packages/web3-types/src/web3_api_types.ts index a316e342e79..481ad4e6b16 100644 --- a/packages/web3-types/src/web3_api_types.ts +++ b/packages/web3-types/src/web3_api_types.ts @@ -17,6 +17,7 @@ along with web3.js. If not, see . import { JsonRpcId, JsonRpcIdentifier } from './json_rpc_types'; +// eslint-disable-next-line @typescript-eslint/no-explicit-any export type Web3APISpec = Record any>; export type Web3APIMethod = string & keyof T; export type Web3APIParams> = Parameters< diff --git a/packages/web3-types/src/web3_base_provider.ts b/packages/web3-types/src/web3_base_provider.ts index 00c2c782094..e6bb746dfbe 100644 --- a/packages/web3-types/src/web3_base_provider.ts +++ b/packages/web3-types/src/web3_base_provider.ts @@ -109,6 +109,7 @@ export abstract class Web3BaseProvider) => void, ) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any this.request(payload as Web3APIPayload) .then(response => { callback(undefined, response); @@ -123,6 +124,7 @@ export abstract class Web3BaseProvider(payload: JsonRpcPayload

) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any return this.request(payload as Web3APIPayload) as Promise>; } diff --git a/packages/web3/src/types.ts b/packages/web3/src/types.ts index 352161125d2..8a15b7252c3 100644 --- a/packages/web3/src/types.ts +++ b/packages/web3/src/types.ts @@ -63,6 +63,7 @@ export interface Web3EthInterface extends Eth { * web3.eth.Contract.setProvider(myProvider) * ``` */ + // eslint-disable-next-line @typescript-eslint/no-explicit-any Contract: Web3ContractConstructor; Iban: typeof Iban; net: Net; diff --git a/packages/web3/test/integration/web3.accounts.test.ts b/packages/web3/test/integration/web3.accounts.test.ts index c301add500f..0009d255475 100644 --- a/packages/web3/test/integration/web3.accounts.test.ts +++ b/packages/web3/test/integration/web3.accounts.test.ts @@ -113,7 +113,8 @@ describe('web3.accounts', () => { await expect(account.signTransaction(tx)).rejects.toThrow('gasLimit is too low.'); }); - // This test should fail, but it's not. Need to debug further to figure out why. + // TODO This test should fail, but it's not. Need to debug further to figure out why. + // eslint-disable-next-line jest/no-disabled-tests it.skip('should throw error if signed by private key not associated with "from" field', async () => { const account: Web3Account = web3.eth.accounts.create(); diff --git a/packages/web3/test/integration/web3.test.ts b/packages/web3/test/integration/web3.test.ts index 71779c353b5..13d2e12c654 100644 --- a/packages/web3/test/integration/web3.test.ts +++ b/packages/web3/test/integration/web3.test.ts @@ -15,9 +15,13 @@ You should have received a copy of the GNU Lesser General Public License along with web3.js. If not, see . */ -import { JsonRpcOptionalRequest, Web3BaseProvider, SupportedProviders } from 'web3-types'; +import { + JsonRpcOptionalRequest, + Web3BaseProvider, + Web3EthExecutionAPI, + SupportedProviders, +} from 'web3-types'; import Contract from 'web3-eth-contract'; -import { Web3EthExecutionAPI } from 'web3-eth/dist/web3_eth_execution_api'; import HttpProvider from 'web3-providers-http'; import IpcProvider from 'web3-providers-ipc'; import WebsocketProvider from 'web3-providers-ws'; From 3d066edf40ca16c2f4ef64bd410078a0610a43ba Mon Sep 17 00:00:00 2001 From: Wyatt Barnes Date: Wed, 14 Sep 2022 20:39:44 -1000 Subject: [PATCH 12/16] Fix failing test --- packages/web3-eth/test/unit/default_transaction_builder.test.ts | 2 +- packages/web3-eth/test/unit/rpc_method_wrappers/call.test.ts | 2 +- .../web3-eth/test/unit/rpc_method_wrappers/estimate_gas.test.ts | 2 +- .../web3-eth/test/unit/rpc_method_wrappers/get_balance.test.ts | 2 +- .../web3-eth/test/unit/rpc_method_wrappers/get_block.test.ts | 2 +- .../test/unit/rpc_method_wrappers/get_block_number.test.ts | 2 +- .../rpc_method_wrappers/get_block_transaction_count.test.ts | 2 +- .../test/unit/rpc_method_wrappers/get_block_uncle_count.test.ts | 2 +- .../web3-eth/test/unit/rpc_method_wrappers/get_chain_id.test.ts | 2 +- .../web3-eth/test/unit/rpc_method_wrappers/get_code.test.ts | 2 +- .../web3-eth/test/unit/rpc_method_wrappers/get_coinbase.test.ts | 2 +- .../test/unit/rpc_method_wrappers/get_fee_history.test.ts | 2 +- .../test/unit/rpc_method_wrappers/get_gas_price.test.ts | 2 +- .../test/unit/rpc_method_wrappers/get_hash_rate.test.ts | 2 +- .../web3-eth/test/unit/rpc_method_wrappers/get_logs.test.ts | 2 +- .../unit/rpc_method_wrappers/get_pending_transactions.test.ts | 2 +- .../web3-eth/test/unit/rpc_method_wrappers/get_proof.test.ts | 2 +- .../test/unit/rpc_method_wrappers/get_protocol_version.test.ts | 2 +- .../test/unit/rpc_method_wrappers/get_storage_at.test.ts | 2 +- .../test/unit/rpc_method_wrappers/get_transaction.test.ts | 2 +- .../test/unit/rpc_method_wrappers/get_transaction_count.test.ts | 2 +- .../unit/rpc_method_wrappers/get_transaction_from_block.test.ts | 2 +- .../unit/rpc_method_wrappers/get_transaction_receipt.test.ts | 2 +- .../web3-eth/test/unit/rpc_method_wrappers/get_uncle.test.ts | 2 +- .../web3-eth/test/unit/rpc_method_wrappers/is_mining.test.ts | 2 +- .../web3-eth/test/unit/rpc_method_wrappers/is_syncing.test.ts | 2 +- .../unit/rpc_method_wrappers/send_signed_transaction.test.ts | 2 +- .../test/unit/rpc_method_wrappers/send_transaction.test.ts | 2 +- packages/web3-eth/test/unit/rpc_method_wrappers/sign.test.ts | 2 +- .../test/unit/rpc_method_wrappers/sign_transaction.test.ts | 2 +- .../web3-eth/test/unit/web3_eth_methods_no_parameters.test.ts | 2 +- .../web3-eth/test/unit/web3_eth_methods_with_parameters.test.ts | 2 +- packages/web3-net/test/unit/rpc_method_wrappers.test.ts | 2 +- 33 files changed, 33 insertions(+), 33 deletions(-) diff --git a/packages/web3-eth/test/unit/default_transaction_builder.test.ts b/packages/web3-eth/test/unit/default_transaction_builder.test.ts index ea0e191373e..cfe8acbbccf 100644 --- a/packages/web3-eth/test/unit/default_transaction_builder.test.ts +++ b/packages/web3-eth/test/unit/default_transaction_builder.test.ts @@ -32,7 +32,7 @@ import { } from '../../src/errors'; import { defaultTransactionBuilder } from '../../src/utils/transaction_builder'; -jest.mock('../../src/rpc_methods'); +jest.mock('web3-rpc-methods'); const expectedNetworkId = '0x4'; jest.mock('web3-net', () => ({ diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/call.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/call.test.ts index aedbbe88d21..963e6308ebc 100644 --- a/packages/web3-eth/test/unit/rpc_method_wrappers/call.test.ts +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/call.test.ts @@ -24,7 +24,7 @@ import { call } from '../../../src/rpc_method_wrappers'; import { mockRpcResponse, testData } from './fixtures/call'; import { formatTransaction } from '../../../src'; -jest.mock('../../../src/rpc_methods'); +jest.mock('web3-rpc-methods'); describe('call', () => { let web3Context: Web3Context; diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/estimate_gas.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/estimate_gas.test.ts index b574ebec098..e34b7c94727 100644 --- a/packages/web3-eth/test/unit/rpc_method_wrappers/estimate_gas.test.ts +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/estimate_gas.test.ts @@ -24,7 +24,7 @@ import { estimateGas } from '../../../src/rpc_method_wrappers'; import { mockRpcResponse, testData } from './fixtures/estimate_gas'; import { formatTransaction } from '../../../src'; -jest.mock('../../../src/rpc_methods'); +jest.mock('web3-rpc-methods'); describe('call', () => { let web3Context: Web3Context; diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_balance.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_balance.test.ts index 3eb9481c6fc..d66cfe9d66a 100644 --- a/packages/web3-eth/test/unit/rpc_method_wrappers/get_balance.test.ts +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_balance.test.ts @@ -23,7 +23,7 @@ import { ethRpcMethods } from 'web3-rpc-methods'; import { getBalance } from '../../../src/rpc_method_wrappers'; import { mockRpcResponse, testData } from './fixtures/get_balance'; -jest.mock('../../../src/rpc_methods'); +jest.mock('web3-rpc-methods'); describe('getBalance', () => { let web3Context: Web3Context; diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_block.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_block.test.ts index 7b6e60632d1..9820314250c 100644 --- a/packages/web3-eth/test/unit/rpc_method_wrappers/get_block.test.ts +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_block.test.ts @@ -24,7 +24,7 @@ import { getBlock } from '../../../src/rpc_method_wrappers'; import { mockRpcResponse, mockRpcResponseHydrated, testData } from './fixtures/get_block'; import { blockSchema } from '../../../src/schemas'; -jest.mock('../../../src/rpc_methods'); +jest.mock('web3-rpc-methods'); describe('getBlock', () => { let web3Context: Web3Context; diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_block_number.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_block_number.test.ts index 148223eef3f..b3a0b6d8907 100644 --- a/packages/web3-eth/test/unit/rpc_method_wrappers/get_block_number.test.ts +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_block_number.test.ts @@ -21,7 +21,7 @@ import { ethRpcMethods } from 'web3-rpc-methods'; import { getBlockNumber } from '../../../src/rpc_method_wrappers'; -jest.mock('../../../src/rpc_methods'); +jest.mock('web3-rpc-methods'); describe('getBlockNumber', () => { let web3Context: Web3Context; diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_block_transaction_count.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_block_transaction_count.test.ts index 14812d7ffc9..23318ecbf5f 100644 --- a/packages/web3-eth/test/unit/rpc_method_wrappers/get_block_transaction_count.test.ts +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_block_transaction_count.test.ts @@ -23,7 +23,7 @@ import { ethRpcMethods } from 'web3-rpc-methods'; import { getBlockTransactionCount } from '../../../src/rpc_method_wrappers'; import { mockRpcResponse, testData } from './fixtures/get_block_transaction_count'; -jest.mock('../../../src/rpc_methods'); +jest.mock('web3-rpc-methods'); describe('getBlockTransactionCount', () => { let web3Context: Web3Context; diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_block_uncle_count.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_block_uncle_count.test.ts index 96603e6252c..00fabbf6435 100644 --- a/packages/web3-eth/test/unit/rpc_method_wrappers/get_block_uncle_count.test.ts +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_block_uncle_count.test.ts @@ -23,7 +23,7 @@ import { ethRpcMethods } from 'web3-rpc-methods'; import { getBlockUncleCount } from '../../../src/rpc_method_wrappers'; import { mockRpcResponse, testData } from './fixtures/get_block_uncle_count'; -jest.mock('../../../src/rpc_methods'); +jest.mock('web3-rpc-methods'); describe('getBlockUncleCount', () => { let web3Context: Web3Context; diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_chain_id.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_chain_id.test.ts index 5f1a22a7c74..c6b258c5747 100644 --- a/packages/web3-eth/test/unit/rpc_method_wrappers/get_chain_id.test.ts +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_chain_id.test.ts @@ -21,7 +21,7 @@ import { ethRpcMethods } from 'web3-rpc-methods'; import { getChainId } from '../../../src/rpc_method_wrappers'; -jest.mock('../../../src/rpc_methods'); +jest.mock('web3-rpc-methods'); describe('getChainId', () => { let web3Context: Web3Context; diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_code.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_code.test.ts index eb685153333..69446031fad 100644 --- a/packages/web3-eth/test/unit/rpc_method_wrappers/get_code.test.ts +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_code.test.ts @@ -23,7 +23,7 @@ import { ethRpcMethods } from 'web3-rpc-methods'; import { getCode } from '../../../src/rpc_method_wrappers'; import { mockRpcResponse, testData } from './fixtures/get_code'; -jest.mock('../../../src/rpc_methods'); +jest.mock('web3-rpc-methods'); describe('getCode', () => { let web3Context: Web3Context; diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_coinbase.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_coinbase.test.ts index 1a351a22bda..6a896c33763 100644 --- a/packages/web3-eth/test/unit/rpc_method_wrappers/get_coinbase.test.ts +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_coinbase.test.ts @@ -20,7 +20,7 @@ import { ethRpcMethods } from 'web3-rpc-methods'; import { getCoinbase } from '../../../src/rpc_method_wrappers'; -jest.mock('../../../src/rpc_methods'); +jest.mock('web3-rpc-methods'); describe('getCoinbase', () => { let web3Context: Web3Context; diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_fee_history.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_fee_history.test.ts index aa1bf09ec05..9fe3d81461d 100644 --- a/packages/web3-eth/test/unit/rpc_method_wrappers/get_fee_history.test.ts +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_fee_history.test.ts @@ -25,7 +25,7 @@ import { mockRpcResponse, testData } from './fixtures/get_fee_history'; import { feeHistorySchema } from '../../../src/schemas'; import { NUMBER_DATA_FORMAT } from '../../../src/constants'; -jest.mock('../../../src/rpc_methods'); +jest.mock('web3-rpc-methods'); describe('getFeeHistory', () => { let web3Context: Web3Context; diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_gas_price.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_gas_price.test.ts index f35fb02ebd2..90d27461fd0 100644 --- a/packages/web3-eth/test/unit/rpc_method_wrappers/get_gas_price.test.ts +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_gas_price.test.ts @@ -21,7 +21,7 @@ import { ethRpcMethods } from 'web3-rpc-methods'; import { getGasPrice } from '../../../src/rpc_method_wrappers'; -jest.mock('../../../src/rpc_methods'); +jest.mock('web3-rpc-methods'); describe('getGasPrice', () => { let web3Context: Web3Context; diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_hash_rate.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_hash_rate.test.ts index eee7215553e..5b187d7814b 100644 --- a/packages/web3-eth/test/unit/rpc_method_wrappers/get_hash_rate.test.ts +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_hash_rate.test.ts @@ -21,7 +21,7 @@ import { ethRpcMethods } from 'web3-rpc-methods'; import { getHashRate } from '../../../src/rpc_method_wrappers'; -jest.mock('../../../src/rpc_methods'); +jest.mock('web3-rpc-methods'); describe('getHashRate', () => { let web3Context: Web3Context; diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_logs.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_logs.test.ts index 6b600b71258..ae9b8b48d99 100644 --- a/packages/web3-eth/test/unit/rpc_method_wrappers/get_logs.test.ts +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_logs.test.ts @@ -23,7 +23,7 @@ import { getLogs } from '../../../src/rpc_method_wrappers'; import { mockRpcResponse, testData } from './fixtures/get_logs'; import { logSchema } from '../../../src/schemas'; -jest.mock('../../../src/rpc_methods'); +jest.mock('web3-rpc-methods'); describe('getLogs', () => { let web3Context: Web3Context; diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_pending_transactions.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_pending_transactions.test.ts index 54958e6d8f9..c13d54627ed 100644 --- a/packages/web3-eth/test/unit/rpc_method_wrappers/get_pending_transactions.test.ts +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_pending_transactions.test.ts @@ -23,7 +23,7 @@ import { getPendingTransactions } from '../../../src/rpc_method_wrappers'; import { formatTransaction } from '../../../src'; import { mockRpcResponse } from './fixtures/get_pending_transactions'; -jest.mock('../../../src/rpc_methods'); +jest.mock('web3-rpc-methods'); describe('getPendingTransactions', () => { let web3Context: Web3Context; diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_proof.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_proof.test.ts index 3e36b06f602..df98218aba8 100644 --- a/packages/web3-eth/test/unit/rpc_method_wrappers/get_proof.test.ts +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_proof.test.ts @@ -24,7 +24,7 @@ import { getProof } from '../../../src/rpc_method_wrappers'; import { mockRpcResponse, testData } from './fixtures/get_proof'; import { accountSchema } from '../../../src/schemas'; -jest.mock('../../../src/rpc_methods'); +jest.mock('web3-rpc-methods'); describe('getProof', () => { let web3Context: Web3Context; diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_protocol_version.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_protocol_version.test.ts index 55a8f555ab6..5ebe9c200e9 100644 --- a/packages/web3-eth/test/unit/rpc_method_wrappers/get_protocol_version.test.ts +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_protocol_version.test.ts @@ -20,7 +20,7 @@ import { ethRpcMethods } from 'web3-rpc-methods'; import { getProtocolVersion } from '../../../src/rpc_method_wrappers'; -jest.mock('../../../src/rpc_methods'); +jest.mock('web3-rpc-methods'); describe('getProtocolVersion', () => { let web3Context: Web3Context; diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_storage_at.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_storage_at.test.ts index a542b2aaed9..cfda2820915 100644 --- a/packages/web3-eth/test/unit/rpc_method_wrappers/get_storage_at.test.ts +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_storage_at.test.ts @@ -23,7 +23,7 @@ import { ethRpcMethods } from 'web3-rpc-methods'; import { getStorageAt } from '../../../src/rpc_method_wrappers'; import { mockRpcResponse, testData } from './fixtures/get_storage_at'; -jest.mock('../../../src/rpc_methods'); +jest.mock('web3-rpc-methods'); describe('getStorageAt', () => { let web3Context: Web3Context; diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_transaction.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_transaction.test.ts index 58f9c737c41..d64e7ef59ed 100644 --- a/packages/web3-eth/test/unit/rpc_method_wrappers/get_transaction.test.ts +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_transaction.test.ts @@ -23,7 +23,7 @@ import { getTransaction } from '../../../src/rpc_method_wrappers'; import { mockRpcResponse, testData } from './fixtures/get_transaction'; import { formatTransaction } from '../../../src'; -jest.mock('../../../src/rpc_methods'); +jest.mock('web3-rpc-methods'); describe('getTransaction', () => { let web3Context: Web3Context; diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_transaction_count.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_transaction_count.test.ts index 06cbc5b78bd..a15a3fbf2ab 100644 --- a/packages/web3-eth/test/unit/rpc_method_wrappers/get_transaction_count.test.ts +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_transaction_count.test.ts @@ -23,7 +23,7 @@ import { ethRpcMethods } from 'web3-rpc-methods'; import { getTransactionCount } from '../../../src/rpc_method_wrappers'; import { mockRpcResponse, testData } from './fixtures/get_transaction_count'; -jest.mock('../../../src/rpc_methods'); +jest.mock('web3-rpc-methods'); describe('getTransactionCount', () => { let web3Context: Web3Context; diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_transaction_from_block.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_transaction_from_block.test.ts index edaa6f66742..08c93b1786a 100644 --- a/packages/web3-eth/test/unit/rpc_method_wrappers/get_transaction_from_block.test.ts +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_transaction_from_block.test.ts @@ -24,7 +24,7 @@ import { getTransactionFromBlock } from '../../../src/rpc_method_wrappers'; import { mockRpcResponse, testData } from './fixtures/get_transaction_from_block'; import { formatTransaction } from '../../../src'; -jest.mock('../../../src/rpc_methods'); +jest.mock('web3-rpc-methods'); describe('getTransactionFromBlock', () => { let web3Context: Web3Context; diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_transaction_receipt.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_transaction_receipt.test.ts index 11b084ed18f..cce0ab95ef3 100644 --- a/packages/web3-eth/test/unit/rpc_method_wrappers/get_transaction_receipt.test.ts +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_transaction_receipt.test.ts @@ -23,7 +23,7 @@ import { getTransactionReceipt } from '../../../src/rpc_method_wrappers'; import { mockRpcResponse, testData } from './fixtures/get_transaction_receipt'; import { transactionReceiptSchema } from '../../../src/schemas'; -jest.mock('../../../src/rpc_methods'); +jest.mock('web3-rpc-methods'); describe('getTransactionReceipt', () => { let web3Context: Web3Context; diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/get_uncle.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/get_uncle.test.ts index 2f43c243b1e..d7e23fdc2ca 100644 --- a/packages/web3-eth/test/unit/rpc_method_wrappers/get_uncle.test.ts +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/get_uncle.test.ts @@ -24,7 +24,7 @@ import { getUncle } from '../../../src/rpc_method_wrappers'; import { mockRpcResponse, testData } from './fixtures/get_uncle'; import { blockSchema } from '../../../src/schemas'; -jest.mock('../../../src/rpc_methods'); +jest.mock('web3-rpc-methods'); describe('getUncle', () => { let web3Context: Web3Context; diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/is_mining.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/is_mining.test.ts index 71e8198171c..e782aa321d4 100644 --- a/packages/web3-eth/test/unit/rpc_method_wrappers/is_mining.test.ts +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/is_mining.test.ts @@ -20,7 +20,7 @@ import { ethRpcMethods } from 'web3-rpc-methods'; import { isMining } from '../../../src/rpc_method_wrappers'; -jest.mock('../../../src/rpc_methods'); +jest.mock('web3-rpc-methods'); describe('isMining', () => { let web3Context: Web3Context; diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/is_syncing.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/is_syncing.test.ts index 113064bddcc..5920db0129b 100644 --- a/packages/web3-eth/test/unit/rpc_method_wrappers/is_syncing.test.ts +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/is_syncing.test.ts @@ -20,7 +20,7 @@ import { ethRpcMethods } from 'web3-rpc-methods'; import { isSyncing } from '../../../src/rpc_method_wrappers'; -jest.mock('../../../src/rpc_methods'); +jest.mock('web3-rpc-methods'); describe('isSyncing', () => { let web3Context: Web3Context; diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/send_signed_transaction.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/send_signed_transaction.test.ts index 99f79b8aad2..88a6c449d30 100644 --- a/packages/web3-eth/test/unit/rpc_method_wrappers/send_signed_transaction.test.ts +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/send_signed_transaction.test.ts @@ -29,7 +29,7 @@ import { } from './fixtures/send_signed_transaction'; import { transactionReceiptSchema } from '../../../src/schemas'; -jest.mock('../../../src/rpc_methods'); +jest.mock('web3-rpc-methods'); jest.mock('../../../src/utils/watch_transaction_for_confirmations'); describe('sendTransaction', () => { diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/send_transaction.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/send_transaction.test.ts index 715223ad5ba..51dbea0ca5a 100644 --- a/packages/web3-eth/test/unit/rpc_method_wrappers/send_transaction.test.ts +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/send_transaction.test.ts @@ -32,7 +32,7 @@ import { } from './fixtures/send_transaction'; import { transactionReceiptSchema } from '../../../src/schemas'; -jest.mock('../../../src/rpc_methods'); +jest.mock('web3-rpc-methods'); jest.mock('../../../src/utils/watch_transaction_for_confirmations'); describe('sendTransaction', () => { diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/sign.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/sign.test.ts index 7c829a8479a..840dd86d12a 100644 --- a/packages/web3-eth/test/unit/rpc_method_wrappers/sign.test.ts +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/sign.test.ts @@ -22,7 +22,7 @@ import { ethRpcMethods } from 'web3-rpc-methods'; import { sign } from '../../../src/rpc_method_wrappers'; import { mockRpcResponse, testData } from './fixtures/sign'; -jest.mock('../../../src/rpc_methods'); +jest.mock('web3-rpc-methods'); describe('sign', () => { let web3Context: Web3Context; diff --git a/packages/web3-eth/test/unit/rpc_method_wrappers/sign_transaction.test.ts b/packages/web3-eth/test/unit/rpc_method_wrappers/sign_transaction.test.ts index cc189e5776c..8ad54c0166a 100644 --- a/packages/web3-eth/test/unit/rpc_method_wrappers/sign_transaction.test.ts +++ b/packages/web3-eth/test/unit/rpc_method_wrappers/sign_transaction.test.ts @@ -24,7 +24,7 @@ import { signTransaction } from '../../../src/rpc_method_wrappers'; import { returnFormat, testData } from './fixtures/sign_transaction'; import { formatTransaction } from '../../../src'; -jest.mock('../../../src/rpc_methods'); +jest.mock('web3-rpc-methods'); describe('signTransaction', () => { let web3Context: Web3Context; diff --git a/packages/web3-eth/test/unit/web3_eth_methods_no_parameters.test.ts b/packages/web3-eth/test/unit/web3_eth_methods_no_parameters.test.ts index 827d680962b..6865188b456 100644 --- a/packages/web3-eth/test/unit/web3_eth_methods_no_parameters.test.ts +++ b/packages/web3-eth/test/unit/web3_eth_methods_no_parameters.test.ts @@ -18,7 +18,7 @@ import { ethRpcMethods } from 'web3-rpc-methods'; import Web3Eth from '../../src/index'; -jest.mock('../../src/rpc_methods'); +jest.mock('web3-rpc-methods'); describe('web3_eth_methods_no_parameters', () => { let web3Eth: Web3Eth; diff --git a/packages/web3-eth/test/unit/web3_eth_methods_with_parameters.test.ts b/packages/web3-eth/test/unit/web3_eth_methods_with_parameters.test.ts index 442839d581c..587e715b28e 100644 --- a/packages/web3-eth/test/unit/web3_eth_methods_with_parameters.test.ts +++ b/packages/web3-eth/test/unit/web3_eth_methods_with_parameters.test.ts @@ -50,7 +50,7 @@ import { txReceipt, } from '../fixtures/web3_eth_methods_with_parameters'; -jest.mock('../../src/rpc_methods'); +jest.mock('web3-rpc-methods'); jest.mock('../../src/rpc_method_wrappers'); // eslint-disable-next-line @typescript-eslint/no-unsafe-call jest.spyOn(rpcMethodWrappers, 'getTransaction').mockResolvedValue(tx); diff --git a/packages/web3-net/test/unit/rpc_method_wrappers.test.ts b/packages/web3-net/test/unit/rpc_method_wrappers.test.ts index ee5f2915346..47d014e2b3e 100644 --- a/packages/web3-net/test/unit/rpc_method_wrappers.test.ts +++ b/packages/web3-net/test/unit/rpc_method_wrappers.test.ts @@ -20,7 +20,7 @@ import { Net } from '../../src'; import { getIdValidData, getPeerCountValidData } from '../fixtures/rpc_method_wrappers'; import { getId, getPeerCount, isListening } from '../../src/rpc_method_wrappers'; -jest.mock('../../src/rpc_methods'); +jest.mock('web3-rpc-methods'); describe('rpc_method_wrappers', () => { let web3Net: Net; From 40a6c95f2a9b1d34334632493ed5e8dfd33e041b Mon Sep 17 00:00:00 2001 From: Wyatt Barnes Date: Thu, 15 Sep 2022 14:09:21 -1000 Subject: [PATCH 13/16] Move rpc_methods tests from web3-eth to web3-rpc-methods --- packages/web3-eth/CHANGELOG.md | 1 + .../test/unit/eth_rpc_methods}/call.test.ts | 2 +- .../test/unit/eth_rpc_methods}/compile_lll.test.ts | 2 +- .../test/unit/eth_rpc_methods}/compile_serpent.test.ts | 2 +- .../test/unit/eth_rpc_methods}/compile_solidity.test.ts | 2 +- .../test/unit/eth_rpc_methods}/estimate_gas.test.ts | 2 +- .../test/unit/eth_rpc_methods}/fixtures/call.ts | 0 .../test/unit/eth_rpc_methods}/fixtures/compile_lll.ts | 0 .../test/unit/eth_rpc_methods}/fixtures/compile_serpent.ts | 0 .../test/unit/eth_rpc_methods}/fixtures/compile_solidity.ts | 0 .../test/unit/eth_rpc_methods}/fixtures/estimate_gas.ts | 0 .../test/unit/eth_rpc_methods}/fixtures/get_balance.ts | 0 .../test/unit/eth_rpc_methods}/fixtures/get_block_by_hash.ts | 0 .../test/unit/eth_rpc_methods}/fixtures/get_block_by_number.ts | 0 .../fixtures/get_block_transaction_count_by_hash.ts | 0 .../fixtures/get_block_transaction_count_by_number.ts | 0 .../test/unit/eth_rpc_methods}/fixtures/get_code.ts | 0 .../test/unit/eth_rpc_methods}/fixtures/get_fee_history.ts | 0 .../test/unit/eth_rpc_methods}/fixtures/get_filter_changes.ts | 0 .../test/unit/eth_rpc_methods}/fixtures/get_filter_logs.ts | 0 .../test/unit/eth_rpc_methods}/fixtures/get_logs.ts | 0 .../test/unit/eth_rpc_methods}/fixtures/get_proof.ts | 0 .../test/unit/eth_rpc_methods}/fixtures/get_storage_at.ts | 0 .../fixtures/get_transaction_by_block_hash_and_index.ts | 0 .../fixtures/get_transaction_by_block_number_and_index.ts | 0 .../unit/eth_rpc_methods}/fixtures/get_transaction_by_hash.ts | 0 .../unit/eth_rpc_methods}/fixtures/get_transaction_count.ts | 0 .../unit/eth_rpc_methods}/fixtures/get_transaction_receipt.ts | 0 .../fixtures/get_uncle_by_block_hash_and_index.ts | 0 .../eth_rpc_methods}/fixtures/get_uncle_count_by_block_hash.ts | 0 .../fixtures/get_uncle_count_by_block_number.ts | 0 .../test/unit/eth_rpc_methods}/fixtures/new_filter.ts | 0 .../unit/eth_rpc_methods}/fixtures/send_raw_transaction.ts | 0 .../test/unit/eth_rpc_methods}/fixtures/send_transaction.ts | 0 .../test/unit/eth_rpc_methods}/fixtures/sign.ts | 0 .../test/unit/eth_rpc_methods}/fixtures/sign_transaction.ts | 0 .../test/unit/eth_rpc_methods}/fixtures/submit_hashrate.ts | 0 .../test/unit/eth_rpc_methods}/fixtures/submit_work.ts | 0 .../test/unit/eth_rpc_methods}/fixtures/uninstall_filter.ts | 0 .../test/unit/eth_rpc_methods}/get_accounts.test.ts | 3 ++- .../test/unit/eth_rpc_methods}/get_balance.test.ts | 2 +- .../test/unit/eth_rpc_methods}/get_block_by_hash.test.ts | 2 +- .../test/unit/eth_rpc_methods}/get_block_by_number.test.ts | 2 +- .../test/unit/eth_rpc_methods}/get_block_number.test.ts | 3 ++- .../get_block_transaction_count_by_hash.test.ts | 2 +- .../get_block_transaction_count_by_number.test.ts | 2 +- .../test/unit/eth_rpc_methods}/get_chain_id.test.ts | 3 ++- .../test/unit/eth_rpc_methods}/get_code.test.ts | 2 +- .../test/unit/eth_rpc_methods}/get_coinbase.test.ts | 3 ++- .../test/unit/eth_rpc_methods}/get_compilers.test.ts | 3 ++- .../test/unit/eth_rpc_methods}/get_fee_history.test.ts | 2 +- .../test/unit/eth_rpc_methods}/get_filter_changes.test.ts | 2 +- .../test/unit/eth_rpc_methods}/get_filter_logs.test.ts | 2 +- .../test/unit/eth_rpc_methods}/get_gas_price.test.ts | 3 ++- .../test/unit/eth_rpc_methods}/get_hash_rate.test.ts | 3 ++- .../test/unit/eth_rpc_methods}/get_logs.test.ts | 2 +- .../test/unit/eth_rpc_methods}/get_mining.test.ts | 3 ++- .../test/unit/eth_rpc_methods}/get_node_info.test.ts | 3 ++- .../test/unit/eth_rpc_methods}/get_pending_transaction.test.ts | 3 ++- .../test/unit/eth_rpc_methods}/get_proof.test.ts | 2 +- .../test/unit/eth_rpc_methods}/get_protocol_version.test.ts | 3 ++- .../test/unit/eth_rpc_methods}/get_storage_at.test.ts | 2 +- .../test/unit/eth_rpc_methods}/get_syncing.test.ts | 3 ++- .../get_transaction_by_block_hash_and_index.test.ts | 2 +- .../get_transaction_by_block_number_and_index.test.ts | 2 +- .../test/unit/eth_rpc_methods}/get_transaction_by_hash.test.ts | 2 +- .../test/unit/eth_rpc_methods}/get_transaction_count.test.ts | 2 +- .../test/unit/eth_rpc_methods}/get_transaction_receipt.test.ts | 2 +- .../eth_rpc_methods}/get_uncle_by_block_hash_and_index.test.ts | 2 +- .../eth_rpc_methods}/get_uncle_count_by_block_hash.test.ts | 2 +- .../eth_rpc_methods}/get_uncle_count_by_block_number.test.ts | 2 +- .../test/unit/eth_rpc_methods}/get_work.test.ts | 3 ++- .../test/unit/eth_rpc_methods}/new_block_filter.test.ts | 3 ++- .../test/unit/eth_rpc_methods}/new_filter.test.ts | 2 +- .../eth_rpc_methods}/new_pending_transaction_filter.test.ts | 3 ++- .../test/unit/eth_rpc_methods}/request_accounts.test.ts | 3 ++- .../test/unit/eth_rpc_methods}/send_raw_transaction.test.ts | 2 +- .../test/unit/eth_rpc_methods}/send_transaction.test.ts | 2 +- .../test/unit/eth_rpc_methods}/sign.test.ts | 2 +- .../test/unit/eth_rpc_methods}/sign_transaction.test.ts | 2 +- .../test/unit/eth_rpc_methods}/submit_hashrate.test.ts | 2 +- .../test/unit/eth_rpc_methods}/submit_work.test.ts | 2 +- .../test/unit/eth_rpc_methods}/uninstall_filter.test.ts | 2 +- 83 files changed, 66 insertions(+), 49 deletions(-) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/call.test.ts (98%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/compile_lll.test.ts (97%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/compile_serpent.test.ts (97%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/compile_solidity.test.ts (97%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/estimate_gas.test.ts (98%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/fixtures/call.ts (100%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/fixtures/compile_lll.ts (100%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/fixtures/compile_serpent.ts (100%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/fixtures/compile_solidity.ts (100%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/fixtures/estimate_gas.ts (100%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/fixtures/get_balance.ts (100%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/fixtures/get_block_by_hash.ts (100%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/fixtures/get_block_by_number.ts (100%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/fixtures/get_block_transaction_count_by_hash.ts (100%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/fixtures/get_block_transaction_count_by_number.ts (100%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/fixtures/get_code.ts (100%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/fixtures/get_fee_history.ts (100%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/fixtures/get_filter_changes.ts (100%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/fixtures/get_filter_logs.ts (100%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/fixtures/get_logs.ts (100%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/fixtures/get_proof.ts (100%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/fixtures/get_storage_at.ts (100%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/fixtures/get_transaction_by_block_hash_and_index.ts (100%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/fixtures/get_transaction_by_block_number_and_index.ts (100%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/fixtures/get_transaction_by_hash.ts (100%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/fixtures/get_transaction_count.ts (100%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/fixtures/get_transaction_receipt.ts (100%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/fixtures/get_uncle_by_block_hash_and_index.ts (100%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/fixtures/get_uncle_count_by_block_hash.ts (100%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/fixtures/get_uncle_count_by_block_number.ts (100%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/fixtures/new_filter.ts (100%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/fixtures/send_raw_transaction.ts (100%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/fixtures/send_transaction.ts (100%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/fixtures/sign.ts (100%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/fixtures/sign_transaction.ts (100%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/fixtures/submit_hashrate.ts (100%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/fixtures/submit_work.ts (100%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/fixtures/uninstall_filter.ts (100%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/get_accounts.test.ts (97%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/get_balance.test.ts (97%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/get_block_by_hash.test.ts (97%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/get_block_by_number.test.ts (98%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/get_block_number.test.ts (97%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/get_block_transaction_count_by_hash.test.ts (98%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/get_block_transaction_count_by_number.test.ts (98%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/get_chain_id.test.ts (97%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/get_code.test.ts (97%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/get_coinbase.test.ts (97%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/get_compilers.test.ts (97%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/get_fee_history.test.ts (98%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/get_filter_changes.test.ts (97%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/get_filter_logs.test.ts (97%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/get_gas_price.test.ts (97%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/get_hash_rate.test.ts (97%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/get_logs.test.ts (97%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/get_mining.test.ts (97%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/get_node_info.test.ts (97%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/get_pending_transaction.test.ts (97%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/get_proof.test.ts (98%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/get_protocol_version.test.ts (97%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/get_storage_at.test.ts (98%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/get_syncing.test.ts (97%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/get_transaction_by_block_hash_and_index.test.ts (98%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/get_transaction_by_block_number_and_index.test.ts (98%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/get_transaction_by_hash.test.ts (98%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/get_transaction_count.test.ts (98%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/get_transaction_receipt.test.ts (98%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/get_uncle_by_block_hash_and_index.test.ts (98%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/get_uncle_count_by_block_hash.test.ts (98%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/get_uncle_count_by_block_number.test.ts (98%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/get_work.test.ts (97%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/new_block_filter.test.ts (97%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/new_filter.test.ts (97%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/new_pending_transaction_filter.test.ts (97%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/request_accounts.test.ts (97%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/send_raw_transaction.test.ts (98%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/send_transaction.test.ts (98%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/sign.test.ts (97%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/sign_transaction.test.ts (98%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/submit_hashrate.test.ts (98%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/submit_work.test.ts (98%) rename packages/{web3-eth/test/unit/rpc_methods => web3-rpc-methods/test/unit/eth_rpc_methods}/uninstall_filter.test.ts (97%) diff --git a/packages/web3-eth/CHANGELOG.md b/packages/web3-eth/CHANGELOG.md index 722eb5629bc..7aa7e0bfaaa 100644 --- a/packages/web3-eth/CHANGELOG.md +++ b/packages/web3-eth/CHANGELOG.md @@ -46,3 +46,4 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `Web3EthExecutionAPI` is now imported via `web3-types` instead of `web3_eth_execution_api.ts` (#5441) - Replace the imported methods from `rpc_methods.ts` with `ethRpcMethods` imports from `web3-rpc-methods` (#5441) - `Web3NetAPI` is now imported from `web3-types` instead of `web3-net` (#5441) +- Moved `rpc_methods` tests to `web3-rpc-methods` (#5441) diff --git a/packages/web3-eth/test/unit/rpc_methods/call.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/call.test.ts similarity index 98% rename from packages/web3-eth/test/unit/rpc_methods/call.test.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/call.test.ts index 062be2402d8..a40d68283a3 100644 --- a/packages/web3-eth/test/unit/rpc_methods/call.test.ts +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/call.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; -import { ethRpcMethods } from 'web3-rpc-methods'; +import { ethRpcMethods } from '../../../src/index'; import { testData } from './fixtures/call'; jest.mock('web3-validator'); diff --git a/packages/web3-eth/test/unit/rpc_methods/compile_lll.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/compile_lll.test.ts similarity index 97% rename from packages/web3-eth/test/unit/rpc_methods/compile_lll.test.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/compile_lll.test.ts index c1963da7ea3..77829a85376 100644 --- a/packages/web3-eth/test/unit/rpc_methods/compile_lll.test.ts +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/compile_lll.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; -import { ethRpcMethods } from 'web3-rpc-methods'; +import { ethRpcMethods } from '../../../src/index'; import { testData } from './fixtures/compile_lll'; jest.mock('web3-validator'); diff --git a/packages/web3-eth/test/unit/rpc_methods/compile_serpent.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/compile_serpent.test.ts similarity index 97% rename from packages/web3-eth/test/unit/rpc_methods/compile_serpent.test.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/compile_serpent.test.ts index 01bc0b2c957..2b1e2668319 100644 --- a/packages/web3-eth/test/unit/rpc_methods/compile_serpent.test.ts +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/compile_serpent.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; -import { ethRpcMethods } from 'web3-rpc-methods'; +import { ethRpcMethods } from '../../../src/index'; import { testData } from './fixtures/compile_lll'; jest.mock('web3-validator'); diff --git a/packages/web3-eth/test/unit/rpc_methods/compile_solidity.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/compile_solidity.test.ts similarity index 97% rename from packages/web3-eth/test/unit/rpc_methods/compile_solidity.test.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/compile_solidity.test.ts index eb9811223cd..7587fa20c0f 100644 --- a/packages/web3-eth/test/unit/rpc_methods/compile_solidity.test.ts +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/compile_solidity.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; -import { ethRpcMethods } from 'web3-rpc-methods'; +import { ethRpcMethods } from '../../../src/index'; import { testData } from './fixtures/compile_solidity'; jest.mock('web3-validator'); diff --git a/packages/web3-eth/test/unit/rpc_methods/estimate_gas.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/estimate_gas.test.ts similarity index 98% rename from packages/web3-eth/test/unit/rpc_methods/estimate_gas.test.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/estimate_gas.test.ts index 8e515a1c414..b5873369e83 100644 --- a/packages/web3-eth/test/unit/rpc_methods/estimate_gas.test.ts +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/estimate_gas.test.ts @@ -31,8 +31,8 @@ along with web3.js. If not, see . /* eslint-disable @typescript-eslint/no-unused-vars */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; -import { ethRpcMethods } from 'web3-rpc-methods'; +import { ethRpcMethods } from '../../../src/index'; import { testData } from './fixtures/estimate_gas'; jest.mock('web3-validator'); diff --git a/packages/web3-eth/test/unit/rpc_methods/fixtures/call.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/call.ts similarity index 100% rename from packages/web3-eth/test/unit/rpc_methods/fixtures/call.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/call.ts diff --git a/packages/web3-eth/test/unit/rpc_methods/fixtures/compile_lll.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/compile_lll.ts similarity index 100% rename from packages/web3-eth/test/unit/rpc_methods/fixtures/compile_lll.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/compile_lll.ts diff --git a/packages/web3-eth/test/unit/rpc_methods/fixtures/compile_serpent.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/compile_serpent.ts similarity index 100% rename from packages/web3-eth/test/unit/rpc_methods/fixtures/compile_serpent.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/compile_serpent.ts diff --git a/packages/web3-eth/test/unit/rpc_methods/fixtures/compile_solidity.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/compile_solidity.ts similarity index 100% rename from packages/web3-eth/test/unit/rpc_methods/fixtures/compile_solidity.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/compile_solidity.ts diff --git a/packages/web3-eth/test/unit/rpc_methods/fixtures/estimate_gas.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/estimate_gas.ts similarity index 100% rename from packages/web3-eth/test/unit/rpc_methods/fixtures/estimate_gas.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/estimate_gas.ts diff --git a/packages/web3-eth/test/unit/rpc_methods/fixtures/get_balance.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_balance.ts similarity index 100% rename from packages/web3-eth/test/unit/rpc_methods/fixtures/get_balance.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_balance.ts diff --git a/packages/web3-eth/test/unit/rpc_methods/fixtures/get_block_by_hash.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_block_by_hash.ts similarity index 100% rename from packages/web3-eth/test/unit/rpc_methods/fixtures/get_block_by_hash.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_block_by_hash.ts diff --git a/packages/web3-eth/test/unit/rpc_methods/fixtures/get_block_by_number.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_block_by_number.ts similarity index 100% rename from packages/web3-eth/test/unit/rpc_methods/fixtures/get_block_by_number.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_block_by_number.ts diff --git a/packages/web3-eth/test/unit/rpc_methods/fixtures/get_block_transaction_count_by_hash.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_block_transaction_count_by_hash.ts similarity index 100% rename from packages/web3-eth/test/unit/rpc_methods/fixtures/get_block_transaction_count_by_hash.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_block_transaction_count_by_hash.ts diff --git a/packages/web3-eth/test/unit/rpc_methods/fixtures/get_block_transaction_count_by_number.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_block_transaction_count_by_number.ts similarity index 100% rename from packages/web3-eth/test/unit/rpc_methods/fixtures/get_block_transaction_count_by_number.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_block_transaction_count_by_number.ts diff --git a/packages/web3-eth/test/unit/rpc_methods/fixtures/get_code.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_code.ts similarity index 100% rename from packages/web3-eth/test/unit/rpc_methods/fixtures/get_code.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_code.ts diff --git a/packages/web3-eth/test/unit/rpc_methods/fixtures/get_fee_history.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_fee_history.ts similarity index 100% rename from packages/web3-eth/test/unit/rpc_methods/fixtures/get_fee_history.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_fee_history.ts diff --git a/packages/web3-eth/test/unit/rpc_methods/fixtures/get_filter_changes.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_filter_changes.ts similarity index 100% rename from packages/web3-eth/test/unit/rpc_methods/fixtures/get_filter_changes.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_filter_changes.ts diff --git a/packages/web3-eth/test/unit/rpc_methods/fixtures/get_filter_logs.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_filter_logs.ts similarity index 100% rename from packages/web3-eth/test/unit/rpc_methods/fixtures/get_filter_logs.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_filter_logs.ts diff --git a/packages/web3-eth/test/unit/rpc_methods/fixtures/get_logs.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_logs.ts similarity index 100% rename from packages/web3-eth/test/unit/rpc_methods/fixtures/get_logs.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_logs.ts diff --git a/packages/web3-eth/test/unit/rpc_methods/fixtures/get_proof.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_proof.ts similarity index 100% rename from packages/web3-eth/test/unit/rpc_methods/fixtures/get_proof.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_proof.ts diff --git a/packages/web3-eth/test/unit/rpc_methods/fixtures/get_storage_at.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_storage_at.ts similarity index 100% rename from packages/web3-eth/test/unit/rpc_methods/fixtures/get_storage_at.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_storage_at.ts diff --git a/packages/web3-eth/test/unit/rpc_methods/fixtures/get_transaction_by_block_hash_and_index.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_transaction_by_block_hash_and_index.ts similarity index 100% rename from packages/web3-eth/test/unit/rpc_methods/fixtures/get_transaction_by_block_hash_and_index.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_transaction_by_block_hash_and_index.ts diff --git a/packages/web3-eth/test/unit/rpc_methods/fixtures/get_transaction_by_block_number_and_index.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_transaction_by_block_number_and_index.ts similarity index 100% rename from packages/web3-eth/test/unit/rpc_methods/fixtures/get_transaction_by_block_number_and_index.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_transaction_by_block_number_and_index.ts diff --git a/packages/web3-eth/test/unit/rpc_methods/fixtures/get_transaction_by_hash.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_transaction_by_hash.ts similarity index 100% rename from packages/web3-eth/test/unit/rpc_methods/fixtures/get_transaction_by_hash.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_transaction_by_hash.ts diff --git a/packages/web3-eth/test/unit/rpc_methods/fixtures/get_transaction_count.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_transaction_count.ts similarity index 100% rename from packages/web3-eth/test/unit/rpc_methods/fixtures/get_transaction_count.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_transaction_count.ts diff --git a/packages/web3-eth/test/unit/rpc_methods/fixtures/get_transaction_receipt.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_transaction_receipt.ts similarity index 100% rename from packages/web3-eth/test/unit/rpc_methods/fixtures/get_transaction_receipt.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_transaction_receipt.ts diff --git a/packages/web3-eth/test/unit/rpc_methods/fixtures/get_uncle_by_block_hash_and_index.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_uncle_by_block_hash_and_index.ts similarity index 100% rename from packages/web3-eth/test/unit/rpc_methods/fixtures/get_uncle_by_block_hash_and_index.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_uncle_by_block_hash_and_index.ts diff --git a/packages/web3-eth/test/unit/rpc_methods/fixtures/get_uncle_count_by_block_hash.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_uncle_count_by_block_hash.ts similarity index 100% rename from packages/web3-eth/test/unit/rpc_methods/fixtures/get_uncle_count_by_block_hash.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_uncle_count_by_block_hash.ts diff --git a/packages/web3-eth/test/unit/rpc_methods/fixtures/get_uncle_count_by_block_number.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_uncle_count_by_block_number.ts similarity index 100% rename from packages/web3-eth/test/unit/rpc_methods/fixtures/get_uncle_count_by_block_number.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/get_uncle_count_by_block_number.ts diff --git a/packages/web3-eth/test/unit/rpc_methods/fixtures/new_filter.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/new_filter.ts similarity index 100% rename from packages/web3-eth/test/unit/rpc_methods/fixtures/new_filter.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/new_filter.ts diff --git a/packages/web3-eth/test/unit/rpc_methods/fixtures/send_raw_transaction.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/send_raw_transaction.ts similarity index 100% rename from packages/web3-eth/test/unit/rpc_methods/fixtures/send_raw_transaction.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/send_raw_transaction.ts diff --git a/packages/web3-eth/test/unit/rpc_methods/fixtures/send_transaction.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/send_transaction.ts similarity index 100% rename from packages/web3-eth/test/unit/rpc_methods/fixtures/send_transaction.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/send_transaction.ts diff --git a/packages/web3-eth/test/unit/rpc_methods/fixtures/sign.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/sign.ts similarity index 100% rename from packages/web3-eth/test/unit/rpc_methods/fixtures/sign.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/sign.ts diff --git a/packages/web3-eth/test/unit/rpc_methods/fixtures/sign_transaction.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/sign_transaction.ts similarity index 100% rename from packages/web3-eth/test/unit/rpc_methods/fixtures/sign_transaction.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/sign_transaction.ts diff --git a/packages/web3-eth/test/unit/rpc_methods/fixtures/submit_hashrate.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/submit_hashrate.ts similarity index 100% rename from packages/web3-eth/test/unit/rpc_methods/fixtures/submit_hashrate.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/submit_hashrate.ts diff --git a/packages/web3-eth/test/unit/rpc_methods/fixtures/submit_work.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/submit_work.ts similarity index 100% rename from packages/web3-eth/test/unit/rpc_methods/fixtures/submit_work.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/submit_work.ts diff --git a/packages/web3-eth/test/unit/rpc_methods/fixtures/uninstall_filter.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/uninstall_filter.ts similarity index 100% rename from packages/web3-eth/test/unit/rpc_methods/fixtures/uninstall_filter.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/fixtures/uninstall_filter.ts diff --git a/packages/web3-eth/test/unit/rpc_methods/get_accounts.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_accounts.test.ts similarity index 97% rename from packages/web3-eth/test/unit/rpc_methods/get_accounts.test.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_accounts.test.ts index e257c86db76..72ec86514bf 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_accounts.test.ts +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_accounts.test.ts @@ -29,7 +29,8 @@ along with web3.js. If not, see . // along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; -import { ethRpcMethods } from 'web3-rpc-methods'; + +import { ethRpcMethods } from '../../../src/index'; describe('getAccounts', () => { let requestManagerSendSpy: jest.Mock; diff --git a/packages/web3-eth/test/unit/rpc_methods/get_balance.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_balance.test.ts similarity index 97% rename from packages/web3-eth/test/unit/rpc_methods/get_balance.test.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_balance.test.ts index fff5c6699f7..e4f83d8bfa2 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_balance.test.ts +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_balance.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; -import { ethRpcMethods } from 'web3-rpc-methods'; +import { ethRpcMethods } from '../../../src/index'; import { testData } from './fixtures/get_balance'; jest.mock('web3-validator'); diff --git a/packages/web3-eth/test/unit/rpc_methods/get_block_by_hash.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_block_by_hash.test.ts similarity index 97% rename from packages/web3-eth/test/unit/rpc_methods/get_block_by_hash.test.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_block_by_hash.test.ts index ccb595cf198..782ba9e495f 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_block_by_hash.test.ts +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_block_by_hash.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; -import { ethRpcMethods } from 'web3-rpc-methods'; +import { ethRpcMethods } from '../../../src/index'; import { testData } from './fixtures/get_block_by_hash'; jest.mock('web3-validator'); diff --git a/packages/web3-eth/test/unit/rpc_methods/get_block_by_number.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_block_by_number.test.ts similarity index 98% rename from packages/web3-eth/test/unit/rpc_methods/get_block_by_number.test.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_block_by_number.test.ts index 4664410c401..381991b4352 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_block_by_number.test.ts +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_block_by_number.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; -import { ethRpcMethods } from 'web3-rpc-methods'; +import { ethRpcMethods } from '../../../src/index'; import { testData } from './fixtures/get_block_by_number'; jest.mock('web3-validator'); diff --git a/packages/web3-eth/test/unit/rpc_methods/get_block_number.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_block_number.test.ts similarity index 97% rename from packages/web3-eth/test/unit/rpc_methods/get_block_number.test.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_block_number.test.ts index 06901e66286..14c4146c338 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_block_number.test.ts +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_block_number.test.ts @@ -29,7 +29,8 @@ along with web3.js. If not, see . // along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; -import { ethRpcMethods } from 'web3-rpc-methods'; + +import { ethRpcMethods } from '../../../src/index'; describe('getBlockNumber', () => { let requestManagerSendSpy: jest.Mock; diff --git a/packages/web3-eth/test/unit/rpc_methods/get_block_transaction_count_by_hash.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_block_transaction_count_by_hash.test.ts similarity index 98% rename from packages/web3-eth/test/unit/rpc_methods/get_block_transaction_count_by_hash.test.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_block_transaction_count_by_hash.test.ts index 77e83d366b9..d8578c1f4e5 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_block_transaction_count_by_hash.test.ts +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_block_transaction_count_by_hash.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; -import { ethRpcMethods } from 'web3-rpc-methods'; +import { ethRpcMethods } from '../../../src/index'; import { testData } from './fixtures/get_block_transaction_count_by_hash'; jest.mock('web3-validator'); diff --git a/packages/web3-eth/test/unit/rpc_methods/get_block_transaction_count_by_number.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_block_transaction_count_by_number.test.ts similarity index 98% rename from packages/web3-eth/test/unit/rpc_methods/get_block_transaction_count_by_number.test.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_block_transaction_count_by_number.test.ts index 5e9a3065ff4..9e092f62d0b 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_block_transaction_count_by_number.test.ts +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_block_transaction_count_by_number.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; -import { ethRpcMethods } from 'web3-rpc-methods'; +import { ethRpcMethods } from '../../../src/index'; import { testData } from './fixtures/get_block_transaction_count_by_number'; jest.mock('web3-validator'); diff --git a/packages/web3-eth/test/unit/rpc_methods/get_chain_id.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_chain_id.test.ts similarity index 97% rename from packages/web3-eth/test/unit/rpc_methods/get_chain_id.test.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_chain_id.test.ts index e145cd50c1f..d13e893a9a2 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_chain_id.test.ts +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_chain_id.test.ts @@ -29,7 +29,8 @@ along with web3.js. If not, see . // along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; -import { ethRpcMethods } from 'web3-rpc-methods'; + +import { ethRpcMethods } from '../../../src/index'; describe('getChainId', () => { let requestManagerSendSpy: jest.Mock; diff --git a/packages/web3-eth/test/unit/rpc_methods/get_code.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_code.test.ts similarity index 97% rename from packages/web3-eth/test/unit/rpc_methods/get_code.test.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_code.test.ts index 761d530c857..4c0f7327998 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_code.test.ts +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_code.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; -import { ethRpcMethods } from 'web3-rpc-methods'; +import { ethRpcMethods } from '../../../src/index'; import { testData } from './fixtures/get_code'; jest.mock('web3-validator'); diff --git a/packages/web3-eth/test/unit/rpc_methods/get_coinbase.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_coinbase.test.ts similarity index 97% rename from packages/web3-eth/test/unit/rpc_methods/get_coinbase.test.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_coinbase.test.ts index 57593fbed2b..3f875870fa2 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_coinbase.test.ts +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_coinbase.test.ts @@ -29,7 +29,8 @@ along with web3.js. If not, see . // along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; -import { ethRpcMethods } from 'web3-rpc-methods'; + +import { ethRpcMethods } from '../../../src/index'; describe('getCoinbase', () => { let requestManagerSendSpy: jest.Mock; diff --git a/packages/web3-eth/test/unit/rpc_methods/get_compilers.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_compilers.test.ts similarity index 97% rename from packages/web3-eth/test/unit/rpc_methods/get_compilers.test.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_compilers.test.ts index 7c8aeec58e3..bcaf636f0db 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_compilers.test.ts +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_compilers.test.ts @@ -29,7 +29,8 @@ along with web3.js. If not, see . // along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; -import { ethRpcMethods } from 'web3-rpc-methods'; + +import { ethRpcMethods } from '../../../src/index'; describe('getCompilers', () => { let requestManagerSendSpy: jest.Mock; diff --git a/packages/web3-eth/test/unit/rpc_methods/get_fee_history.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_fee_history.test.ts similarity index 98% rename from packages/web3-eth/test/unit/rpc_methods/get_fee_history.test.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_fee_history.test.ts index 7d353dc3afa..f5578f68d57 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_fee_history.test.ts +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_fee_history.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; -import { ethRpcMethods } from 'web3-rpc-methods'; +import { ethRpcMethods } from '../../../src/index'; import { testData } from './fixtures/get_fee_history'; jest.mock('web3-validator'); diff --git a/packages/web3-eth/test/unit/rpc_methods/get_filter_changes.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_filter_changes.test.ts similarity index 97% rename from packages/web3-eth/test/unit/rpc_methods/get_filter_changes.test.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_filter_changes.test.ts index c0df8b61b0f..418c28e3b73 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_filter_changes.test.ts +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_filter_changes.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; -import { ethRpcMethods } from 'web3-rpc-methods'; +import { ethRpcMethods } from '../../../src/index'; import { testData } from './fixtures/uninstall_filter'; jest.mock('web3-validator'); diff --git a/packages/web3-eth/test/unit/rpc_methods/get_filter_logs.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_filter_logs.test.ts similarity index 97% rename from packages/web3-eth/test/unit/rpc_methods/get_filter_logs.test.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_filter_logs.test.ts index 02db963d3df..81a6eb52b90 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_filter_logs.test.ts +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_filter_logs.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; -import { ethRpcMethods } from 'web3-rpc-methods'; +import { ethRpcMethods } from '../../../src/index'; import { testData } from './fixtures/uninstall_filter'; jest.mock('web3-validator'); diff --git a/packages/web3-eth/test/unit/rpc_methods/get_gas_price.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_gas_price.test.ts similarity index 97% rename from packages/web3-eth/test/unit/rpc_methods/get_gas_price.test.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_gas_price.test.ts index 36e51f76227..d96d1e04d3c 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_gas_price.test.ts +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_gas_price.test.ts @@ -29,7 +29,8 @@ along with web3.js. If not, see . // along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; -import { ethRpcMethods } from 'web3-rpc-methods'; + +import { ethRpcMethods } from '../../../src/index'; describe('getGasPrice', () => { let requestManagerSendSpy: jest.Mock; diff --git a/packages/web3-eth/test/unit/rpc_methods/get_hash_rate.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_hash_rate.test.ts similarity index 97% rename from packages/web3-eth/test/unit/rpc_methods/get_hash_rate.test.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_hash_rate.test.ts index 876a7e9852e..7c7efa8fd2d 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_hash_rate.test.ts +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_hash_rate.test.ts @@ -29,7 +29,8 @@ along with web3.js. If not, see . // along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; -import { ethRpcMethods } from 'web3-rpc-methods'; + +import { ethRpcMethods } from '../../../src/index'; describe('getHashRate', () => { let requestManagerSendSpy: jest.Mock; diff --git a/packages/web3-eth/test/unit/rpc_methods/get_logs.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_logs.test.ts similarity index 97% rename from packages/web3-eth/test/unit/rpc_methods/get_logs.test.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_logs.test.ts index edb24f47ad2..d850de4b330 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_logs.test.ts +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_logs.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; -import { ethRpcMethods } from 'web3-rpc-methods'; +import { ethRpcMethods } from '../../../src/index'; import { testData } from './fixtures/new_filter'; jest.mock('web3-validator'); diff --git a/packages/web3-eth/test/unit/rpc_methods/get_mining.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_mining.test.ts similarity index 97% rename from packages/web3-eth/test/unit/rpc_methods/get_mining.test.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_mining.test.ts index 11f314f0c01..47f3a968646 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_mining.test.ts +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_mining.test.ts @@ -29,7 +29,8 @@ along with web3.js. If not, see . // along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; -import { ethRpcMethods } from 'web3-rpc-methods'; + +import { ethRpcMethods } from '../../../src/index'; describe('getMining', () => { let requestManagerSendSpy: jest.Mock; diff --git a/packages/web3-eth/test/unit/rpc_methods/get_node_info.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_node_info.test.ts similarity index 97% rename from packages/web3-eth/test/unit/rpc_methods/get_node_info.test.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_node_info.test.ts index 8c87ee2ad6e..41d56e89fbb 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_node_info.test.ts +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_node_info.test.ts @@ -29,7 +29,8 @@ along with web3.js. If not, see . // along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; -import { ethRpcMethods } from 'web3-rpc-methods'; + +import { ethRpcMethods } from '../../../src/index'; describe('getNodeInfo', () => { let requestManagerSendSpy: jest.Mock; diff --git a/packages/web3-eth/test/unit/rpc_methods/get_pending_transaction.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_pending_transaction.test.ts similarity index 97% rename from packages/web3-eth/test/unit/rpc_methods/get_pending_transaction.test.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_pending_transaction.test.ts index 3e0dca88234..4d50d55b745 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_pending_transaction.test.ts +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_pending_transaction.test.ts @@ -29,7 +29,8 @@ along with web3.js. If not, see . // along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; -import { ethRpcMethods } from 'web3-rpc-methods'; + +import { ethRpcMethods } from '../../../src/index'; describe('getPendingTransactions', () => { let requestManagerSendSpy: jest.Mock; diff --git a/packages/web3-eth/test/unit/rpc_methods/get_proof.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_proof.test.ts similarity index 98% rename from packages/web3-eth/test/unit/rpc_methods/get_proof.test.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_proof.test.ts index f63e303338e..ae67f83da50 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_proof.test.ts +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_proof.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; -import { ethRpcMethods } from 'web3-rpc-methods'; +import { ethRpcMethods } from '../../../src/index'; import { testData } from './fixtures/get_proof'; jest.mock('web3-validator'); diff --git a/packages/web3-eth/test/unit/rpc_methods/get_protocol_version.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_protocol_version.test.ts similarity index 97% rename from packages/web3-eth/test/unit/rpc_methods/get_protocol_version.test.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_protocol_version.test.ts index 07de12e4e65..dd4943e2b29 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_protocol_version.test.ts +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_protocol_version.test.ts @@ -29,7 +29,8 @@ along with web3.js. If not, see . // along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; -import { ethRpcMethods } from 'web3-rpc-methods'; + +import { ethRpcMethods } from '../../../src/index'; describe('getProtocolVersion', () => { let requestManagerSendSpy: jest.Mock; diff --git a/packages/web3-eth/test/unit/rpc_methods/get_storage_at.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_storage_at.test.ts similarity index 98% rename from packages/web3-eth/test/unit/rpc_methods/get_storage_at.test.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_storage_at.test.ts index 8d76199408c..00eb96fa48b 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_storage_at.test.ts +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_storage_at.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; -import { ethRpcMethods } from 'web3-rpc-methods'; +import { ethRpcMethods } from '../../../src/index'; import { testData } from './fixtures/get_storage_at'; jest.mock('web3-validator'); diff --git a/packages/web3-eth/test/unit/rpc_methods/get_syncing.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_syncing.test.ts similarity index 97% rename from packages/web3-eth/test/unit/rpc_methods/get_syncing.test.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_syncing.test.ts index de3e854a688..176d25fe514 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_syncing.test.ts +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_syncing.test.ts @@ -29,7 +29,8 @@ along with web3.js. If not, see . // along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; -import { ethRpcMethods } from 'web3-rpc-methods'; + +import { ethRpcMethods } from '../../../src/index'; describe('getSyncing', () => { let requestManagerSendSpy: jest.Mock; diff --git a/packages/web3-eth/test/unit/rpc_methods/get_transaction_by_block_hash_and_index.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_transaction_by_block_hash_and_index.test.ts similarity index 98% rename from packages/web3-eth/test/unit/rpc_methods/get_transaction_by_block_hash_and_index.test.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_transaction_by_block_hash_and_index.test.ts index c5bb293161a..879021f974b 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_transaction_by_block_hash_and_index.test.ts +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_transaction_by_block_hash_and_index.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; -import { ethRpcMethods } from 'web3-rpc-methods'; +import { ethRpcMethods } from '../../../src/index'; import { testData } from './fixtures/get_transaction_by_block_hash_and_index'; jest.mock('web3-validator'); diff --git a/packages/web3-eth/test/unit/rpc_methods/get_transaction_by_block_number_and_index.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_transaction_by_block_number_and_index.test.ts similarity index 98% rename from packages/web3-eth/test/unit/rpc_methods/get_transaction_by_block_number_and_index.test.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_transaction_by_block_number_and_index.test.ts index 9e935c4179e..25d37df2058 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_transaction_by_block_number_and_index.test.ts +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_transaction_by_block_number_and_index.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; -import { ethRpcMethods } from 'web3-rpc-methods'; +import { ethRpcMethods } from '../../../src/index'; import { testData } from './fixtures/get_transaction_by_block_number_and_index'; jest.mock('web3-validator'); diff --git a/packages/web3-eth/test/unit/rpc_methods/get_transaction_by_hash.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_transaction_by_hash.test.ts similarity index 98% rename from packages/web3-eth/test/unit/rpc_methods/get_transaction_by_hash.test.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_transaction_by_hash.test.ts index e8885cd87a1..f9041c60b6a 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_transaction_by_hash.test.ts +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_transaction_by_hash.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; -import { ethRpcMethods } from 'web3-rpc-methods'; +import { ethRpcMethods } from '../../../src/index'; import { testData } from './fixtures/get_transaction_by_hash'; jest.mock('web3-validator'); diff --git a/packages/web3-eth/test/unit/rpc_methods/get_transaction_count.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_transaction_count.test.ts similarity index 98% rename from packages/web3-eth/test/unit/rpc_methods/get_transaction_count.test.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_transaction_count.test.ts index fd2e67de2cd..6136449a8d0 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_transaction_count.test.ts +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_transaction_count.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; -import { ethRpcMethods } from 'web3-rpc-methods'; +import { ethRpcMethods } from '../../../src/index'; import { testData } from './fixtures/get_transaction_count'; jest.mock('web3-validator'); diff --git a/packages/web3-eth/test/unit/rpc_methods/get_transaction_receipt.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_transaction_receipt.test.ts similarity index 98% rename from packages/web3-eth/test/unit/rpc_methods/get_transaction_receipt.test.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_transaction_receipt.test.ts index 51b59cfc102..a0be658ec07 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_transaction_receipt.test.ts +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_transaction_receipt.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; -import { ethRpcMethods } from 'web3-rpc-methods'; +import { ethRpcMethods } from '../../../src/index'; import { testData } from './fixtures/get_transaction_receipt'; jest.mock('web3-validator'); diff --git a/packages/web3-eth/test/unit/rpc_methods/get_uncle_by_block_hash_and_index.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_uncle_by_block_hash_and_index.test.ts similarity index 98% rename from packages/web3-eth/test/unit/rpc_methods/get_uncle_by_block_hash_and_index.test.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_uncle_by_block_hash_and_index.test.ts index 41e273cd58c..11ffc9e7b97 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_uncle_by_block_hash_and_index.test.ts +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_uncle_by_block_hash_and_index.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; -import { ethRpcMethods } from 'web3-rpc-methods'; +import { ethRpcMethods } from '../../../src/index'; import { testData } from './fixtures/get_uncle_by_block_hash_and_index'; jest.mock('web3-validator'); diff --git a/packages/web3-eth/test/unit/rpc_methods/get_uncle_count_by_block_hash.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_uncle_count_by_block_hash.test.ts similarity index 98% rename from packages/web3-eth/test/unit/rpc_methods/get_uncle_count_by_block_hash.test.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_uncle_count_by_block_hash.test.ts index d6fdff29841..be943e95e93 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_uncle_count_by_block_hash.test.ts +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_uncle_count_by_block_hash.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; -import { ethRpcMethods } from 'web3-rpc-methods'; +import { ethRpcMethods } from '../../../src/index'; import { testData } from './fixtures/get_uncle_count_by_block_hash'; jest.mock('web3-validator'); diff --git a/packages/web3-eth/test/unit/rpc_methods/get_uncle_count_by_block_number.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_uncle_count_by_block_number.test.ts similarity index 98% rename from packages/web3-eth/test/unit/rpc_methods/get_uncle_count_by_block_number.test.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_uncle_count_by_block_number.test.ts index fb76097dba9..f9e0c6fb0b7 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_uncle_count_by_block_number.test.ts +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_uncle_count_by_block_number.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; -import { ethRpcMethods } from 'web3-rpc-methods'; +import { ethRpcMethods } from '../../../src/index'; import { testData } from './fixtures/get_uncle_count_by_block_number'; jest.mock('web3-validator'); diff --git a/packages/web3-eth/test/unit/rpc_methods/get_work.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_work.test.ts similarity index 97% rename from packages/web3-eth/test/unit/rpc_methods/get_work.test.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_work.test.ts index ad1363f9436..ea3dbfca890 100644 --- a/packages/web3-eth/test/unit/rpc_methods/get_work.test.ts +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/get_work.test.ts @@ -29,7 +29,8 @@ along with web3.js. If not, see . // along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; -import { ethRpcMethods } from 'web3-rpc-methods'; + +import { ethRpcMethods } from '../../../src/index'; describe('getWork', () => { let requestManagerSendSpy: jest.Mock; diff --git a/packages/web3-eth/test/unit/rpc_methods/new_block_filter.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/new_block_filter.test.ts similarity index 97% rename from packages/web3-eth/test/unit/rpc_methods/new_block_filter.test.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/new_block_filter.test.ts index bf9bb074292..47d702a1be1 100644 --- a/packages/web3-eth/test/unit/rpc_methods/new_block_filter.test.ts +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/new_block_filter.test.ts @@ -29,7 +29,8 @@ along with web3.js. If not, see . // along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; -import { ethRpcMethods } from 'web3-rpc-methods'; + +import { ethRpcMethods } from '../../../src/index'; describe('newBlockFilter', () => { let requestManagerSendSpy: jest.Mock; diff --git a/packages/web3-eth/test/unit/rpc_methods/new_filter.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/new_filter.test.ts similarity index 97% rename from packages/web3-eth/test/unit/rpc_methods/new_filter.test.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/new_filter.test.ts index fa2c6c1d469..fbcfe892a27 100644 --- a/packages/web3-eth/test/unit/rpc_methods/new_filter.test.ts +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/new_filter.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; -import { ethRpcMethods } from 'web3-rpc-methods'; +import { ethRpcMethods } from '../../../src/index'; import { testData } from './fixtures/new_filter'; jest.mock('web3-validator'); diff --git a/packages/web3-eth/test/unit/rpc_methods/new_pending_transaction_filter.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/new_pending_transaction_filter.test.ts similarity index 97% rename from packages/web3-eth/test/unit/rpc_methods/new_pending_transaction_filter.test.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/new_pending_transaction_filter.test.ts index 1c8c067352b..bd31ab4184d 100644 --- a/packages/web3-eth/test/unit/rpc_methods/new_pending_transaction_filter.test.ts +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/new_pending_transaction_filter.test.ts @@ -29,7 +29,8 @@ along with web3.js. If not, see . // along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; -import { ethRpcMethods } from 'web3-rpc-methods'; + +import { ethRpcMethods } from '../../../src/index'; describe('newPendingTransactionFilter', () => { let requestManagerSendSpy: jest.Mock; diff --git a/packages/web3-eth/test/unit/rpc_methods/request_accounts.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/request_accounts.test.ts similarity index 97% rename from packages/web3-eth/test/unit/rpc_methods/request_accounts.test.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/request_accounts.test.ts index 73e05bef571..5149ed5b32e 100644 --- a/packages/web3-eth/test/unit/rpc_methods/request_accounts.test.ts +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/request_accounts.test.ts @@ -29,7 +29,8 @@ along with web3.js. If not, see . // along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; -import { ethRpcMethods } from 'web3-rpc-methods'; + +import { ethRpcMethods } from '../../../src/index'; describe('requestAccounts', () => { let requestManagerSendSpy: jest.Mock; diff --git a/packages/web3-eth/test/unit/rpc_methods/send_raw_transaction.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/send_raw_transaction.test.ts similarity index 98% rename from packages/web3-eth/test/unit/rpc_methods/send_raw_transaction.test.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/send_raw_transaction.test.ts index dcc37faf3d2..2a4dea00ae0 100644 --- a/packages/web3-eth/test/unit/rpc_methods/send_raw_transaction.test.ts +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/send_raw_transaction.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; -import { ethRpcMethods } from 'web3-rpc-methods'; +import { ethRpcMethods } from '../../../src/index'; import { testData } from './fixtures/send_raw_transaction'; jest.mock('web3-validator'); diff --git a/packages/web3-eth/test/unit/rpc_methods/send_transaction.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/send_transaction.test.ts similarity index 98% rename from packages/web3-eth/test/unit/rpc_methods/send_transaction.test.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/send_transaction.test.ts index ffb55966871..6e916be8904 100644 --- a/packages/web3-eth/test/unit/rpc_methods/send_transaction.test.ts +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/send_transaction.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; -import { ethRpcMethods } from 'web3-rpc-methods'; +import { ethRpcMethods } from '../../../src/index'; import { testData } from './fixtures/send_transaction'; jest.mock('web3-validator'); diff --git a/packages/web3-eth/test/unit/rpc_methods/sign.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/sign.test.ts similarity index 97% rename from packages/web3-eth/test/unit/rpc_methods/sign.test.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/sign.test.ts index 15bbdaba4e8..634135faebf 100644 --- a/packages/web3-eth/test/unit/rpc_methods/sign.test.ts +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/sign.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; -import { ethRpcMethods } from 'web3-rpc-methods'; +import { ethRpcMethods } from '../../../src/index'; import { testData } from './fixtures/sign'; jest.mock('web3-validator'); diff --git a/packages/web3-eth/test/unit/rpc_methods/sign_transaction.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/sign_transaction.test.ts similarity index 98% rename from packages/web3-eth/test/unit/rpc_methods/sign_transaction.test.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/sign_transaction.test.ts index fb42056b244..861efac5998 100644 --- a/packages/web3-eth/test/unit/rpc_methods/sign_transaction.test.ts +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/sign_transaction.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; -import { ethRpcMethods } from 'web3-rpc-methods'; +import { ethRpcMethods } from '../../../src/index'; import { testData } from './fixtures/sign_transaction'; jest.mock('web3-validator'); diff --git a/packages/web3-eth/test/unit/rpc_methods/submit_hashrate.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/submit_hashrate.test.ts similarity index 98% rename from packages/web3-eth/test/unit/rpc_methods/submit_hashrate.test.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/submit_hashrate.test.ts index 17ed8475aa3..a933733f0be 100644 --- a/packages/web3-eth/test/unit/rpc_methods/submit_hashrate.test.ts +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/submit_hashrate.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; -import { ethRpcMethods } from 'web3-rpc-methods'; +import { ethRpcMethods } from '../../../src/index'; import { testData } from './fixtures/submit_hashrate'; jest.mock('web3-validator'); diff --git a/packages/web3-eth/test/unit/rpc_methods/submit_work.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/submit_work.test.ts similarity index 98% rename from packages/web3-eth/test/unit/rpc_methods/submit_work.test.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/submit_work.test.ts index 1d3129f7a0f..6ec44aa6fef 100644 --- a/packages/web3-eth/test/unit/rpc_methods/submit_work.test.ts +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/submit_work.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; -import { ethRpcMethods } from 'web3-rpc-methods'; +import { ethRpcMethods } from '../../../src/index'; import { testData } from './fixtures/submit_work'; jest.mock('web3-validator'); diff --git a/packages/web3-eth/test/unit/rpc_methods/uninstall_filter.test.ts b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/uninstall_filter.test.ts similarity index 97% rename from packages/web3-eth/test/unit/rpc_methods/uninstall_filter.test.ts rename to packages/web3-rpc-methods/test/unit/eth_rpc_methods/uninstall_filter.test.ts index a1a9cc31b2f..10fda048587 100644 --- a/packages/web3-eth/test/unit/rpc_methods/uninstall_filter.test.ts +++ b/packages/web3-rpc-methods/test/unit/eth_rpc_methods/uninstall_filter.test.ts @@ -30,8 +30,8 @@ along with web3.js. If not, see . // */ import { Web3RequestManager } from 'web3-core'; import { validator } from 'web3-validator'; -import { ethRpcMethods } from 'web3-rpc-methods'; +import { ethRpcMethods } from '../../../src/index'; import { testData } from './fixtures/uninstall_filter'; jest.mock('web3-validator'); From a71faa076b073e1e577a8b4421b9034f345f2fc1 Mon Sep 17 00:00:00 2001 From: Wyatt Barnes Date: Thu, 15 Sep 2022 14:12:43 -1000 Subject: [PATCH 14/16] Move rpc_methods test from web3-net to web3-rpc-methods --- .../test/unit/net_rpc_methods.test.ts} | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) rename packages/{web3-net/test/unit/rpc_methods.test.ts => web3-rpc-methods/test/unit/net_rpc_methods.test.ts} (96%) diff --git a/packages/web3-net/test/unit/rpc_methods.test.ts b/packages/web3-rpc-methods/test/unit/net_rpc_methods.test.ts similarity index 96% rename from packages/web3-net/test/unit/rpc_methods.test.ts rename to packages/web3-rpc-methods/test/unit/net_rpc_methods.test.ts index 3ab59e097e2..588600a1ce1 100644 --- a/packages/web3-net/test/unit/rpc_methods.test.ts +++ b/packages/web3-rpc-methods/test/unit/net_rpc_methods.test.ts @@ -1,4 +1,4 @@ -/* +/* This file is part of web3.js. web3.js is free software: you can redistribute it and/or modify @@ -17,7 +17,8 @@ along with web3.js. If not, see . import { Web3RequestManager } from 'web3-core'; import { Web3NetAPI } from 'web3-types'; -import { netRpcMethods } from 'web3-rpc-methods'; + +import { netRpcMethods } from '../../src/index'; describe('rpc_methods', () => { const requestManagerSendSpy = jest.fn(); From f3facdc12d2d4d233a4fa3aa110fdf6e54e390fb Mon Sep 17 00:00:00 2001 From: Wyatt Barnes Date: Thu, 15 Sep 2022 17:13:22 -1000 Subject: [PATCH 15/16] Update added CHANGELOG header to [Unreleased] --- packages/web3-eth-ens/CHANGELOG.md | 2 +- packages/web3-eth-personal/CHANGELOG.md | 2 +- packages/web3-eth/CHANGELOG.md | 2 +- packages/web3-net/CHANGELOG.md | 2 +- packages/web3-types/CHANGELOG.md | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/web3-eth-ens/CHANGELOG.md b/packages/web3-eth-ens/CHANGELOG.md index 78ab7cb9987..6319b6e5392 100644 --- a/packages/web3-eth-ens/CHANGELOG.md +++ b/packages/web3-eth-ens/CHANGELOG.md @@ -35,7 +35,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 --> -## [4.0.1-alpha.1] +## [Unreleased] ### Changed diff --git a/packages/web3-eth-personal/CHANGELOG.md b/packages/web3-eth-personal/CHANGELOG.md index e0ed8532263..842516adfce 100644 --- a/packages/web3-eth-personal/CHANGELOG.md +++ b/packages/web3-eth-personal/CHANGELOG.md @@ -35,7 +35,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 --> -## [4.0.1-alpha.1] +## [Unreleased] ### Added diff --git a/packages/web3-eth/CHANGELOG.md b/packages/web3-eth/CHANGELOG.md index 7aa7e0bfaaa..98dce9c1ec8 100644 --- a/packages/web3-eth/CHANGELOG.md +++ b/packages/web3-eth/CHANGELOG.md @@ -35,7 +35,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 --> -## [4.0.1-alpha.1] +## [Unreleased] ### Added diff --git a/packages/web3-net/CHANGELOG.md b/packages/web3-net/CHANGELOG.md index 2d32fc4d415..d22d10f63d4 100644 --- a/packages/web3-net/CHANGELOG.md +++ b/packages/web3-net/CHANGELOG.md @@ -35,7 +35,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 --> -## [4.0.1-alpha.1] +## [Unreleased] ### Added diff --git a/packages/web3-types/CHANGELOG.md b/packages/web3-types/CHANGELOG.md index 37991b821ce..67a226d386c 100644 --- a/packages/web3-types/CHANGELOG.md +++ b/packages/web3-types/CHANGELOG.md @@ -35,7 +35,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 --> -## [0.1.1-alpha.1] +## [Unreleased] ### Added From a53bd4eb35065b0db3af9887de7183022c0133bb Mon Sep 17 00:00:00 2001 From: Wyatt Barnes Date: Mon, 19 Sep 2022 19:47:28 -1000 Subject: [PATCH 16/16] Update packages/web3-eth-ens/CHANGELOG.md Co-authored-by: Alex --- packages/web3-eth-ens/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/web3-eth-ens/CHANGELOG.md b/packages/web3-eth-ens/CHANGELOG.md index 6319b6e5392..b0ca2ffe336 100644 --- a/packages/web3-eth-ens/CHANGELOG.md +++ b/packages/web3-eth-ens/CHANGELOG.md @@ -39,4 +39,4 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed -- `Web3NetAPI` is now imported from `web3-types` instead of `web3-types` (#5441) +- `Web3NetAPI` is now imported from `web3-types` instead of `web3-net` (#5441)