diff --git a/.eslintrc.js b/.eslintrc.js index f171a7cf2..e5fa88e89 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -22,9 +22,18 @@ module.exports = { { files: ['*.test.ts', '*.test.js'], - extends: ['@metamask/eslint-config-jest'], + extends: [ + '@metamask/eslint-config-jest', + '@metamask/eslint-config-nodejs', + ], }, ], - ignorePatterns: ['!.eslintrc.js', '!.prettierrc.js', 'dist/', 'docs/'], + ignorePatterns: [ + '!.eslintrc.js', + '!.prettierrc.js', + 'dist/', + 'docs/', + '.yarn/', + ], }; diff --git a/package.json b/package.json index 8f3336535..5dcb4cc3b 100644 --- a/package.json +++ b/package.json @@ -37,30 +37,30 @@ "devDependencies": { "@lavamoat/allow-scripts": "^2.0.3", "@metamask/auto-changelog": "^2.3.0", - "@metamask/eslint-config": "^9.0.0", - "@metamask/eslint-config-jest": "^9.0.0", - "@metamask/eslint-config-nodejs": "^9.0.0", - "@metamask/eslint-config-typescript": "^9.0.1", + "@metamask/eslint-config": "^11.0.1", + "@metamask/eslint-config-jest": "^11.0.0", + "@metamask/eslint-config-nodejs": "^11.0.1", + "@metamask/eslint-config-typescript": "^11.0.0", "@types/jest": "^28.1.7", - "@typescript-eslint/eslint-plugin": "^4.21.0", - "@typescript-eslint/parser": "^4.21.0", - "eslint": "^7.23.0", - "eslint-config-prettier": "^8.1.0", - "eslint-plugin-import": "^2.22.1", - "eslint-plugin-jest": "^24.3.4", - "eslint-plugin-jsdoc": "^36.1.0", + "@typescript-eslint/eslint-plugin": "^5.42.1", + "@typescript-eslint/parser": "^5.42.1", + "eslint": "^8.27.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-import": "^2.26.0", + "eslint-plugin-jest": "^27.1.5", + "eslint-plugin-jsdoc": "^39.6.2", "eslint-plugin-node": "^11.1.0", - "eslint-plugin-prettier": "^3.3.1", + "eslint-plugin-prettier": "^4.2.1", "jest": "^29.2.2", "json-bigint": "^1.0.0", - "prettier": "^2.2.1", + "prettier": "^2.7.1", "prettier-plugin-packagejson": "^2.2.11", "rimraf": "^3.0.2", "stdio-mock": "^1.2.0", "ts-jest": "^29.0.3", "tsd": "^0.24.1", "typedoc": "^0.23.10", - "typescript": "~4.7.4" + "typescript": "~4.8.4" }, "packageManager": "yarn@3.2.3", "engines": { diff --git a/src/__fixtures__/bytes.ts b/src/__fixtures__/bytes.ts index 9b15b2ae9..a0f74e2b7 100644 --- a/src/__fixtures__/bytes.ts +++ b/src/__fixtures__/bytes.ts @@ -2,49 +2,49 @@ export const BYTES_FIXTURES = [ { bytes: new Uint8Array([0]), - hex: '0x00', + hexadecimal: '0x00', number: 0, bigint: BigInt(0), }, { bytes: new Uint8Array([1]), - hex: '0x01', + hexadecimal: '0x01', number: 1, bigint: BigInt(1), }, { bytes: new Uint8Array([1, 0]), - hex: '0x0100', + hexadecimal: '0x0100', number: 256, bigint: BigInt('256'), }, { bytes: new Uint8Array([1, 0, 0]), - hex: '0x010000', + hexadecimal: '0x010000', number: 65536, bigint: BigInt('65536'), }, { bytes: new Uint8Array([255, 255, 255, 255]), - hex: '0xffffffff', + hexadecimal: '0xffffffff', number: 4294967295, bigint: BigInt('4294967295'), }, { bytes: new Uint8Array([34, 147, 16, 131]), - hex: '0x22931083', + hexadecimal: '0x22931083', number: 580063363, bigint: BigInt('580063363'), }, { bytes: new Uint8Array([194, 39, 113, 31]), - hex: '0xc227711f', + hexadecimal: '0xc227711f', number: 3257364767, bigint: BigInt('3257364767'), }, { bytes: new Uint8Array([127, 255, 237, 162]), - hex: '0x7fffeda2', + hexadecimal: '0x7fffeda2', number: 2147478946, bigint: BigInt('2147478946'), }, @@ -56,14 +56,15 @@ export const BYTES_FIXTURES = [ export const LARGE_BYTES_FIXTURES = [ { bytes: new Uint8Array([1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), - hex: '0x01000000000000000000000000000000', + hexadecimal: '0x01000000000000000000000000000000', bigint: BigInt('1329227995784915872903807060280344576'), }, { // 32 random bytes. // prettier-ignore bytes: new Uint8Array([128, 166, 63, 33, 255, 253, 81, 50, 185, 159, 64, 5, 201, 96, 173, 113, 231, 157, 20, 253, 171, 196, 59, 83, 97, 52, 162, 30, 233, 162, 62, 137]), - hex: '0x80a63f21fffd5132b99f4005c960ad71e79d14fdabc43b536134a21ee9a23e89', + hexadecimal: + '0x80a63f21fffd5132b99f4005c960ad71e79d14fdabc43b536134a21ee9a23e89', bigint: BigInt( '58189776958068240351106802069880238808463796103203472163062608479540482293385', ), @@ -72,7 +73,8 @@ export const LARGE_BYTES_FIXTURES = [ // 32 random bytes. // prettier-ignore bytes: new Uint8Array([24, 59, 190, 155, 44, 45, 70, 12, 94, 71, 218, 198, 156, 6, 95, 55, 151, 93, 217, 212, 57, 56, 209, 106, 70, 72, 78, 228, 108, 104, 250, 76]), - hex: '0x183bbe9b2c2d460c5e47dac69c065f37975dd9d43938d16a46484ee46c68fa4c', + hexadecimal: + '0x183bbe9b2c2d460c5e47dac69c065f37975dd9d43938d16a46484ee46c68fa4c', bigint: BigInt( '10961067858070306934860429506927922639950169497670557799881954197288235104844', ), @@ -81,7 +83,8 @@ export const LARGE_BYTES_FIXTURES = [ // 32 random bytes. // prettier-ignore bytes: new Uint8Array([162, 34, 67, 251, 133, 170, 184, 203, 91, 211, 174, 71, 165, 215, 28, 168, 27, 18, 2, 91, 57, 222, 62, 54, 119, 204, 228, 207, 105, 230, 166, 107]), - hex: '0xa22243fb85aab8cb5bd3ae47a5d71ca81b12025b39de3e3677cce4cf69e6a66b', + hexadecimal: + '0xa22243fb85aab8cb5bd3ae47a5d71ca81b12025b39de3e3677cce4cf69e6a66b', bigint: BigInt( '73335223468720234094976334179508947211519352143744597535776292047894706824811', ), @@ -91,7 +94,7 @@ export const LARGE_BYTES_FIXTURES = [ // 1024 random bytes. // prettier-ignore bytes: new Uint8Array([228, 233, 149, 34, 146, 180, 221, 235, 201, 34, 210, 165, 172, 81, 137, 30, 254, 11, 232, 54, 221, 197, 233, 27, 77, 141, 236, 196, 191, 6, 59, 78, 195, 155, 153, 244, 98, 123, 94, 217, 75, 19, 221, 105, 104, 168, 87, 255, 100, 117, 46, 144, 254, 112, 243, 156, 144, 122, 231, 76, 127, 133, 210, 164, 45, 13, 132, 251, 32, 154, 210, 142, 200, 217, 71, 239, 28, 45, 176, 18, 247, 147, 47, 236, 14, 124, 36, 160, 250, 40, 203, 85, 116, 239, 226, 109, 175, 20, 53, 23, 248, 13, 136, 14, 116, 197, 160, 145, 98, 253, 155, 11, 181, 185, 40, 111, 111, 229, 123, 167, 154, 50, 94, 61, 45, 45, 243, 15, 77, 134, 32, 18, 233, 242, 0, 156, 116, 95, 221, 152, 246, 64, 50, 199, 210, 96, 172, 229, 234, 193, 251, 60, 159, 63, 92, 139, 59, 172, 237, 154, 198, 40, 237, 226, 132, 97, 71, 123, 121, 192, 122, 8, 134, 168, 61, 224, 146, 196, 91, 51, 150, 130, 116, 106, 211, 90, 136, 136, 32, 242, 53, 7, 231, 108, 226, 160, 224, 191, 95, 49, 208, 66, 174, 101, 115, 69, 249, 207, 205, 190, 76, 199, 21, 50, 94, 197, 39, 189, 103, 77, 183, 186, 101, 235, 32, 23, 216, 210, 119, 216, 143, 3, 142, 87, 62, 237, 198, 124, 226, 210, 242, 133, 228, 47, 109, 107, 117, 32, 252, 23, 215, 229, 42, 209, 21, 82, 73, 28, 87, 188, 156, 7, 41, 249, 125, 138, 163, 168, 143, 15, 71, 18, 87, 132, 94, 201, 137, 154, 5, 110, 21, 40, 126, 238, 103, 180, 217, 235, 217, 244, 3, 175, 87, 197, 254, 134, 162, 90, 134, 25, 72, 246, 136, 52, 134, 13, 82, 156, 41, 87, 50, 181, 128, 225, 162, 72, 93, 154, 215, 45, 123, 89, 85, 87, 76, 57, 58, 237, 177, 255, 93, 108, 121, 13, 118, 181, 171, 41, 202, 196, 1, 78, 132, 66, 107, 8, 15, 229, 174, 215, 83, 79, 238, 101, 100, 52, 244, 189, 144, 35, 227, 21, 13, 215, 249, 222, 240, 207, 63, 118, 9, 129, 105, 41, 194, 82, 144, 102, 147, 254, 119, 59, 55, 115, 110, 197, 199, 84, 197, 5, 162, 111, 248, 38, 118, 61, 130, 6, 97, 165, 11, 161, 240, 21, 197, 77, 36, 16, 121, 220, 181, 100, 241, 226, 221, 185, 53, 2, 98, 174, 220, 167, 215, 131, 49, 205, 52, 195, 252, 124, 154, 33, 231, 38, 75, 110, 167, 16, 66, 156, 59, 62, 185, 216, 126, 233, 120, 126, 253, 72, 240, 253, 188, 49, 91, 150, 68, 160, 171, 98, 218, 25, 19, 13, 97, 225, 229, 77, 128, 68, 172, 245, 77, 104, 77, 150, 164, 244, 254, 216, 24, 44, 90, 139, 152, 165, 93, 181, 47, 182, 110, 104, 50, 142, 58, 102, 39, 54, 126, 133, 85, 91, 148, 227, 229, 108, 52, 229, 180, 125, 115, 217, 64, 248, 16, 183, 250, 28, 99, 21, 84, 244, 16, 36, 44, 47, 44, 144, 24, 47, 72, 230, 96, 255, 2, 75, 95, 28, 182, 109, 127, 71, 103, 217, 87, 22, 68, 75, 241, 125, 202, 20, 96, 153, 106, 234, 166, 210, 128, 127, 230, 27, 134, 196, 161, 110, 116, 76, 42, 121, 180, 172, 204, 202, 30, 167, 247, 153, 210, 208, 155, 168, 121, 255, 18, 54, 165, 40, 175, 206, 150, 118, 224, 87, 66, 136, 149, 211, 54, 65, 24, 111, 162, 192, 122, 101, 213, 65, 132, 97, 38, 60, 39, 66, 69, 103, 243, 175, 78, 75, 31, 115, 171, 210, 32, 75, 180, 235, 109, 71, 114, 100, 254, 11, 1, 138, 35, 249, 8, 148, 175, 149, 157, 168, 79, 160, 107, 102, 140, 24, 174, 183, 22, 14, 201, 97, 227, 120, 202, 23, 233, 44, 92, 108, 54, 43, 46, 190, 40, 102, 140, 240, 102, 32, 41, 113, 37, 93, 37, 199, 20, 70, 33, 128, 93, 30, 219, 225, 242, 233, 45, 107, 243, 220, 56, 147, 114, 23, 34, 125, 220, 167, 56, 206, 222, 154, 159, 61, 168, 102, 67, 151, 166, 150, 71, 227, 138, 138, 254, 212, 171, 13, 199, 6, 158, 138, 55, 14, 239, 252, 31, 37, 52, 69, 97, 170, 228, 188, 140, 186, 48, 174, 22, 12, 217, 197, 108, 44, 235, 41, 165, 48, 194, 92, 7, 207, 236, 15, 208, 204, 131, 219, 189, 96, 114, 230, 63, 119, 111, 194, 140, 231, 119, 94, 206, 22, 67, 198, 70, 92, 137, 158, 105, 144, 123, 151, 152, 89, 15, 247, 209, 180, 18, 41, 24, 171, 98, 239, 89, 41, 7, 162, 149, 134, 153, 12, 57, 37, 133, 162, 39, 41, 206, 136, 53, 196, 167, 119, 155, 169, 96, 234, 248, 97, 27, 239, 111, 189, 66, 110, 183, 61, 108, 81, 9, 1, 229, 18, 190, 129, 190, 215, 79, 103, 170, 171, 247, 235, 204, 113, 108, 155, 89, 108, 192, 177, 184, 48, 101, 176, 171, 171, 82, 43, 93, 48, 89, 185, 108, 121, 235, 169, 91, 41, 38, 139, 171, 218, 100, 20, 97, 11, 195, 191, 192, 90, 167, 183, 13, 178, 65, 135, 248, 176, 190, 145, 76, 225, 68, 112, 7, 164, 38, 240, 65, 129, 38, 211, 160, 34, 1, 144, 228, 192, 172, 181, 148, 211, 180, 217, 11, 143, 217, 54, 217, 1, 120, 96, 114, 206, 108, 103, 198, 197, 81, 238, 192, 242, 218, 113, 37, 205, 160, 148, 235, 92, 241, 9, 157, 221, 140, 190, 70, 145, 94, 219, 222, 42, 191, 99, 208, 38, 110, 35, 222, 192, 176, 49, 28, 181, 140, 171, 174, 3, 155, 235, 86, 174, 71, 87, 179, 148, 74, 216, 57, 79, 67, 3, 196, 235, 139, 175, 3, 164, 27, 81, 112, 228, 245, 139, 30, 241, 255, 177, 199, 192, 217, 17, 82, 55, 205, 22, 166, 24, 107, 44, 32, 205, 68, 70, 82, 252, 146, 76]), - hex: + hexadecimal: '0xe4e9952292b4ddebc922d2a5ac51891efe0be836ddc5e91b4d8decc4bf063b4ec39b99f4627b5ed94b13dd6968a857ff64752e90fe70f39c907ae74c7f85d2a42d0d84fb209ad28ec8d947ef1c2db012f7932fec0e7c24a0fa28cb5574efe26daf143517f80d880e74c5a09162fd9b0bb5b9286f6fe57ba79a325e3d2d2df30f4d862012e9f2009c745fdd98f64032c7d260ace5eac1fb3c9f3f5c8b3baced9ac628ede28461477b79c07a0886a83de092c45b339682746ad35a888820f23507e76ce2a0e0bf5f31d042ae657345f9cfcdbe4cc715325ec527bd674db7ba65eb2017d8d277d88f038e573eedc67ce2d2f285e42f6d6b7520fc17d7e52ad11552491c57bc9c0729f97d8aa3a88f0f471257845ec9899a056e15287eee67b4d9ebd9f403af57c5fe86a25a861948f68834860d529c295732b580e1a2485d9ad72d7b5955574c393aedb1ff5d6c790d76b5ab29cac4014e84426b080fe5aed7534fee656434f4bd9023e3150dd7f9def0cf3f7609816929c252906693fe773b37736ec5c754c505a26ff826763d820661a50ba1f015c54d241079dcb564f1e2ddb9350262aedca7d78331cd34c3fc7c9a21e7264b6ea710429c3b3eb9d87ee9787efd48f0fdbc315b9644a0ab62da19130d61e1e54d8044acf54d684d96a4f4fed8182c5a8b98a55db52fb66e68328e3a6627367e85555b94e3e56c34e5b47d73d940f810b7fa1c631554f410242c2f2c90182f48e660ff024b5f1cb66d7f4767d95716444bf17dca1460996aeaa6d2807fe61b86c4a16e744c2a79b4acccca1ea7f799d2d09ba879ff1236a528afce9676e057428895d33641186fa2c07a65d5418461263c27424567f3af4e4b1f73abd2204bb4eb6d477264fe0b018a23f90894af959da84fa06b668c18aeb7160ec961e378ca17e92c5c6c362b2ebe28668cf066202971255d25c7144621805d1edbe1f2e92d6bf3dc38937217227ddca738cede9a9f3da8664397a69647e38a8afed4ab0dc7069e8a370eeffc1f25344561aae4bc8cba30ae160cd9c56c2ceb29a530c25c07cfec0fd0cc83dbbd6072e63f776fc28ce7775ece1643c6465c899e69907b9798590ff7d1b4122918ab62ef592907a29586990c392585a22729ce8835c4a7779ba960eaf8611bef6fbd426eb73d6c510901e512be81bed74f67aaabf7ebcc716c9b596cc0b1b83065b0abab522b5d3059b96c79eba95b29268babda6414610bc3bfc05aa7b70db24187f8b0be914ce1447007a426f0418126d3a0220190e4c0acb594d3b4d90b8fd936d901786072ce6c67c6c551eec0f2da7125cda094eb5cf1099ddd8cbe46915edbde2abf63d0266e23dec0b0311cb58cabae039beb56ae4757b3944ad8394f4303c4eb8baf03a41b5170e4f58b1ef1ffb1c7c0d9115237cd16a6186b2c20cd444652fc924c', bigint: BigInt( '975335188603988398618405551344916027345126946013385036715539406356421033999596189929769523225381754994124196396116598034380775273554050388528281267517366640072879794040213141938323868740153869135039902366745135595499710057361695733463476453677702817198692676248390409911841405423757788283358695331637983447584941899013547652783149194993939930573337534368729381684551952519942141804186650433839015850815013580039522083867097219801083713881594020297379015974790952215241871688571122540580324054412773040826790843743701979902847290055957337319728573148950407955549870865243499468370598209250763690289803963897937768761105789171033231361860165540063726916334906325245462519195226183245882000722667077739866760870661632241373782904775772260316077824716682315903958965757284039976935285865459822715628744070272940308664211730529173935007963881767716028875582747755384798094232682836295540750752400537664634784046619934935042300798284501465886110057401264555519806763853535276093772004578387708338832721262684280682311201491243611210849663568513811733192540054378165535937434297141960867705781647893299911538622935308929710307160820863019275435765375899808451293736443365182721568147000322195369498779557077702272674528080776221382690753415670335535093298595620285760115168696093192181983888099761443380086455891687587217180066848747471277290124967045216716316308253230230184199975833024988822256680471222287694502136844364481450135665780505134851676138919630043213693193349740655573307610271446851238705940784975995241474652567558017784631194420743463115700990085473038098393359078495861944241255962617069227557849488676201280729521796546333922191326411678349849995268843952377995656408908730330037930929000874039324236642274032575002703246117084319198231216752747152616317812235548738836089447940826663332262409859611595995264754170306945751472647917246999654491652426057067539828020620493090297833018161083626793047185287985197385445513287751251370758426741681686013472657114823809487219351109909203106621480089098113911302736895237995232550418130239617683682584554547604762923984500775052563608320126758004753894795087105577474262988534731697952917399205955014009088083019004717790790572160788672117503013171018955821827940806289568957237974332801154485741318257409916244687578714207820757161110919219015726158701749969329599550879532152588592642188469344302760837241655771866035018566759030837833673736516209150186516587893450335704662343357440313500859117576004604492', @@ -101,14 +104,14 @@ export const LARGE_BYTES_FIXTURES = [ // 10 kb of random bytes. // prettier-ignore bytes: new Uint8Array([199, 115, 25, 191, 206, 152, 117, 156, 33, 206, 199, 230, 88, 93, 118, 82, 2, 21, 88, 173, 38, 98, 158, 235, 100, 209, 11, 208, 177, 92, 28, 233, 222, 175, 69, 181, 218, 115, 9, 253, 178, 182, 33, 118, 156, 191, 184, 75, 104, 51, 14, 171, 107, 138, 92, 166, 243, 221, 60, 190, 216, 215, 230, 198, 60, 74, 178, 166, 100, 213, 201, 253, 5, 107, 254, 63, 114, 92, 113, 109, 103, 135, 46, 223, 106, 238, 163, 162, 82, 44, 104, 48, 158, 133, 42, 169, 246, 148, 245, 83, 216, 88, 26, 188, 63, 127, 171, 15, 88, 190, 106, 42, 223, 161, 205, 186, 14, 129, 176, 144, 221, 85, 73, 225, 146, 39, 88, 113, 129, 155, 10, 206, 33, 179, 42, 232, 247, 118, 59, 143, 101, 187, 235, 155, 236, 228, 248, 174, 114, 76, 238, 52, 48, 153, 201, 154, 72, 8, 151, 56, 130, 171, 152, 49, 10, 208, 5, 254, 137, 64, 169, 111, 171, 26, 67, 100, 48, 247, 102, 252, 189, 173, 0, 49, 116, 176, 185, 73, 98, 186, 40, 50, 207, 193, 41, 163, 226, 166, 210, 247, 95, 42, 15, 195, 9, 28, 190, 58, 85, 219, 103, 99, 87, 160, 73, 162, 178, 238, 12, 30, 111, 249, 145, 95, 240, 87, 252, 235, 55, 25, 23, 130, 101, 52, 83, 54, 88, 40, 52, 131, 34, 247, 45, 98, 240, 165, 240, 246, 51, 242, 107, 228, 210, 152, 220, 192, 125, 40, 21, 236, 167, 44, 46, 155, 3, 19, 5, 159, 193, 112, 167, 135, 119, 0, 85, 179, 71, 12, 247, 40, 78, 251, 46, 58, 64, 28, 70, 148, 27, 77, 164, 205, 79, 88, 71, 125, 225, 139, 31, 169, 124, 103, 65, 92, 190, 27, 18, 234, 78, 100, 55, 76, 239, 216, 18, 53, 22, 232, 216, 172, 61, 166, 86, 19, 100, 167, 188, 124, 126, 155, 182, 203, 80, 36, 138, 78, 107, 16, 141, 149, 92, 23, 97, 185, 202, 233, 126, 7, 129, 4, 21, 252, 31, 141, 20, 157, 89, 70, 121, 237, 165, 180, 39, 200, 94, 226, 178, 116, 222, 18, 130, 113, 220, 136, 187, 81, 203, 200, 167, 117, 115, 245, 83, 144, 57, 128, 177, 226, 111, 85, 2, 202, 238, 61, 82, 245, 70, 78, 125, 222, 77, 133, 40, 88, 68, 172, 122, 22, 45, 131, 80, 232, 137, 51, 219, 13, 198, 162, 120, 180, 163, 81, 132, 142, 112, 76, 190, 97, 155, 94, 124, 244, 198, 156, 177, 217, 185, 251, 155, 39, 4, 45, 105, 95, 255, 121, 177, 227, 86, 154, 49, 3, 11, 150, 50, 33, 162, 150, 210, 194, 184, 156, 206, 112, 136, 27, 226, 69, 21, 9, 149, 8, 246, 119, 224, 71, 192, 98, 225, 69, 98, 22, 159, 99, 47, 28, 224, 160, 188, 241, 153, 135, 103, 34, 123, 108, 214, 83, 158, 52, 31, 68, 211, 149, 24, 59, 45, 227, 236, 241, 220, 6, 25, 19, 134, 179, 214, 183, 55, 166, 134, 154, 167, 55, 108, 156, 175, 129, 140, 140, 39, 212, 69, 85, 167, 33, 73, 250, 33, 195, 165, 182, 141, 230, 79, 100, 139, 235, 11, 216, 113, 46, 132, 210, 29, 28, 210, 248, 185, 16, 61, 176, 229, 95, 89, 130, 10, 238, 32, 230, 85, 145, 38, 77, 146, 186, 118, 38, 144, 114, 13, 42, 184, 253, 173, 246, 45, 90, 251, 254, 244, 233, 134, 62, 102, 9, 39, 16, 160, 246, 91, 60, 81, 219, 211, 216, 80, 236, 74, 115, 237, 193, 133, 250, 2, 99, 1, 49, 146, 167, 116, 38, 220, 61, 245, 129, 153, 173, 118, 101, 125, 177, 255, 109, 35, 253, 3, 43, 172, 171, 130, 232, 24, 179, 46, 120, 71, 99, 90, 250, 182, 125, 215, 135, 116, 57, 248, 224, 60, 247, 72, 42, 232, 40, 127, 132, 18, 55, 138, 5, 6, 245, 251, 138, 60, 126, 179, 68, 66, 46, 58, 93, 151, 102, 188, 22, 98, 53, 242, 26, 202, 55, 37, 66, 83, 124, 123, 30, 182, 214, 113, 201, 184, 167, 223, 11, 49, 12, 118, 249, 195, 204, 19, 164, 30, 121, 232, 204, 201, 244, 232, 18, 117, 145, 155, 158, 209, 157, 102, 65, 69, 149, 17, 77, 26, 213, 187, 179, 58, 237, 64, 163, 181, 132, 20, 20, 119, 109, 73, 206, 219, 208, 243, 83, 255, 117, 52, 71, 2, 114, 213, 187, 148, 36, 170, 38, 198, 245, 32, 125, 95, 234, 82, 91, 187, 255, 166, 224, 106, 242, 137, 134, 238, 174, 14, 5, 82, 206, 160, 51, 27, 38, 207, 137, 10, 250, 252, 179, 156, 81, 5, 94, 130, 123, 186, 66, 140, 124, 180, 157, 85, 47, 221, 167, 252, 203, 225, 107, 114, 1, 54, 243, 26, 121, 63, 87, 6, 189, 72, 15, 248, 220, 239, 194, 123, 131, 126, 117, 76, 71, 145, 248, 198, 77, 147, 249, 111, 178, 60, 167, 92, 180, 197, 137, 61, 164, 200, 251, 72, 234, 211, 78, 40, 7, 242, 185, 24, 14, 113, 63, 114, 252, 226, 213, 159, 56, 242, 73, 67, 212, 232, 168, 74, 243, 65, 157, 44, 162, 21, 137, 225, 3, 148, 29, 86, 179, 8, 123, 138, 192, 30, 25, 76, 213, 241, 223, 81, 236, 146, 228, 226, 202, 219, 56, 118, 245, 94, 174, 73, 236, 214, 44, 55, 135, 77, 86, 200, 221, 117, 82, 251, 54, 87, 182, 126, 198, 185, 171, 130, 74, 75, 178, 74, 154, 122, 106, 25, 137, 61, 131, 117, 117, 67, 92, 29, 254, 153, 5, 7, 198, 186, 44, 117, 30, 90, 200, 239, 48, 163, 218, 116, 68, 44, 50, 135, 142, 250, 223, 112, 117, 178, 177, 99, 96, 201, 137, 153, 239, 242, 168, 159, 22, 208, 253, 134, 19, 60, 8, 255, 96, 1, 8, 32, 149, 239, 38, 30, 155, 188, 212, 146, 96, 107, 124, 35, 103, 200, 82, 87, 142, 238, 227, 16, 116, 127, 243, 126, 13, 119, 27, 62, 58, 9, 101, 120, 10, 254, 86, 200, 19, 140, 242, 196, 81, 182, 218, 70, 107, 90, 26, 119, 195, 243, 210, 163, 158, 24, 168, 108, 88, 154, 122, 24, 126, 153, 196, 200, 43, 176, 103, 100, 137, 223, 48, 168, 112, 28, 206, 7, 187, 100, 183, 77, 173, 231, 167, 233, 192, 140, 216, 30, 95, 83, 124, 179, 51, 164, 221, 19, 68, 154, 57, 14, 27, 37, 111, 131, 97, 91, 26, 29, 228, 104, 254, 4, 168, 217, 156, 153, 157, 200, 75, 3, 143, 196, 122, 57, 35, 15, 19, 168, 169, 30, 244, 122, 231, 60, 149, 247, 245, 71, 121, 239, 145, 92, 209, 254, 116, 181, 170, 214, 125, 209, 54, 67, 247, 159, 78, 50, 214, 96, 65, 36, 112, 140, 21, 223, 13, 25, 38, 104, 239, 127, 24, 53, 168, 1, 165, 201, 70, 153, 72, 247, 142, 81, 33, 204, 134, 242, 53, 104, 178, 202, 178, 3, 27, 52, 83, 75, 242, 169, 191, 120, 65, 73, 138, 169, 229, 203, 112, 230, 128, 204, 81, 62, 79, 103, 221, 49, 187, 0, 74, 201, 91, 176, 241, 21, 157, 231, 215, 30, 52, 224, 88, 54, 7, 174, 226, 172, 139, 111, 162, 59, 202, 180, 107, 172, 194, 167, 248, 148, 106, 10, 103, 93, 246, 133, 84, 51, 141, 39, 237, 55, 244, 44, 177, 220, 201, 191, 49, 89, 115, 172, 202, 92, 186, 39, 72, 173, 255, 165, 195, 231, 144, 50, 67, 161, 255, 164, 121, 181, 49, 26, 137, 191, 225, 21, 197, 29, 47, 184, 72, 247, 23, 70, 168, 134, 126, 125, 128, 202, 181, 156, 222, 140, 54, 83, 245, 85, 29, 60, 165, 164, 168, 108, 107, 0, 49, 227, 227, 187, 210, 156, 162, 96, 176, 128, 113, 73, 45, 142, 114, 197, 49, 123, 71, 211, 146, 240, 192, 249, 128, 121, 157, 94, 139, 95, 172, 167, 229, 251, 231, 16, 62, 147, 100, 159, 67, 72, 171, 74, 157, 139, 124, 110, 133, 65, 156, 110, 9, 55, 245, 94, 180, 83, 86, 150, 205, 6, 252, 5, 100, 155, 74, 191, 221, 56, 241, 206, 73, 149, 247, 218, 145, 46, 222, 29, 47, 252, 206, 199, 7, 36, 154, 205, 197, 142, 137, 169, 82, 138, 83, 156, 233, 24, 118, 54, 212, 233, 172, 119, 141, 93, 86, 217, 144, 54, 35, 254, 211, 38, 249, 230, 217, 174, 157, 53, 72, 83, 250, 61, 177, 102, 48, 159, 14, 61, 97, 36, 171, 83, 152, 73, 50, 120, 96, 38, 64, 89, 179, 254, 204, 37, 148, 219, 142, 94, 162, 65, 7, 193, 45, 203, 6, 207, 140, 128, 162, 3, 160, 83, 35, 152, 157, 144, 177, 73, 38, 131, 72, 202, 32, 28, 129, 190, 21, 71, 255, 57, 55, 92, 181, 37, 146, 16, 60, 189, 138, 56, 115, 3, 21, 76, 80, 53, 58, 57, 31, 133, 31, 233, 11, 67, 9, 141, 194, 55, 174, 19, 253, 255, 35, 59, 80, 255, 28, 119, 148, 50, 220, 120, 231, 252, 126, 114, 20, 11, 228, 92, 171, 61, 96, 152, 144, 226, 220, 115, 54, 44, 31, 225, 38, 30, 165, 235, 9, 28, 195, 86, 212, 119, 52, 78, 95, 90, 204, 79, 12, 131, 101, 242, 213, 101, 55, 108, 149, 16, 90, 253, 181, 23, 211, 49, 7, 243, 187, 49, 186, 115, 88, 86, 153, 8, 166, 138, 97, 205, 205, 132, 0, 160, 37, 38, 53, 42, 53, 195, 106, 148, 33, 78, 143, 123, 169, 193, 195, 221, 243, 166, 60, 227, 109, 240, 194, 78, 134, 189, 157, 20, 192, 174, 240, 195, 96, 134, 55, 70, 213, 254, 131, 190, 249, 41, 208, 120, 152, 30, 180, 93, 114, 47, 151, 81, 238, 178, 140, 216, 229, 239, 16, 161, 115, 148, 149, 255, 154, 0, 197, 184, 80, 216, 12, 16, 49, 197, 15, 212, 137, 253, 54, 156, 216, 204, 223, 146, 244, 225, 233, 230, 2, 192, 116, 28, 186, 54, 47, 164, 240, 64, 75, 51, 122, 217, 62, 218, 252, 139, 15, 4, 130, 149, 167, 234, 169, 240, 218, 173, 255, 96, 184, 98, 90, 99, 83, 132, 91, 158, 3, 191, 24, 200, 51, 209, 89, 101, 114, 215, 11, 11, 246, 213, 94, 191, 95, 74, 211, 30, 25, 21, 203, 24, 225, 72, 174, 103, 194, 2, 244, 48, 149, 162, 48, 74, 96, 129, 68, 114, 40, 215, 124, 80, 144, 120, 153, 123, 185, 191, 74, 133, 47, 77, 107, 214, 226, 4, 11, 227, 224, 56, 237, 34, 241, 179, 14, 135, 157, 214, 188, 188, 48, 234, 162, 47, 193, 50, 119, 71, 236, 134, 0, 12, 48, 91, 209, 222, 126, 236, 55, 184, 139, 249, 101, 214, 72, 14, 84, 202, 158, 0, 211, 179, 56, 13, 218, 159, 120, 44, 139, 78, 243, 219, 161, 54, 176, 3, 120, 253, 21, 196, 48, 247, 34, 216, 76, 238, 227, 200, 212, 132, 202, 199, 42, 94, 88, 163, 219, 52, 225, 127, 50, 68, 61, 242, 115, 99, 246, 244, 57, 188, 204, 28, 164, 218, 94, 43, 158, 206, 236, 69, 111, 43, 91, 154, 60, 123, 203, 187, 201, 170, 154, 27, 208, 126, 247, 67, 191, 104, 130, 34, 168, 81, 18, 228, 63, 188, 157, 217, 152, 197, 70, 223, 106, 136, 148, 44, 93, 65, 35, 6, 249, 193, 133, 114, 177, 64, 157, 206, 201, 21, 17, 253, 72, 228, 66, 110, 10, 207, 207, 37, 46, 192, 215, 139, 3, 199, 90, 9, 78, 48, 6, 91, 202, 42, 129, 29, 132, 32, 219, 164, 181, 227, 58, 225, 3, 57, 231, 20, 16, 86, 206, 88, 201, 138, 142, 198, 167, 226, 77, 211, 128, 222, 211, 191, 228, 66, 42, 124, 146, 220, 99, 246, 128, 250, 37, 217, 180, 152, 206, 217, 213, 32, 237, 83, 233, 80, 217, 139, 30, 183, 162, 253, 94, 95, 149, 13, 76, 5, 230, 9, 226, 236, 168, 147, 217, 41, 5, 145, 73, 188, 167, 195, 115, 93, 217, 27, 35, 27, 213, 36, 135, 239, 29, 15, 13, 239, 1, 192, 196, 8, 230, 171, 126, 61, 205, 254, 120, 190, 155, 43, 7, 45, 138, 18, 114, 255, 66, 10, 28, 231, 142, 104, 244, 246, 97, 32, 25, 168, 147, 168, 122, 241, 10, 70, 234, 53, 199, 0, 227, 200, 187, 153, 180, 74, 8, 31, 176, 77, 120, 222, 255, 235, 160, 221, 234, 84, 74, 56, 213, 70, 48, 19, 122, 207, 201, 208, 176, 72, 173, 83, 134, 78, 51, 176, 230, 53, 35, 131, 135, 213, 226, 130, 72, 233, 104, 46, 195, 6, 154, 122, 37, 3, 51, 84, 144, 121, 85, 150, 2, 209, 99, 47, 139, 239, 79, 65, 254, 35, 162, 182, 177, 219, 40, 124, 142, 133, 42, 118, 2, 207, 231, 216, 189, 254, 23, 123, 54, 103, 192, 2, 254, 84, 36, 49, 66, 216, 102, 129, 23, 164, 19, 55, 74, 56, 56, 197, 88, 103, 201, 163, 179, 173, 119, 17, 92, 146, 69, 213, 159, 62, 161, 147, 177, 149, 82, 235, 143, 123, 53, 106, 117, 76, 148, 250, 249, 72, 57, 88, 167, 210, 99, 84, 252, 246, 51, 247, 53, 182, 154, 41, 7, 243, 237, 17, 28, 192, 212, 23, 117, 163, 223, 45, 37, 52, 191, 218, 86, 241, 35, 70, 249, 191, 98, 195, 193, 120, 91, 15, 126, 67, 223, 112, 70, 34, 90, 227, 252, 173, 122, 85, 12, 115, 75, 135, 40, 23, 97, 215, 59, 46, 145, 23, 174, 73, 182, 0, 195, 214, 183, 131, 167, 55, 187, 190, 45, 101, 201, 53, 147, 15, 223, 185, 241, 56, 163, 147, 160, 173, 246, 199, 249, 32, 129, 141, 248, 10, 255, 156, 112, 182, 86, 254, 28, 176, 162, 60, 173, 171, 33, 1, 57, 134, 107, 125, 78, 37, 135, 7, 53, 211, 91, 209, 25, 31, 141, 97, 186, 35, 226, 74, 8, 50, 211, 229, 91, 136, 134, 157, 125, 164, 211, 101, 151, 247, 136, 195, 30, 109, 222, 97, 136, 96, 194, 226, 67, 150, 188, 111, 15, 210, 201, 61, 225, 193, 202, 133, 162, 212, 149, 53, 155, 225, 160, 92, 55, 73, 201, 67, 59, 255, 9, 153, 59, 239, 176, 49, 169, 172, 27, 186, 128, 213, 32, 20, 108, 159, 28, 205, 151, 168, 110, 4, 177, 131, 127, 21, 169, 169, 245, 87, 124, 233, 202, 222, 28, 234, 92, 19, 73, 89, 217, 22, 180, 223, 134, 245, 241, 243, 93, 214, 30, 132, 142, 179, 47, 22, 162, 114, 151, 74, 103, 89, 231, 195, 255, 67, 130, 30, 223, 194, 48, 169, 21, 29, 246, 19, 104, 97, 39, 232, 86, 21, 208, 132, 15, 129, 224, 94, 70, 49, 105, 152, 47, 130, 219, 154, 91, 23, 18, 237, 249, 109, 13, 11, 189, 12, 5, 5, 84, 212, 36, 103, 34, 99, 173, 112, 48, 111, 216, 75, 71, 110, 41, 185, 86, 23, 150, 226, 144, 63, 202, 49, 52, 28, 241, 57, 6, 6, 24, 161, 241, 154, 251, 209, 216, 146, 133, 50, 124, 38, 49, 224, 26, 3, 20, 135, 55, 75, 33, 166, 255, 85, 66, 86, 199, 252, 228, 179, 166, 234, 0, 115, 116, 239, 90, 83, 83, 156, 78, 217, 162, 146, 216, 216, 147, 43, 129, 252, 234, 22, 79, 77, 151, 210, 188, 191, 124, 44, 160, 57, 208, 42, 17, 50, 92, 110, 195, 82, 211, 192, 246, 34, 126, 90, 23, 206, 229, 103, 34, 154, 237, 185, 155, 102, 186, 20, 108, 67, 46, 206, 170, 190, 194, 214, 81, 55, 137, 46, 133, 198, 121, 17, 175, 181, 7, 104, 110, 167, 245, 63, 73, 85, 185, 126, 125, 215, 63, 34, 95, 20, 201, 123, 190, 192, 187, 28, 172, 55, 118, 47, 236, 112, 231, 56, 87, 204, 139, 147, 214, 210, 212, 195, 125, 218, 7, 218, 245, 3, 206, 46, 173, 108, 34, 248, 18, 150, 173, 94, 15, 81, 91, 173, 103, 86, 12, 163, 106, 196, 123, 248, 157, 180, 3, 67, 203, 174, 179, 84, 244, 28, 17, 133, 15, 237, 6, 114, 189, 1, 146, 139, 232, 163, 220, 234, 115, 59, 132, 251, 150, 147, 166, 81, 230, 1, 20, 57, 126, 116, 159, 228, 145, 212, 25, 236, 84, 165, 206, 119, 131, 103, 188, 92, 19, 88, 48, 14, 68, 219, 120, 85, 120, 188, 238, 36, 237, 196, 97, 126, 31, 64, 122, 79, 158, 247, 244, 196, 24, 60, 64, 186, 156, 21, 182, 184, 174, 100, 203, 118, 239, 177, 87, 125, 162, 107, 12, 125, 158, 167, 168, 173, 192, 33, 235, 159, 183, 178, 71, 164, 118, 181, 198, 198, 245, 165, 99, 221, 193, 207, 208, 124, 53, 230, 167, 165, 201, 196, 67, 185, 105, 245, 111, 162, 84, 252, 181, 227, 74, 184, 40, 136, 120, 88, 124, 44, 185, 207, 33, 148, 66, 193, 11, 54, 97, 67, 224, 42, 74, 93, 34, 117, 228, 158, 120, 60, 119, 253, 109, 250, 38, 236, 73, 243, 145, 136, 59, 222, 216, 163, 216, 24, 169, 152, 33, 59, 99, 42, 26, 4, 156, 175, 18, 57, 29, 41, 184, 249, 179, 148, 250, 181, 93, 181, 222, 218, 62, 64, 203, 220, 116, 97, 205, 119, 25, 151, 84, 40, 176, 69, 82, 12, 20, 200, 102, 83, 70, 187, 91, 185, 177, 235, 122, 115, 245, 23, 238, 107, 96, 201, 9, 7, 181, 232, 210, 4, 2, 218, 36, 222, 197, 186, 158, 5, 134, 129, 53, 218, 99, 109, 28, 193, 215, 176, 17, 236, 219, 192, 58, 13, 252, 139, 51, 101, 242, 206, 68, 240, 0, 113, 206, 90, 123, 202, 158, 245, 253, 248, 128, 191, 14, 243, 61, 142, 35, 3, 102, 113, 152, 180, 85, 154, 251, 163, 197, 244, 83, 234, 48, 59, 66, 16, 142, 178, 99, 92, 161, 98, 39, 131, 214, 93, 4, 122, 178, 96, 162, 97, 61, 186, 78, 239, 171, 186, 64, 10, 183, 177, 7, 155, 43, 185, 163, 124, 42, 110, 52, 244, 38, 18, 74, 92, 8, 218, 55, 193, 159, 254, 60, 121, 20, 196, 180, 253, 93, 31, 93, 150, 226, 17, 184, 144, 242, 131, 19, 255, 195, 182, 133, 123, 125, 160, 60, 238, 174, 141, 116, 189, 78, 31, 229, 142, 255, 21, 102, 138, 10, 214, 145, 91, 188, 27, 227, 65, 19, 175, 182, 216, 81, 232, 106, 138, 162, 174, 71, 195, 215, 191, 65, 29, 219, 154, 42, 197, 46, 228, 135, 126, 84, 94, 180, 121, 150, 132, 223, 67, 254, 88, 173, 235, 244, 55, 103, 3, 151, 7, 150, 213, 236, 99, 184, 220, 166, 249, 170, 201, 11, 94, 101, 209, 77, 47, 1, 31, 109, 71, 66, 67, 94, 71, 51, 106, 136, 178, 101, 71, 67, 13, 207, 8, 200, 139, 85, 159, 18, 164, 11, 89, 227, 146, 1, 40, 205, 213, 193, 229, 240, 35, 170, 33, 212, 219, 70, 243, 211, 79, 158, 94, 46, 175, 248, 168, 104, 4, 120, 108, 217, 197, 6, 169, 83, 3, 242, 39, 52, 153, 229, 202, 229, 38, 87, 162, 48, 93, 164, 222, 187, 99, 211, 71, 252, 165, 229, 186, 120, 119, 94, 253, 194, 207, 101, 92, 203, 113, 224, 71, 78, 130, 118, 72, 148, 63, 185, 219, 150, 53, 19, 225, 152, 142, 114, 239, 207, 231, 76, 50, 143, 75, 1, 69, 148, 3, 71, 57, 4, 182, 20, 150, 112, 7, 224, 193, 234, 53, 81, 211, 114, 156, 80, 5, 211, 249, 165, 53, 69, 242, 8, 136, 231, 181, 70, 19, 16, 127, 209, 212, 118, 189, 2, 248, 38, 187, 70, 254, 73, 247, 42, 145, 65, 57, 243, 215, 106, 154, 187, 98, 253, 169, 27, 206, 10, 145, 148, 183, 131, 80, 202, 31, 236, 61, 115, 69, 36, 68, 29, 148, 193, 13, 191, 253, 235, 26, 235, 227, 135, 146, 151, 0, 215, 108, 160, 70, 176, 194, 59, 94, 157, 46, 89, 141, 6, 204, 225, 223, 217, 122, 174, 97, 90, 23, 235, 238, 103, 123, 37, 2, 32, 255, 121, 224, 133, 212, 170, 48, 224, 33, 128, 244, 247, 245, 60, 214, 42, 33, 114, 77, 162, 156, 240, 211, 52, 21, 254, 231, 188, 115, 254, 44, 70, 15, 95, 13, 186, 253, 8, 78, 40, 41, 239, 20, 249, 217, 148, 166, 34, 104, 109, 20, 117, 124, 103, 107, 227, 25, 160, 104, 138, 32, 129, 228, 80, 254, 120, 111, 55, 51, 183, 76, 147, 123, 240, 196, 49, 250, 119, 139, 205, 224, 130, 102, 44, 130, 27, 24, 4, 206, 208, 28, 251, 230, 74, 7, 235, 15, 122, 164, 13, 236, 214, 43, 44, 224, 227, 110, 53, 178, 180, 107, 160, 7, 44, 82, 198, 108, 7, 159, 215, 78, 26, 7, 12, 9, 37, 115, 246, 255, 105, 74, 87, 41, 69, 175, 165, 54, 60, 37, 200, 116, 233, 154, 107, 23, 95, 48, 124, 223, 157, 104, 13, 185, 202, 2, 15, 180, 47, 37, 124, 43, 132, 95, 173, 69, 85, 202, 204, 19, 146, 49, 71, 74, 142, 233, 112, 191, 29, 243, 98, 127, 250, 20, 24, 65, 120, 93, 217, 175, 105, 178, 106, 185, 113, 163, 190, 190, 81, 50, 189, 228, 3, 80, 46, 140, 81, 90, 17, 107, 66, 224, 167, 115, 249, 50, 236, 220, 155, 214, 155, 129, 248, 41, 93, 185, 6, 120, 100, 40, 107, 226, 24, 163, 116, 13, 214, 169, 146, 36, 155, 129, 139, 160, 15, 83, 229, 186, 127, 108, 142, 143, 26, 43, 7, 132, 85, 19, 249, 121, 230, 108, 93, 176, 230, 180, 15, 54, 24, 2, 130, 112, 189, 172, 221, 110, 129, 243, 3, 4, 105, 116, 102, 32, 87, 150, 121, 77, 113, 58, 90, 89, 90, 157, 102, 156, 243, 161, 16, 214, 12, 55, 119, 200, 197, 98, 72, 95, 229, 194, 150, 211, 98, 135, 146, 78, 134, 223, 206, 57, 34, 157, 171, 246, 61, 243, 38, 184, 192, 153, 28, 53, 107, 168, 239, 150, 1, 179, 225, 19, 170, 84, 61, 46, 144, 161, 237, 62, 198, 14, 221, 214, 52, 199, 90, 125, 145, 112, 3, 0, 108, 250, 110, 175, 238, 55, 164, 235, 187, 48, 201, 30, 32, 86, 188, 13, 125, 155, 120, 226, 114, 28, 32, 208, 55, 71, 23, 181, 161, 1, 126, 11, 36, 156, 42, 156, 153, 136, 73, 107, 186, 153, 196, 41, 48, 178, 192, 107, 226, 170, 48, 202, 109, 50, 119, 112, 199, 86, 22, 138, 203, 226, 216, 237, 65, 164, 173, 143, 38, 227, 254, 208, 72, 54, 227, 65, 75, 32, 104, 112, 56, 77, 17, 203, 207, 190, 253, 253, 128, 98, 93, 137, 230, 96, 186, 183, 196, 23, 250, 128, 229, 83, 238, 102, 89, 56, 33, 175, 210, 73, 225, 219, 34, 38, 97, 34, 77, 79, 214, 3, 74, 137, 54, 37, 54, 220, 38, 203, 73, 194, 212, 36, 253, 137, 246, 168, 73, 246, 33, 155, 31, 156, 107, 109, 132, 147, 252, 255, 161, 143, 201, 170, 243, 196, 20, 68, 152, 173, 176, 136, 139, 254, 70, 20, 39, 103, 19, 139, 38, 74, 49, 201, 66, 100, 253, 177, 11, 238, 243, 239, 104, 147, 12, 209, 148, 90, 34, 86, 166, 110, 14, 40, 117, 153, 149, 28, 106, 76, 107, 12, 44, 214, 18, 22, 175, 195, 125, 247, 97, 39, 248, 54, 144, 135, 139, 134, 208, 161, 26, 104, 116, 220, 23, 217, 93, 7, 112, 236, 172, 229, 243, 165, 93, 11, 42, 42, 237, 234, 79, 63, 110, 38, 38, 14, 212, 193, 71, 210, 195, 198, 65, 46, 72, 20, 44, 113, 127, 55, 30, 15, 159, 168, 126, 24, 250, 35, 69, 144, 139, 4, 63, 95, 194, 52, 99, 68, 245, 169, 148, 198, 202, 167, 6, 95, 37, 11, 195, 244, 142, 177, 214, 232, 223, 88, 25, 144, 79, 230, 86, 55, 158, 235, 204, 95, 11, 54, 45, 20, 60, 115, 136, 184, 35, 132, 175, 201, 20, 234, 220, 15, 241, 178, 181, 114, 174, 0, 170, 249, 12, 11, 119, 121, 112, 106, 22, 194, 70, 238, 128, 134, 166, 102, 186, 215, 201, 20, 216, 248, 215, 189, 137, 205, 97, 233, 55, 174, 28, 195, 55, 199, 29, 198, 154, 169, 233, 81, 165, 19, 212, 91, 141, 61, 26, 16, 6, 232, 27, 29, 179, 24, 200, 240, 248, 158, 165, 108, 61, 170, 113, 149, 22, 209, 240, 186, 148, 102, 201, 212, 74, 232, 210, 253, 68, 27, 129, 33, 232, 95, 151, 144, 194, 241, 182, 226, 171, 63, 255, 56, 154, 147, 167, 168, 156, 193, 175, 136, 252, 140, 43, 10, 140, 247, 131, 22, 48, 217, 252, 63, 38, 14, 166, 158, 243, 151, 213, 180, 14, 22, 170, 28, 143, 18, 68, 60, 203, 223, 153, 211, 22, 147, 219, 218, 45, 111, 154, 158, 112, 253, 31, 167, 179, 145, 168, 57, 18, 110, 38, 230, 1, 168, 104, 212, 37, 221, 115, 91, 126, 196, 162, 143, 171, 247, 56, 200, 92, 154, 149, 99, 53, 44, 213, 15, 254, 114, 175, 63, 54, 91, 139, 41, 220, 226, 80, 67, 235, 53, 166, 187, 40, 220, 135, 149, 156, 167, 207, 206, 110, 117, 145, 84, 9, 41, 188, 43, 38, 63, 164, 158, 48, 3, 25, 128, 18, 109, 152, 7, 6, 230, 164, 124, 100, 119, 48, 144, 120, 215, 27, 53, 159, 199, 62, 252, 231, 227, 178, 213, 152, 83, 157, 12, 150, 54, 58, 79, 192, 114, 251, 226, 136, 201, 102, 116, 117, 68, 120, 52, 232, 156, 119, 155, 180, 153, 30, 208, 183, 10, 199, 52, 143, 163, 217, 158, 21, 131, 173, 11, 66, 190, 22, 38, 140, 126, 250, 76, 30, 202, 162, 103, 59, 193, 168, 251, 208, 89, 12, 34, 233, 131, 69, 114, 198, 250, 217, 193, 27, 3, 192, 154, 60, 198, 2, 196, 186, 30, 5, 197, 143, 214, 60, 120, 196, 160, 182, 129, 207, 240, 217, 16, 147, 179, 120, 147, 100, 75, 160, 98, 171, 223, 37, 27, 40, 181, 157, 133, 51, 203, 42, 26, 75, 113, 92, 193, 0, 55, 10, 242, 163, 250, 195, 41, 76, 246, 77, 122, 50, 207, 123, 169, 110, 52, 172, 90, 91, 135, 166, 67, 40, 63, 100, 94, 162, 66, 66, 150, 245, 30, 159, 40, 92, 15, 144, 155, 31, 43, 221, 80, 14, 242, 158, 229, 94, 43, 158, 218, 118, 227, 62, 253, 218, 240, 106, 176, 87, 244, 6, 149, 20, 83, 28, 188, 0, 18, 197, 70, 246, 67, 24, 139, 212, 187, 14, 247, 210, 177, 140, 207, 63, 110, 208, 88, 75, 129, 246, 151, 197, 154, 80, 78, 50, 9, 193, 37, 164, 235, 221, 73, 2, 27, 49, 248, 160, 23, 49, 188, 244, 248, 152, 181, 219, 255, 29, 100, 90, 150, 72, 79, 93, 202, 250, 115, 162, 6, 156, 75, 202, 9, 46, 47, 86, 142, 150, 231, 25, 229, 217, 67, 233, 31, 172, 72, 7, 158, 111, 86, 160, 101, 61, 220, 63, 22, 6, 236, 58, 164, 248, 34, 245, 3, 104, 252, 175, 197, 84, 212, 23, 65, 205, 32, 157, 157, 177, 63, 3, 218, 81, 146, 255, 65, 169, 114, 99, 84, 166, 44, 193, 65, 137, 248, 73, 73, 68, 188, 166, 153, 137, 132, 158, 221, 248, 156, 27, 118, 33, 30, 6, 147, 125, 134, 172, 108, 98, 71, 206, 116, 30, 81, 34, 98, 136, 145, 240, 105, 179, 103, 21, 136, 145, 218, 138, 55, 68, 1, 95, 87, 149, 82, 26, 31, 67, 215, 205, 190, 61, 198, 43, 42, 41, 97, 111, 23, 109, 142, 192, 28, 188, 88, 154, 62, 123, 250, 238, 209, 40, 64, 155, 55, 65, 43, 135, 33, 215, 233, 197, 144, 169, 246, 213, 87, 133, 80, 217, 46, 53, 135, 147, 60, 196, 14, 65, 108, 120, 161, 110, 14, 68, 206, 0, 163, 25, 86, 83, 114, 31, 142, 82, 2, 21, 237, 82, 199, 191, 221, 57, 108, 220, 144, 81, 182, 94, 73, 127, 32, 235, 43, 125, 122, 106, 242, 29, 67, 89, 141, 63, 20, 23, 90, 155, 224, 219, 16, 217, 65, 173, 229, 127, 254, 100, 15, 239, 126, 252, 112, 153, 142, 172, 81, 217, 40, 29, 166, 99, 71, 146, 219, 224, 3, 220, 4, 120, 214, 116, 107, 108, 154, 137, 2, 23, 36, 169, 136, 234, 191, 49, 221, 161, 155, 158, 61, 232, 100, 31, 151, 218, 30, 24, 221, 228, 51, 182, 34, 211, 155, 153, 87, 41, 65, 96, 246, 177, 72, 110, 64, 66, 162, 198, 90, 226, 223, 96, 98, 255, 23, 107, 53, 54, 120, 237, 237, 85, 24, 229, 92, 4, 107, 245, 76, 163, 252, 204, 11, 149, 99, 208, 124, 239, 139, 44, 224, 87, 200, 24, 13, 237, 72, 13, 65, 80, 210, 75, 155, 182, 92, 163, 80, 198, 192, 164, 28, 87, 147, 178, 108, 76, 61, 37, 101, 62, 137, 119, 46, 112, 196, 38, 137, 247, 142, 156, 12, 87, 83, 190, 109, 88, 203, 99, 72, 99, 131, 170, 80, 235, 35, 26, 254, 143, 75, 130, 18, 183, 3, 3, 180, 118, 148, 48, 69, 131, 141, 110, 180, 97, 240, 220, 55, 154, 32, 175, 63, 197, 241, 20, 65, 241, 32, 191, 192, 114, 215, 107, 96, 4, 175, 232, 119, 37, 12, 169, 49, 102, 132, 228, 182, 13, 168, 244, 228, 251, 10, 21, 254, 115, 251, 96, 75, 75, 220, 24, 102, 190, 171, 12, 252, 55, 170, 234, 140, 37, 147, 82, 152, 134, 230, 124, 19, 224, 246, 110, 140, 1, 222, 66, 237, 175, 72, 135, 48, 180, 148, 81, 247, 42, 127, 196, 70, 225, 92, 69, 71, 151, 238, 161, 98, 23, 87, 251, 147, 135, 163, 93, 147, 109, 199, 203, 189, 217, 50, 4, 96, 196, 110, 149, 169, 30, 38, 101, 192, 188, 254, 191, 95, 144, 166, 209, 149, 161, 139, 81, 153, 226, 116, 124, 122, 161, 228, 56, 195, 186, 188, 50, 67, 191, 82, 151, 115, 212, 125, 100, 83, 67, 30, 3, 31, 125, 97, 126, 189, 37, 221, 19, 142, 124, 10, 2, 23, 120, 3, 219, 46, 71, 102, 153, 184, 186, 207, 165, 170, 67, 195, 104, 164, 36, 143, 203, 185, 211, 12, 130, 255, 214, 250, 128, 215, 213, 78, 95, 41, 161, 167, 196, 55, 192, 75, 212, 126, 103, 116, 169, 33, 160, 185, 131, 235, 180, 248, 206, 69, 186, 47, 181, 58, 44, 87, 250, 65, 45, 250, 120, 171, 139, 184, 186, 3, 44, 103, 27, 68, 180, 26, 3, 115, 135, 134, 177, 200, 176, 168, 212, 89, 186, 203, 15, 35, 90, 44, 220, 139, 185, 198, 17, 81, 165, 207, 235, 240, 170, 13, 31, 202, 30, 235, 183, 187, 60, 159, 251, 106, 91, 23, 60, 239, 103, 247, 172, 59, 30, 122, 63, 46, 21, 126, 170, 93, 206, 209, 136, 15, 18, 98, 70, 58, 206, 97, 31, 71, 194, 244, 93, 41, 28, 140, 9, 158, 192, 40, 141, 19, 255, 42, 158, 72, 34, 243, 250, 205, 38, 243, 166, 212, 32, 191, 166, 178, 5, 162, 234, 28, 59, 205, 83, 13, 89, 198, 237, 238, 52, 147, 99, 193, 5, 240, 193, 205, 16, 48, 218, 155, 57, 42, 61, 212, 153, 202, 18, 117, 16, 48, 35, 63, 195, 32, 177, 145, 215, 118, 78, 96, 30, 131, 170, 232, 28, 187, 202, 137, 181, 203, 227, 14, 240, 119, 75, 156, 119, 128, 95, 30, 158, 150, 192, 12, 29, 26, 71, 48, 181, 128, 241, 78, 172, 235, 180, 165, 98, 173, 46, 92, 98, 226, 222, 161, 38, 199, 235, 153, 57, 117, 188, 251, 1, 245, 184, 214, 10, 171, 34, 25, 98, 236, 233, 112, 195, 77, 50, 173, 219, 84, 200, 136, 43, 27, 107, 181, 150, 50, 163, 29, 26, 148, 56, 89, 255, 231, 167, 59, 2, 254, 8, 160, 149, 204, 152, 186, 206, 39, 149, 167, 145, 227, 39, 253, 93, 79, 42, 118, 73, 70, 237, 40, 140, 52, 234, 241, 129, 231, 172, 159, 193, 92, 78, 78, 66, 55, 44, 175, 166, 160, 120, 141, 171, 135, 198, 54, 77, 39, 151, 154, 220, 221, 196, 206, 203, 177, 82, 101, 85, 58, 45, 245, 76, 94, 37, 98, 176, 239, 218, 170, 191, 253, 67, 20, 123, 197, 64, 25, 245, 150, 135, 234, 141, 8, 214, 180, 185, 88, 216, 203, 233, 65, 192, 199, 18, 87, 183, 92, 208, 255, 118, 158, 24, 220, 86, 52, 245, 197, 49, 183, 181, 241, 156, 234, 172, 194, 247, 21, 224, 188, 82, 58, 89, 204, 220, 89, 79, 18, 79, 8, 128, 237, 72, 123, 176, 45, 80, 254, 95, 49, 58, 60, 241, 202, 246, 165, 165, 7, 204, 53, 43, 252, 134, 69, 104, 25, 75, 118, 172, 148, 138, 252, 72, 4, 135, 143, 246, 205, 18, 31, 146, 28, 207, 230, 77, 2, 57, 226, 28, 60, 77, 233, 234, 190, 247, 222, 213, 87, 138, 220, 146, 157, 42, 162, 190, 143, 127, 226, 196, 225, 82, 54, 204, 123, 181, 30, 160, 62, 70, 64, 163, 254, 191, 43, 78, 230, 103, 35, 11, 66, 244, 45, 161, 170, 176, 241, 251, 231, 236, 197, 11, 220, 45, 38, 227, 131, 99, 84, 179, 69, 198, 243, 114, 83, 134, 47, 209, 223, 28, 73, 137, 228, 152, 1, 181, 128, 90, 59, 44, 233, 227, 190, 47, 253, 207, 144, 31, 234, 166, 5, 73, 113, 233, 45, 220, 50, 105, 183, 140, 19, 157, 153, 130, 229, 33, 92, 228, 5, 51, 154, 73, 10, 141, 169, 32, 157, 142, 52, 198, 185, 102, 11, 218, 17, 230, 145, 117, 31, 75, 17, 25, 222, 125, 57, 113, 228, 30, 152, 101, 239, 236, 201, 186, 182, 91, 255, 180, 231, 32, 184, 42, 129, 54, 136, 78, 110, 220, 157, 18, 243, 80, 174, 6, 177, 116, 165, 249, 101, 12, 161, 217, 200, 204, 164, 45, 75, 10, 235, 83, 169, 41, 87, 15, 7, 151, 194, 141, 83, 94, 6, 46, 24, 232, 101, 197, 33, 39, 169, 139, 116, 208, 28, 54, 238, 188, 127, 242, 54, 127, 59, 139, 87, 187, 123, 47, 42, 248, 46, 193, 88, 45, 135, 241, 55, 230, 208, 182, 69, 64, 22, 205, 215, 142, 139, 177, 18, 147, 33, 54, 173, 253, 47, 194, 209, 211, 0, 152, 45, 182, 4, 247, 100, 243, 67, 253, 13, 144, 47, 155, 174, 190, 208, 210, 248, 93, 182, 230, 237, 75, 214, 98, 6, 64, 178, 215, 238, 233, 246, 89, 189, 229, 46, 238, 198, 56, 195, 104, 216, 57, 56, 146, 93, 181, 46, 168, 208, 31, 22, 71, 0, 40, 118, 165, 181, 198, 220, 13, 218, 194, 228, 129, 84, 14, 68, 37, 145, 97, 245, 112, 120, 225, 110, 5, 97, 13, 208, 154, 46, 178, 85, 53, 143, 163, 59, 252, 109, 119, 154, 124, 16, 12, 72, 6, 45, 145, 93, 174, 247, 187, 89, 128, 240, 78, 100, 115, 95, 102, 235, 59, 210, 43, 202, 103, 45, 106, 142, 141, 128, 97, 214, 11, 167, 103, 167, 14, 36, 246, 6, 143, 80, 3, 67, 146, 3, 242, 160, 150, 69, 92, 140, 207, 170, 218, 165, 178, 151, 129, 134, 225, 140, 110, 115, 163, 35, 104, 233, 74, 175, 218, 203, 26, 95, 145, 8, 87, 242, 34, 248, 169, 15, 227, 135, 211, 177, 144, 118, 179, 32, 137, 15, 102, 213, 228, 155, 49, 183, 8, 102, 43, 127, 13, 71, 197, 236, 240, 59, 38, 9, 203, 94, 148, 228, 194, 236, 8, 44, 19, 83, 16, 92, 144, 151, 113, 204, 248, 90, 135, 38, 49, 97, 60, 164, 16, 83, 182, 250, 78, 150, 198, 220, 159, 95, 54, 102, 255, 231, 108, 24, 211, 185, 106, 187, 253, 234, 199, 38, 32, 39, 185, 162, 11, 128, 141, 1, 224, 180, 112, 47, 73, 119, 159, 102, 9, 13, 162, 111, 55, 48, 135, 146, 135, 47, 92, 131, 138, 177, 67, 61, 142, 190, 140, 147, 183, 69, 158, 82, 10, 227, 130, 189, 3, 34, 170, 57, 43, 240, 235, 11, 71, 179, 232, 96, 115, 207, 30, 97, 42, 110, 214, 134, 31, 71, 242, 45, 28, 173, 205, 66, 73, 213, 247, 165, 252, 226, 166, 178, 192, 228, 233, 4, 123, 162, 190, 119, 97, 53, 59, 168, 82, 75, 47, 53, 251, 15, 134, 105, 140, 143, 155, 174, 132, 123, 179, 50, 17, 239, 171, 42, 12, 200, 88, 57, 126, 213, 199, 13, 153, 127, 215, 87, 112, 92, 121, 167, 35, 242, 136, 170, 102, 222, 225, 54, 202, 207, 17, 86, 8, 235, 181, 79, 223, 139, 231, 167, 191, 225, 240, 79, 51, 0, 177, 229, 203, 218, 187, 190, 128, 140, 38, 204, 85, 8, 3, 208, 179, 35, 223, 172, 243, 186, 56, 125, 38, 105, 61, 27, 169, 181, 75, 136, 88, 130, 51, 34, 155, 23, 150, 160, 225, 193, 169, 200, 63, 246, 173, 95, 22, 123, 32, 183, 60, 134, 71, 141, 47, 96, 217, 162, 35, 155, 20, 176, 88, 239, 250, 33, 253, 56, 171, 184, 65, 83, 244, 47, 171, 197, 240, 237, 93, 136, 90, 1, 202, 150, 46, 66, 69, 110, 177, 236, 95, 122, 101, 168, 71, 45, 56, 215, 36, 141, 248, 165, 246, 117, 40, 49, 232, 37, 42, 24, 123, 210, 34, 149, 122, 184, 189, 169, 139, 27, 134, 246, 91, 136, 243, 209, 167, 191, 140, 114, 166, 207, 211, 254, 138, 116, 176, 242, 18, 83, 111, 129, 107, 183, 76, 136, 82, 23, 38, 58, 87, 216, 45, 156, 192, 253, 1, 112, 166, 26, 190, 145, 212, 190, 9, 201, 120, 194, 174, 195, 186, 137, 170, 66, 198, 250, 145, 43, 208, 157, 197, 236, 101, 113, 75, 188, 27, 178, 133, 183, 238, 113, 223, 211, 48, 54, 23, 110, 249, 82, 195, 146, 124, 28, 142, 182, 48, 177, 176, 16, 71, 155, 3, 191, 92, 174, 42, 165, 194, 63, 226, 186, 19, 28, 224, 200, 126, 246, 25, 18, 124, 76, 210, 146, 162, 122, 184, 85, 165, 63, 109, 245, 239, 4, 153, 87, 221, 197, 40, 68, 168, 142, 156, 44, 169, 115, 85, 174, 151, 166, 107, 201, 168, 223, 211, 144, 179, 16, 230, 30, 26, 170, 127, 129, 55, 9, 193, 65, 239, 216, 180, 117, 210, 167, 50, 84, 151, 44, 174, 129, 160, 188, 209, 237, 89, 19, 142, 204, 153, 125, 169, 246, 234, 100, 25, 219, 131, 32, 66, 72, 255, 220, 97, 241, 76, 227, 125, 125, 67, 237, 105, 14, 114, 175, 92, 134, 29, 123, 236, 6, 250, 75, 72, 71, 140, 182, 54, 139, 194, 211, 208, 252, 250, 120, 159, 153, 163, 3, 124, 226, 240, 94, 170, 83, 204, 193, 62, 205, 86, 86, 76, 224, 227, 233, 45, 111, 124, 235, 84, 35, 29, 110, 173, 156, 50, 29, 68, 239, 25, 57, 87, 7, 220, 201, 142, 183, 175, 247, 96, 65, 202, 207, 92, 9, 85, 117, 102, 116, 120, 57, 170, 162, 180, 228, 151, 111, 181, 177, 184, 137, 74, 59, 180, 21, 143, 134, 152, 13, 134, 96, 68, 134, 27, 161, 228, 129, 138, 191, 121, 135, 158, 54, 166, 72, 232, 253, 233, 190, 197, 124, 51, 91, 154, 181, 247, 252, 159, 200, 186, 128, 63, 166, 183, 164, 69, 82, 166, 72, 177, 57, 250, 241, 84, 8, 151, 38, 197, 181, 136, 251, 204, 93, 23, 55, 130, 185, 125, 92, 182, 132, 205, 140, 186, 49, 69, 85, 56, 248, 154, 81, 217, 191, 121, 202, 99, 118, 248, 56, 63, 11, 211, 182, 58, 64, 36, 90, 163, 96, 128, 70, 98, 241, 185, 111, 94, 157, 198, 191, 198, 215, 193, 86, 57, 111, 53, 236, 214, 17, 232, 70, 190, 43, 34, 161, 232, 158, 179, 140, 56, 36, 121, 228, 107, 134, 128, 154, 152, 148, 182, 204, 22, 254, 45, 242, 61, 109, 205, 149, 100, 174, 80, 206, 239, 88, 221, 182, 180, 253, 125, 60, 243, 220, 214, 158, 119, 47, 39, 52, 152, 6, 150, 237, 83, 67, 198, 63, 169, 51, 100, 2, 94, 222, 235, 166, 109, 118, 52, 135, 197, 45, 218, 210, 78, 31, 5, 114, 159, 99, 99, 155, 86, 162, 16, 150, 171, 65, 93, 48, 120, 0, 195, 38, 148, 143, 157, 161, 223, 218, 147, 86, 174, 68, 9, 198, 38, 142, 99, 253, 152, 58, 86, 141, 220, 246, 171, 242, 15, 126, 12, 2, 217, 249, 163, 225, 2, 98, 53, 23, 25, 227, 243, 138, 243, 38, 92, 199, 255, 65, 232, 167, 77, 181, 95, 73, 229, 190, 98, 193, 35, 208, 39, 139, 154, 46, 167, 139, 51, 74, 20, 25, 241, 186, 112, 93, 31, 217, 163, 137, 101, 7, 45, 2, 42, 104, 187, 158, 101, 172, 167, 158, 197, 252, 248, 202, 65, 255, 244, 80, 172, 200, 155, 247, 138, 191, 6, 106, 96, 206, 230, 62, 165, 168, 182, 92, 177, 183, 7, 29, 150, 98, 236, 126, 152, 87, 57, 147, 111, 78, 108, 251, 94, 173, 22, 99, 58, 239, 236, 134, 154, 188, 111, 28, 55, 83, 117, 120, 54, 239, 71, 168, 100, 27, 74, 162, 216, 139, 188, 190, 142, 129, 189, 254, 108, 76, 5, 139, 144, 179, 78, 60, 175, 81, 76, 202, 198, 54, 80, 201, 206, 74, 4, 228, 159, 214, 226, 91, 60, 96, 179, 117, 207, 23, 111, 206, 230, 96, 92, 215, 234, 26, 143, 53, 11, 155, 76, 215, 20, 68, 25, 65, 135, 137, 158, 177, 196, 69, 184, 212, 80, 141, 125, 218, 179, 192, 47, 167, 222, 108, 166, 201, 229, 142, 175, 219, 64, 226, 157, 246, 246, 12, 40, 98, 237, 81, 108, 62, 148, 56, 148, 248, 152, 203, 26, 168, 19, 177, 97, 218, 50, 113, 116, 241, 122, 236, 41, 1, 250, 135, 95, 194, 197, 94, 76, 234, 217, 15, 243, 231, 24, 141, 1, 119, 83, 195, 227, 45, 191, 217, 179, 244, 15, 229, 128, 198, 78, 136, 119, 112, 230, 125, 103, 2, 72, 230, 180, 69, 199, 247, 128, 126, 176, 226, 60, 208, 11, 44, 31, 38, 224, 130, 84, 6, 103, 50, 63, 205, 42, 239, 192, 121, 38, 184, 149, 192, 18, 244, 128, 132, 192, 178, 213, 165, 146, 57, 64, 55, 48, 121, 220, 8, 99, 255, 218, 181, 45, 204, 122, 75, 223, 172, 166, 41, 21, 171, 198, 28, 183, 144, 161, 20, 41, 231, 21, 161, 207, 109, 36, 251, 115, 91, 167, 79, 3, 162, 160, 255, 82, 237, 22, 73, 202, 175, 139, 241, 47, 172, 151, 129, 197, 46, 127, 116, 149, 235, 58, 29, 181, 251, 202, 47, 248, 93, 141, 140, 66, 205, 44, 61, 111, 6, 48, 120, 134, 99, 234, 241, 156, 246, 105, 16, 164, 177, 58, 127, 79, 15, 14, 232, 43, 11, 85, 81, 104, 245, 72, 103, 2, 129, 146, 129, 117, 208, 199, 65, 110, 254, 167, 154, 213, 118, 171, 210, 36, 235, 3, 4, 43, 52, 169, 3, 38, 0, 51, 83, 252, 82, 43, 241, 73, 226, 225, 182, 159, 108, 164, 205, 221, 154, 51, 180, 194, 104, 82, 129, 180, 90, 224, 247, 48, 191, 53, 6, 164, 35, 140, 85, 120, 41, 76, 171, 92, 129, 251, 73, 8, 62, 60, 122, 126, 165, 59, 229, 154, 49, 76, 29, 149, 214, 25, 37, 126, 63, 174, 220, 5, 140, 173, 193, 38, 173, 210, 229, 71, 75, 241, 209, 167, 225, 217, 78, 35, 10, 91, 232, 150, 145, 21, 30, 108, 89, 223, 79, 182, 4, 177, 62, 144, 37, 239, 242, 104, 71, 11, 176, 46, 127, 99, 224, 112, 25, 252, 84, 126, 192, 27, 92, 182, 78, 45, 209, 55, 227, 63, 179, 160, 171, 192, 254, 118, 71, 221, 2, 51, 68, 206, 128, 84, 198, 134, 220, 249, 140, 157, 164, 243, 173, 148, 188, 65, 31, 135, 210, 31, 222, 198, 141, 80, 112, 129, 110, 93, 187, 249, 176, 133, 81, 0, 115, 61, 215, 148, 254, 113, 130, 136, 49, 250, 9, 4, 50, 186, 120, 4, 156, 132, 202, 242, 64, 16, 203, 85, 206, 14, 63, 122, 197, 236, 235, 191, 9, 250, 154, 233, 138, 210, 49, 75, 245, 78, 109, 220, 147, 113, 206, 22, 49, 42, 168, 70, 167, 248, 34, 48, 95, 250, 95, 130, 192, 170, 137, 33, 77, 152, 84, 102, 122, 187, 89, 101, 180, 94, 87, 125, 156, 229, 180, 173, 77, 191, 150, 110, 191, 129, 242, 103, 4, 0, 30, 159, 251, 200, 144, 136, 164, 228, 190, 172, 38, 212, 119, 100, 46, 58, 93, 131, 153, 71, 180, 159, 251, 104, 234, 45, 215, 178, 142, 16, 125, 206, 1, 213, 127, 252, 196, 176, 108, 250, 84, 239, 109, 85, 208, 48, 208, 221, 97, 22, 110, 108, 90, 37, 244, 205, 16, 43, 181, 131, 218, 145, 170, 34, 33, 240, 212, 119, 209, 173, 251, 7, 164, 218, 10, 139, 29, 33, 222, 180, 209, 16, 25, 98, 244, 15, 70, 124, 143, 95, 150, 223, 76, 116, 65, 203, 28, 221, 128, 196, 147, 25, 19, 41, 69, 199, 12, 72, 243, 174, 27, 19, 0, 46, 144, 95, 231, 184, 200, 185, 176, 217, 20, 10, 202, 10, 62, 82, 193, 234, 211, 84, 229, 184, 125, 240, 115, 9, 251, 73, 36, 126, 95, 11, 0, 115, 229, 195, 40, 154, 137, 173, 194, 244, 93, 147, 160, 74, 178, 105, 153, 60, 68, 177, 143, 232, 86, 170, 98, 179, 73, 42, 224, 3, 189, 10, 150, 104, 65, 17, 120, 68, 20, 9, 55, 118, 58, 3, 241, 201, 87, 16, 213, 116, 46, 9, 115, 102, 44, 212, 45, 242, 89, 124, 52, 2, 13, 134, 169, 117, 211, 20, 187, 209, 141, 226, 99, 128, 78, 181, 191, 179, 174, 145, 1, 64, 148, 45, 52, 197, 138, 38, 243, 149, 188, 211, 157, 38, 162, 159, 64, 138, 83, 82, 159, 54, 172, 126, 155, 175, 61, 224, 23, 150, 116, 225, 95, 110, 245, 137, 207, 72, 66, 208, 8, 95, 232, 151, 117, 1, 98, 166, 244, 237, 206, 52, 126, 79, 132, 97, 225, 180, 240, 188, 152, 24, 161, 228, 154, 132, 80, 129, 62, 80, 118, 60, 71, 141, 133, 189, 0, 15, 189, 30, 92, 211, 96, 34, 207, 102, 241, 226, 68, 20, 231, 144, 55, 95, 167, 77, 241, 79, 115, 203, 163, 200, 235, 209, 39, 196, 214, 207, 228, 153, 103, 229, 208, 64, 68, 126, 13, 94, 6, 190, 240, 235, 6, 13, 149, 216, 34, 128, 167, 190, 145, 138, 211, 165, 124, 96, 126, 187, 109, 62, 242, 178, 23, 232, 206, 188, 61, 187, 234, 150, 130, 110, 100, 171, 166, 3, 168, 16, 251, 211, 198, 22, 136, 76, 113, 249, 250, 141, 218, 52, 235, 29, 165, 69, 93, 187, 236, 201, 79, 37, 195, 4, 155, 55, 92, 34, 223, 186, 85, 74, 107, 229, 116, 195, 235, 234, 176, 138, 155, 63, 69, 209, 166, 107, 136, 168, 236, 214, 165, 93, 51, 198, 144, 193, 130, 135, 229, 48, 217, 238, 114, 97, 235, 52, 241, 239, 76, 56, 103, 99, 125, 75, 147, 41, 128, 51, 146, 36, 195, 241, 60, 230, 213, 52, 101, 144, 145, 131, 201, 248, 102, 9, 0, 155, 71, 190, 113, 154, 189, 174, 165, 8, 212, 237, 140, 3, 229, 230, 198, 174, 240, 171, 176, 172, 59, 63, 3, 149, 190, 48, 172, 35, 54, 10, 241, 201, 112, 202, 184, 49, 42, 79, 173, 79, 20, 170, 189, 131, 171, 229, 230, 69, 78, 76, 152, 187, 244, 255, 148, 132, 229, 228, 171, 202, 198, 253, 67, 8, 7, 122, 43, 109, 6, 118, 14, 89, 29, 134, 12, 173, 90, 28, 121, 203, 188, 245, 84, 189, 190, 99, 236, 85, 4, 7, 125, 76, 148, 207, 172, 35, 17, 228, 47, 239, 68, 36, 183, 202, 37, 249, 63, 169, 10, 4, 123, 50, 213, 228, 81, 158, 56, 132, 208, 87, 175, 124, 111, 37, 124, 37, 24, 13, 74, 144, 52, 97, 111, 99, 78, 157, 51, 63, 76, 84, 131, 35, 147, 225, 248, 200, 248, 4, 255, 25, 151, 50, 210, 43, 149, 165, 152, 1, 253, 181, 182, 139, 237, 93, 79, 188, 104, 226, 182, 44, 136, 191, 171, 175, 100, 188, 191, 105, 38, 109, 14, 160, 154, 231, 172, 195, 51, 234, 191, 104, 201, 61, 50, 76, 124, 35, 86, 35, 231, 111, 70, 3, 95, 40, 113, 103, 147, 224, 68, 8, 14, 150, 2, 146, 62, 128, 41, 37, 109, 173, 57, 158, 236, 206, 74, 86, 105, 136, 55, 70, 90, 182, 222, 62, 57, 230, 146, 13, 248, 99, 91, 57, 158, 185, 26, 97, 246, 248, 192, 148, 63, 144, 28, 189, 62, 170, 133, 203, 243, 250, 87, 111, 42, 219, 189, 166, 21, 214, 209, 37, 170, 82, 20, 231, 250, 128, 185, 17, 106, 141, 11, 52, 175, 128, 50, 202, 174, 95, 221, 98, 35, 13, 14, 10, 223, 21, 43, 166, 62, 94, 184, 204, 197, 119, 6, 250, 177, 225, 242, 199, 68, 1, 235, 101, 0, 18, 146, 149, 176, 16, 168, 115, 160, 220, 85, 48, 171, 230, 124, 72, 121, 234, 178, 36, 65, 228, 35, 107, 124, 115, 155, 216, 106, 100, 207, 186, 141, 78, 94, 237, 38, 87, 89, 173, 185, 130, 139, 196, 206, 49, 7, 127, 62, 143, 157, 158, 51, 182, 175, 95, 34, 175, 42, 138, 103, 179, 207, 47, 4, 16, 79, 88, 47, 21, 78, 182, 110, 30, 24, 146, 176, 192, 238, 186, 102, 175, 120, 101, 245, 179, 144, 4, 148, 226, 110, 156, 17, 98, 62, 245, 108, 249, 104, 213, 184, 137, 214, 96, 234, 43, 68, 14, 130, 213, 57, 247, 71, 125, 79, 249, 61, 154, 19, 89, 174, 75, 215, 208, 124, 89, 197, 109, 214, 202, 137, 42, 211, 253, 221, 223, 35, 32, 13, 211, 91, 17, 10, 244, 53, 194, 146, 89, 138, 108, 137, 7, 182, 229, 67, 129, 232, 235, 223, 237, 241, 226, 146, 239, 38, 48, 162, 217, 57, 7, 28, 28, 149, 49, 206, 83, 63, 247, 112, 121, 141, 5, 2, 85, 236, 191, 223, 69, 33, 64, 247, 121, 190, 141, 17, 161, 239, 156, 189, 157, 181, 76, 221, 218, 28, 4, 48, 82, 248, 171, 68, 133, 155, 173, 81, 250, 144, 166, 211, 176, 243, 166, 22, 45, 86, 105, 165, 11, 144, 119, 163, 72, 77, 229, 165, 114, 168, 241, 221, 61, 224, 61, 134, 114, 45, 94, 93, 108, 50, 208, 181, 2, 68, 210, 117, 186, 156, 99, 81, 2, 157, 151, 218, 97, 18, 20, 55, 129, 97, 155, 132, 209, 132, 14, 182, 201, 186, 238, 216, 255, 112, 167, 19, 192, 88, 57, 152, 32, 108, 114, 172, 20, 75, 154, 146, 143, 175, 238, 204, 135, 46, 146, 202, 113, 74, 16, 184, 105, 3, 31, 58, 18, 138, 228, 89, 40, 187, 171, 24, 248, 34, 211, 208, 241, 81, 145, 106, 158, 165, 154, 149, 205, 6, 213, 69, 91, 102, 246, 85, 62, 2, 51, 178, 140, 45, 108, 1, 218, 34, 31, 31, 44, 196, 125, 119, 227, 70, 111, 125, 133, 133, 199, 15, 8, 32, 213, 36, 173, 148, 84, 66, 230, 37, 4, 148, 49, 112, 101, 132, 122, 187, 113, 123, 95, 93, 14, 146, 202, 237, 218, 174, 210, 26, 211, 123, 107, 84, 43, 132, 128, 76, 185, 4, 189, 212, 244, 251, 225, 51, 255, 255, 70, 37, 231, 229, 5, 181, 215, 175, 112, 117, 249, 225, 73, 35, 209, 164, 101, 100, 36, 195, 108, 162, 97, 23, 169, 206, 171, 250, 157, 241, 9, 134, 131, 243, 142, 116, 85, 15, 57, 11, 91, 214, 159, 24, 176, 215, 124, 65, 238, 42, 41, 84, 104, 207, 21, 174, 136, 235, 58, 130, 229, 24, 9, 162, 225, 230, 133, 213, 86, 219, 122, 245, 39, 16, 124, 172, 185, 114, 6, 246, 126, 27, 166, 165, 14, 191, 54, 221, 197, 200, 86, 217, 95, 134, 24, 9, 253, 87, 134, 54, 66, 166, 160, 154, 52, 119, 38, 118, 140, 180, 209, 199, 114, 174, 47, 191, 125, 92, 65, 145, 18, 3, 192, 68, 208, 123, 24, 139, 169, 55, 67, 177, 42, 244, 200, 73, 207, 152, 225, 246, 140, 108, 14, 170, 64, 163, 95, 36, 38, 2, 16, 247, 122, 101, 245, 132, 60, 130, 196, 42, 214, 232, 218, 125, 199, 59, 173, 147, 107, 194, 227, 170, 38, 171, 199, 140, 93, 185, 53, 66, 42, 158, 110, 15, 7, 15, 189, 123, 7, 50, 224, 41, 160, 159, 195, 227, 24, 253, 250, 98, 107, 145, 162, 21, 163, 31, 14, 194, 93, 137, 184, 222, 91, 78, 35, 99, 105, 251, 117, 142, 169, 239, 242, 255, 137, 130, 196, 144, 134, 176, 206, 231, 59, 245, 180, 89, 6, 10, 9, 154, 215, 130, 18, 251, 140, 154, 39, 255, 185, 131, 67, 177, 177, 157, 24, 120, 2, 190, 223, 154, 188, 234, 181, 9, 84, 108, 28, 99, 227, 46, 52, 140, 246, 216, 244, 132, 203, 71, 126, 199, 2, 178, 2, 47, 178, 8, 38, 208, 10, 121, 101, 20, 100, 23, 228, 87, 79, 80, 196, 0, 167, 239, 251, 19, 138, 38, 205, 100, 95, 199, 84, 152, 225, 149, 163, 126, 91, 156, 92, 117, 194, 56, 86, 85, 112, 99, 48, 205, 244, 67, 162, 202, 179, 143, 128, 119, 220, 42, 179, 7, 181, 17, 80, 41, 11, 29, 37, 165, 199, 157, 167, 128, 181, 42, 76, 30, 222, 221, 80, 213, 108, 73, 33, 130, 155, 119, 24, 250, 63, 47, 160, 211, 1, 158, 128, 166, 4, 232, 216, 1, 173, 148, 215, 48, 147, 182, 232, 0, 156, 106, 45, 44, 230, 141, 145, 109, 140, 160, 121, 187, 81, 55, 120, 101, 14, 100, 67, 227, 162, 146, 230, 90, 147, 59, 183, 179, 83, 214, 104, 109, 187, 162, 193, 220, 55, 51, 133, 196, 15, 141, 237, 50, 47, 56, 167, 173, 191, 201, 163, 100, 146, 207, 255, 178, 115, 27, 201, 238, 55, 252, 118, 214, 105, 33, 78, 129, 27, 97, 210, 126, 230, 199, 140, 224, 59, 143, 142, 199, 97, 100, 96, 135, 98, 136, 191, 146, 160, 103, 206, 72, 49, 124, 185, 96, 171, 46, 154, 1, 67, 2, 102, 170, 170, 18, 89, 69, 9, 31, 134, 243, 241, 79, 68, 27, 10, 114, 236, 185, 240, 122, 50, 229, 27, 133, 83, 224, 23, 183, 35, 235, 208, 75, 161, 223, 25, 167, 94, 234, 73, 202, 229, 179, 33, 252, 10, 110, 127, 5, 49, 82, 254, 166, 250, 231, 164, 19, 7, 241, 192, 69, 54, 66, 191, 149, 7, 146, 13, 189, 146, 137, 154, 159, 33, 163, 58, 135, 142, 127, 192, 142, 169, 127, 39, 64, 69, 190, 139, 88, 221, 61, 166, 196, 232, 18, 87, 212, 212, 188, 60, 145, 32, 101, 103, 249, 8, 85, 88, 126, 249, 216, 203, 220, 23, 254, 124, 180, 96, 221, 102, 231, 71, 125, 222, 188, 2, 136, 116, 61, 76, 206, 228, 67, 202, 85, 154, 164, 193, 12, 176, 187, 164, 9, 44, 25, 111, 20, 88, 247, 232, 193, 21, 184, 142, 146, 44, 98, 14, 37, 98, 189, 35, 191, 169, 234, 223, 57, 125, 188, 85, 144, 164, 47, 124, 96, 40, 112, 202, 178, 189, 252, 232, 24, 203, 6, 186, 105, 137, 15, 22, 56, 175, 27, 52, 255, 248, 99, 201, 202, 93, 127, 205, 246, 142, 17, 176, 14, 128, 126, 155, 99, 35, 116, 103, 249, 248, 66, 241, 94, 159, 77, 54, 6, 52, 135, 231, 116, 240, 27, 37, 109, 67, 220, 49, 14, 189, 42, 184, 61, 9, 82, 174, 76, 221, 225, 33, 151, 219, 169, 216, 207, 193, 154, 252, 78, 254, 233, 103, 142, 82, 4, 210, 119, 250, 161, 172, 55, 180, 19, 77, 250, 90, 89, 9, 225, 136, 160, 95, 3, 183, 68, 246, 59, 212, 135, 243, 15, 190, 107, 131, 167, 221, 113, 100, 89, 196, 224, 22, 28, 201, 43, 16, 9, 125, 41, 120, 47, 137, 85, 106, 112, 181, 219, 56, 98, 100, 61, 18, 142, 7, 204, 147, 122, 68, 35, 73, 42, 99, 223, 136, 59, 148, 117, 181, 71, 14, 127, 128, 1, 120, 239, 144, 187, 234, 131, 173, 150, 4, 132, 221, 216, 109, 19, 88, 83, 234, 64, 129, 236, 55, 69, 191, 76, 40, 164, 171, 36, 187, 153, 235, 30, 135, 114, 76, 99, 180, 179, 23, 10, 137, 180, 214, 195, 52, 142, 51, 115, 1, 14, 183, 33, 146, 246, 173, 160, 70, 162, 176, 53, 219, 201, 89, 225, 150, 212, 180, 68, 163, 96, 62, 160, 183, 161, 182, 166, 217, 83, 242, 141, 13, 126, 254, 174, 139, 231, 251, 252, 239, 118, 239, 14, 152, 202, 210, 170, 42, 239, 139, 141, 218, 218, 18, 139, 215, 16, 202, 28, 70, 58, 119, 193, 4, 123, 201, 133, 10, 155, 191, 231, 103, 169, 33, 239, 78, 240, 20, 136, 251, 235, 50, 80, 111, 18, 127, 176, 168, 206, 120, 237, 164, 201, 98, 114, 92, 61, 143, 71, 151, 249, 181, 88, 220, 166, 22, 209, 164, 148, 108, 242, 15, 97, 120, 148, 60, 136, 72, 98, 242, 56, 195, 235, 119, 72, 18, 161, 92, 167, 89, 240, 234, 242, 206, 204, 74, 137, 126, 71, 64, 29, 43, 168, 31, 69, 6, 207, 177, 0, 107, 34, 220, 252, 14, 64, 103, 132, 157, 43, 145, 144, 11, 15, 83, 122, 163, 54, 186, 90, 14, 226, 72, 95, 137, 198, 242, 30, 212, 130, 242, 221, 107, 30, 149, 36, 202, 144, 132, 96, 245, 68, 243, 158, 106, 164, 71, 244, 105, 46, 50, 127, 3, 83, 10, 126, 36, 96, 154, 252, 2, 187, 194, 47, 30, 146, 232, 34, 103, 213, 205, 120, 237, 232, 217, 191, 219, 69, 81, 218, 99, 153, 141, 218, 103, 238, 65, 0, 246, 11, 240, 192, 245, 123, 45, 42, 182, 13, 249, 13, 143, 28, 168, 207, 180, 114, 238, 24, 60, 102, 246, 197, 235, 138, 243, 205, 246, 3, 57, 24, 179, 220, 171, 179, 26, 64, 198, 237, 108, 81, 130, 15, 61, 56, 35, 26, 73, 70, 228, 245, 121, 174, 31, 99, 10, 130, 222, 252, 181, 155, 208, 115, 173, 174, 231, 206, 108, 2, 59, 212, 78, 225, 202, 190, 177, 250, 130, 105, 91, 36, 120, 42, 15, 30, 221, 113, 186, 147, 103, 33, 204, 177, 131, 9, 164, 119, 135, 218, 183, 213, 160, 246, 195, 128, 229, 164, 63, 53, 130, 241, 171, 233, 66, 217, 240, 64, 189, 71, 18, 249, 162, 23, 65, 125, 30, 81, 227, 65, 113, 16, 187, 108, 69, 249, 208, 41, 210, 36, 58, 45, 37, 32, 156, 64, 228, 254, 5, 16, 90, 19, 110, 1, 21, 91, 173, 13, 205, 249, 70, 193, 105, 124, 3, 210, 245, 164, 72, 53, 198, 138, 152, 177, 34, 118, 98, 129, 27, 82, 87, 232, 230, 239, 73, 167, 144, 221, 40, 112, 23, 13, 177, 55, 243, 216, 52, 181, 240, 3, 28, 4, 33, 37, 190, 26, 215, 201, 91, 35, 97, 0, 26, 87, 105, 17, 173, 209, 238, 104, 38, 173, 122, 138, 170, 197, 156, 107, 105, 228, 206, 79, 108, 222, 136, 154, 162, 122, 131, 1, 11, 52, 61, 67, 139, 111, 209, 74, 42, 219, 163, 248, 101, 16, 186, 21, 154, 97, 18, 198, 153, 32, 155, 176, 173, 99, 248]), - hex: '0xc77319bfce98759c21cec7e6585d7652021558ad26629eeb64d10bd0b15c1ce9deaf45b5da7309fdb2b621769cbfb84b68330eab6b8a5ca6f3dd3cbed8d7e6c63c4ab2a664d5c9fd056bfe3f725c716d67872edf6aeea3a2522c68309e852aa9f694f553d8581abc3f7fab0f58be6a2adfa1cdba0e81b090dd5549e192275871819b0ace21b32ae8f7763b8f65bbeb9bece4f8ae724cee343099c99a4808973882ab98310ad005fe8940a96fab1a436430f766fcbdad003174b0b94962ba2832cfc129a3e2a6d2f75f2a0fc3091cbe3a55db676357a049a2b2ee0c1e6ff9915ff057fceb37191782653453365828348322f72d62f0a5f0f633f26be4d298dcc07d2815eca72c2e9b0313059fc170a787770055b3470cf7284efb2e3a401c46941b4da4cd4f58477de18b1fa97c67415cbe1b12ea4e64374cefd8123516e8d8ac3da6561364a7bc7c7e9bb6cb50248a4e6b108d955c1761b9cae97e07810415fc1f8d149d594679eda5b427c85ee2b274de128271dc88bb51cbc8a77573f553903980b1e26f5502caee3d52f5464e7dde4d85285844ac7a162d8350e88933db0dc6a278b4a351848e704cbe619b5e7cf4c69cb1d9b9fb9b27042d695fff79b1e3569a31030b963221a296d2c2b89cce70881be24515099508f677e047c062e14562169f632f1ce0a0bcf1998767227b6cd6539e341f44d395183b2de3ecf1dc06191386b3d6b737a6869aa7376c9caf818c8c27d44555a72149fa21c3a5b68de64f648beb0bd8712e84d21d1cd2f8b9103db0e55f59820aee20e65591264d92ba762690720d2ab8fdadf62d5afbfef4e9863e66092710a0f65b3c51dbd3d850ec4a73edc185fa0263013192a77426dc3df58199ad76657db1ff6d23fd032bacab82e818b32e7847635afab67dd7877439f8e03cf7482ae8287f8412378a0506f5fb8a3c7eb344422e3a5d9766bc166235f21aca372542537c7b1eb6d671c9b8a7df0b310c76f9c3cc13a41e79e8ccc9f4e81275919b9ed19d66414595114d1ad5bbb33aed40a3b5841414776d49cedbd0f353ff7534470272d5bb9424aa26c6f5207d5fea525bbbffa6e06af28986eeae0e0552cea0331b26cf890afafcb39c51055e827bba428c7cb49d552fdda7fccbe16b720136f31a793f5706bd480ff8dcefc27b837e754c4791f8c64d93f96fb23ca75cb4c5893da4c8fb48ead34e2807f2b9180e713f72fce2d59f38f24943d4e8a84af3419d2ca21589e103941d56b3087b8ac01e194cd5f1df51ec92e4e2cadb3876f55eae49ecd62c37874d56c8dd7552fb3657b67ec6b9ab824a4bb24a9a7a6a19893d837575435c1dfe990507c6ba2c751e5ac8ef30a3da74442c32878efadf7075b2b16360c98999eff2a89f16d0fd86133c08ff6001082095ef261e9bbcd492606b7c2367c852578eeee310747ff37e0d771b3e3a0965780afe56c8138cf2c451b6da466b5a1a77c3f3d2a39e18a86c589a7a187e99c4c82bb0676489df30a8701cce07bb64b74dade7a7e9c08cd81e5f537cb333a4dd13449a390e1b256f83615b1a1de468fe04a8d99c999dc84b038fc47a39230f13a8a91ef47ae73c95f7f54779ef915cd1fe74b5aad67dd13643f79f4e32d6604124708c15df0d192668ef7f1835a801a5c9469948f78e5121cc86f23568b2cab2031b34534bf2a9bf7841498aa9e5cb70e680cc513e4f67dd31bb004ac95bb0f1159de7d71e34e0583607aee2ac8b6fa23bcab46bacc2a7f8946a0a675df68554338d27ed37f42cb1dcc9bf315973acca5cba2748adffa5c3e7903243a1ffa479b5311a89bfe115c51d2fb848f71746a8867e7d80cab59cde8c3653f5551d3ca5a4a86c6b0031e3e3bbd29ca260b08071492d8e72c5317b47d392f0c0f980799d5e8b5faca7e5fbe7103e93649f4348ab4a9d8b7c6e85419c6e0937f55eb4535696cd06fc05649b4abfdd38f1ce4995f7da912ede1d2ffccec707249acdc58e89a9528a539ce9187636d4e9ac778d5d56d9903623fed326f9e6d9ae9d354853fa3db166309f0e3d6124ab539849327860264059b3fecc2594db8e5ea24107c12dcb06cf8c80a203a05323989d90b149268348ca201c81be1547ff39375cb52592103cbd8a387303154c50353a391f851fe90b43098dc237ae13fdff233b50ff1c779432dc78e7fc7e72140be45cab3d609890e2dc73362c1fe1261ea5eb091cc356d477344e5f5acc4f0c8365f2d565376c95105afdb517d33107f3bb31ba7358569908a68a61cdcd8400a02526352a35c36a94214e8f7ba9c1c3ddf3a63ce36df0c24e86bd9d14c0aef0c360863746d5fe83bef929d078981eb45d722f9751eeb28cd8e5ef10a1739495ff9a00c5b850d80c1031c50fd489fd369cd8ccdf92f4e1e9e602c0741cba362fa4f0404b337ad93edafc8b0f048295a7eaa9f0daadff60b8625a6353845b9e03bf18c833d1596572d70b0bf6d55ebf5f4ad31e1915cb18e148ae67c202f43095a2304a6081447228d77c509078997bb9bf4a852f4d6bd6e2040be3e038ed22f1b30e879dd6bcbc30eaa22fc1327747ec86000c305bd1de7eec37b88bf965d6480e54ca9e00d3b3380dda9f782c8b4ef3dba136b00378fd15c430f722d84ceee3c8d484cac72a5e58a3db34e17f32443df27363f6f439bccc1ca4da5e2b9eceec456f2b5b9a3c7bcbbbc9aa9a1bd07ef743bf688222a85112e43fbc9dd998c546df6a88942c5d412306f9c18572b1409dcec91511fd48e4426e0acfcf252ec0d78b03c75a094e30065bca2a811d8420dba4b5e33ae10339e7141056ce58c98a8ec6a7e24dd380ded3bfe4422a7c92dc63f680fa25d9b498ced9d520ed53e950d98b1eb7a2fd5e5f950d4c05e609e2eca893d929059149bca7c3735dd91b231bd52487ef1d0f0def01c0c408e6ab7e3dcdfe78be9b2b072d8a1272ff420a1ce78e68f4f6612019a893a87af10a46ea35c700e3c8bb99b44a081fb04d78deffeba0ddea544a38d54630137acfc9d0b048ad53864e33b0e635238387d5e28248e9682ec3069a7a250333549079559602d1632f8bef4f41fe23a2b6b1db287c8e852a7602cfe7d8bdfe177b3667c002fe54243142d8668117a413374a3838c55867c9a3b3ad77115c9245d59f3ea193b19552eb8f7b356a754c94faf9483958a7d26354fcf633f735b69a2907f3ed111cc0d41775a3df2d2534bfda56f12346f9bf62c3c1785b0f7e43df7046225ae3fcad7a550c734b87281761d73b2e9117ae49b600c3d6b783a737bbbe2d65c935930fdfb9f138a393a0adf6c7f920818df80aff9c70b656fe1cb0a23cadab210139866b7d4e25870735d35bd1191f8d61ba23e24a0832d3e55b88869d7da4d36597f788c31e6dde618860c2e24396bc6f0fd2c93de1c1ca85a2d495359be1a05c3749c9433bff09993befb031a9ac1bba80d520146c9f1ccd97a86e04b1837f15a9a9f5577ce9cade1cea5c134959d916b4df86f5f1f35dd61e848eb32f16a272974a6759e7c3ff43821edfc230a9151df613686127e85615d0840f81e05e463169982f82db9a5b1712edf96d0d0bbd0c050554d424672263ad70306fd84b476e29b9561796e2903fca31341cf139060618a1f19afbd1d89285327c2631e01a031487374b21a6ff554256c7fce4b3a6ea007374ef5a53539c4ed9a292d8d8932b81fcea164f4d97d2bcbf7c2ca039d02a11325c6ec352d3c0f6227e5a17cee567229aedb99b66ba146c432eceaabec2d65137892e85c67911afb507686ea7f53f4955b97e7dd73f225f14c97bbec0bb1cac37762fec70e73857cc8b93d6d2d4c37dda07daf503ce2ead6c22f81296ad5e0f515bad67560ca36ac47bf89db40343cbaeb354f41c11850fed0672bd01928be8a3dcea733b84fb9693a651e60114397e749fe491d419ec54a5ce778367bc5c1358300e44db785578bcee24edc4617e1f407a4f9ef7f4c4183c40ba9c15b6b8ae64cb76efb1577da26b0c7d9ea7a8adc021eb9fb7b247a476b5c6c6f5a563ddc1cfd07c35e6a7a5c9c443b969f56fa254fcb5e34ab8288878587c2cb9cf219442c10b366143e02a4a5d2275e49e783c77fd6dfa26ec49f391883bded8a3d818a998213b632a1a049caf12391d29b8f9b394fab55db5deda3e40cbdc7461cd7719975428b045520c14c8665346bb5bb9b1eb7a73f517ee6b60c90907b5e8d20402da24dec5ba9e05868135da636d1cc1d7b011ecdbc03a0dfc8b3365f2ce44f00071ce5a7bca9ef5fdf880bf0ef33d8e2303667198b4559afba3c5f453ea303b42108eb2635ca1622783d65d047ab260a2613dba4eefabba400ab7b1079b2bb9a37c2a6e34f426124a5c08da37c19ffe3c7914c4b4fd5d1f5d96e211b890f28313ffc3b6857b7da03ceeae8d74bd4e1fe58eff15668a0ad6915bbc1be34113afb6d851e86a8aa2ae47c3d7bf411ddb9a2ac52ee4877e545eb4799684df43fe58adebf4376703970796d5ec63b8dca6f9aac90b5e65d14d2f011f6d4742435e47336a88b26547430dcf08c88b559f12a40b59e3920128cdd5c1e5f023aa21d4db46f3d34f9e5e2eaff8a86804786cd9c506a95303f2273499e5cae52657a2305da4debb63d347fca5e5ba78775efdc2cf655ccb71e0474e827648943fb9db963513e1988e72efcfe74c328f4b01459403473904b614967007e0c1ea3551d3729c5005d3f9a53545f20888e7b54613107fd1d476bd02f826bb46fe49f72a914139f3d76a9abb62fda91bce0a9194b78350ca1fec3d734524441d94c10dbffdeb1aebe387929700d76ca046b0c23b5e9d2e598d06cce1dfd97aae615a17ebee677b250220ff79e085d4aa30e02180f4f7f53cd62a21724da29cf0d33415fee7bc73fe2c460f5f0dbafd084e2829ef14f9d994a622686d14757c676be319a0688a2081e450fe786f3733b74c937bf0c431fa778bcde082662c821b1804ced01cfbe64a07eb0f7aa40decd62b2ce0e36e35b2b46ba0072c52c66c079fd74e1a070c092573f6ff694a572945afa5363c25c874e99a6b175f307cdf9d680db9ca020fb42f257c2b845fad4555cacc139231474a8ee970bf1df3627ffa141841785dd9af69b26ab971a3bebe5132bde403502e8c515a116b42e0a773f932ecdc9bd69b81f8295db9067864286be218a3740dd6a992249b818ba00f53e5ba7f6c8e8f1a2b07845513f979e66c5db0e6b40f3618028270bdacdd6e81f30304697466205796794d713a5a595a9d669cf3a110d60c3777c8c562485fe5c296d36287924e86dfce39229dabf63df326b8c0991c356ba8ef9601b3e113aa543d2e90a1ed3ec60eddd634c75a7d917003006cfa6eafee37a4ebbb30c91e2056bc0d7d9b78e2721c20d0374717b5a1017e0b249c2a9c9988496bba99c42930b2c06be2aa30ca6d327770c756168acbe2d8ed41a4ad8f26e3fed04836e3414b206870384d11cbcfbefdfd80625d89e660bab7c417fa80e553ee66593821afd249e1db222661224d4fd6034a89362536dc26cb49c2d424fd89f6a849f6219b1f9c6b6d8493fcffa18fc9aaf3c4144498adb0888bfe46142767138b264a31c94264fdb10beef3ef68930cd1945a2256a66e0e287599951c6a4c6b0c2cd61216afc37df76127f83690878b86d0a11a6874dc17d95d0770ecace5f3a55d0b2a2aedea4f3f6e26260ed4c147d2c3c6412e48142c717f371e0f9fa87e18fa2345908b043f5fc2346344f5a994c6caa7065f250bc3f48eb1d6e8df5819904fe656379eebcc5f0b362d143c7388b82384afc914eadc0ff1b2b572ae00aaf90c0b7779706a16c246ee8086a666bad7c914d8f8d7bd89cd61e937ae1cc337c71dc69aa9e951a513d45b8d3d1a1006e81b1db318c8f0f89ea56c3daa719516d1f0ba9466c9d44ae8d2fd441b8121e85f9790c2f1b6e2ab3fff389a93a7a89cc1af88fc8c2b0a8cf7831630d9fc3f260ea69ef397d5b40e16aa1c8f12443ccbdf99d31693dbda2d6f9a9e70fd1fa7b391a839126e26e601a868d425dd735b7ec4a28fabf738c85c9a9563352cd50ffe72af3f365b8b29dce25043eb35a6bb28dc87959ca7cfce6e7591540929bc2b263fa49e30031980126d980706e6a47c6477309078d71b359fc73efce7e3b2d598539d0c96363a4fc072fbe288c9667475447834e89c779bb4991ed0b70ac7348fa3d99e1583ad0b42be16268c7efa4c1ecaa2673bc1a8fbd0590c22e9834572c6fad9c11b03c09a3cc602c4ba1e05c58fd63c78c4a0b681cff0d91093b37893644ba062abdf251b28b59d8533cb2a1a4b715cc100370af2a3fac3294cf64d7a32cf7ba96e34ac5a5b87a643283f645ea2424296f51e9f285c0f909b1f2bdd500ef29ee55e2b9eda76e33efddaf06ab057f4069514531cbc0012c546f643188bd4bb0ef7d2b18ccf3f6ed0584b81f697c59a504e3209c125a4ebdd49021b31f8a01731bcf4f898b5dbff1d645a96484f5dcafa73a2069c4bca092e2f568e96e719e5d943e91fac48079e6f56a0653ddc3f1606ec3aa4f822f50368fcafc554d41741cd209d9db13f03da5192ff41a9726354a62cc14189f8494944bca69989849eddf89c1b76211e06937d86ac6c6247ce741e5122628891f069b367158891da8a3744015f5795521a1f43d7cdbe3dc62b2a29616f176d8ec01cbc589a3e7bfaeed128409b37412b8721d7e9c590a9f6d5578550d92e3587933cc40e416c78a16e0e44ce00a3195653721f8e520215ed52c7bfdd396cdc9051b65e497f20eb2b7d7a6af21d43598d3f14175a9be0db10d941ade57ffe640fef7efc70998eac51d9281da6634792dbe003dc0478d6746b6c9a89021724a988eabf31dda19b9e3de8641f97da1e18dde433b622d39b9957294160f6b1486e4042a2c65ae2df6062ff176b353678eded5518e55c046bf54ca3fccc0b9563d07cef8b2ce057c8180ded480d4150d24b9bb65ca350c6c0a41c5793b26c4c3d25653e89772e70c42689f78e9c0c5753be6d58cb63486383aa50eb231afe8f4b8212b70303b476943045838d6eb461f0dc379a20af3fc5f11441f120bfc072d76b6004afe877250ca9316684e4b60da8f4e4fb0a15fe73fb604b4bdc1866beab0cfc37aaea8c2593529886e67c13e0f66e8c01de42edaf488730b49451f72a7fc446e15c454797eea1621757fb9387a35d936dc7cbbdd9320460c46e95a91e2665c0bcfebf5f90a6d195a18b5199e2747c7aa1e438c3babc3243bf529773d47d6453431e031f7d617ebd25dd138e7c0a02177803db2e476699b8bacfa5aa43c368a4248fcbb9d30c82ffd6fa80d7d54e5f29a1a7c437c04bd47e6774a921a0b983ebb4f8ce45ba2fb53a2c57fa412dfa78ab8bb8ba032c671b44b41a03738786b1c8b0a8d459bacb0f235a2cdc8bb9c61151a5cfebf0aa0d1fca1eebb7bb3c9ffb6a5b173cef67f7ac3b1e7a3f2e157eaa5dced1880f1262463ace611f47c2f45d291c8c099ec0288d13ff2a9e4822f3facd26f3a6d420bfa6b205a2ea1c3bcd530d59c6edee349363c105f0c1cd1030da9b392a3dd499ca12751030233fc320b191d7764e601e83aae81cbbca89b5cbe30ef0774b9c77805f1e9e96c00c1d1a4730b580f14eacebb4a562ad2e5c62e2dea126c7eb993975bcfb01f5b8d60aab221962ece970c34d32addb54c8882b1b6bb59632a31d1a943859ffe7a73b02fe08a095cc98bace2795a791e327fd5d4f2a764946ed288c34eaf181e7ac9fc15c4e4e42372cafa6a0788dab87c6364d27979adcddc4cecbb15265553a2df54c5e2562b0efdaaabffd43147bc54019f59687ea8d08d6b4b958d8cbe941c0c71257b75cd0ff769e18dc5634f5c531b7b5f19ceaacc2f715e0bc523a59ccdc594f124f0880ed487bb02d50fe5f313a3cf1caf6a5a507cc352bfc864568194b76ac948afc4804878ff6cd121f921ccfe64d0239e21c3c4de9eabef7ded5578adc929d2aa2be8f7fe2c4e15236cc7bb51ea03e4640a3febf2b4ee667230b42f42da1aab0f1fbe7ecc50bdc2d26e3836354b345c6f37253862fd1df1c4989e49801b5805a3b2ce9e3be2ffdcf901feaa6054971e92ddc3269b78c139d9982e5215ce405339a490a8da9209d8e34c6b9660bda11e691751f4b1119de7d3971e41e9865efecc9bab65bffb4e720b82a8136884e6edc9d12f350ae06b174a5f9650ca1d9c8cca42d4b0aeb53a929570f0797c28d535e062e18e865c52127a98b74d01c36eebc7ff2367f3b8b57bb7b2f2af82ec1582d87f137e6d0b6454016cdd78e8bb112932136adfd2fc2d1d300982db604f764f343fd0d902f9baebed0d2f85db6e6ed4bd6620640b2d7eee9f659bde52eeec638c368d83938925db52ea8d01f1647002876a5b5c6dc0ddac2e481540e44259161f57078e16e05610dd09a2eb255358fa33bfc6d779a7c100c48062d915daef7bb5980f04e64735f66eb3bd22bca672d6a8e8d8061d60ba767a70e24f6068f5003439203f2a096455c8ccfaadaa5b2978186e18c6e73a32368e94aafdacb1a5f910857f222f8a90fe387d3b19076b320890f66d5e49b31b708662b7f0d47c5ecf03b2609cb5e94e4c2ec082c1353105c909771ccf85a872631613ca41053b6fa4e96c6dc9f5f3666ffe76c18d3b96abbfdeac7262027b9a20b808d01e0b4702f49779f66090da26f37308792872f5c838ab1433d8ebe8c93b7459e520ae382bd0322aa392bf0eb0b47b3e86073cf1e612a6ed6861f47f22d1cadcd4249d5f7a5fce2a6b2c0e4e9047ba2be7761353ba8524b2f35fb0f86698c8f9bae847bb33211efab2a0cc858397ed5c70d997fd757705c79a723f288aa66dee136cacf115608ebb54fdf8be7a7bfe1f04f3300b1e5cbdabbbe808c26cc550803d0b323dfacf3ba387d26693d1ba9b54b88588233229b1796a0e1c1a9c83ff6ad5f167b20b73c86478d2f60d9a2239b14b058effa21fd38abb84153f42fabc5f0ed5d885a01ca962e42456eb1ec5f7a65a8472d38d7248df8a5f6752831e8252a187bd222957ab8bda98b1b86f65b88f3d1a7bf8c72a6cfd3fe8a74b0f212536f816bb74c885217263a57d82d9cc0fd0170a61abe91d4be09c978c2aec3ba89aa42c6fa912bd09dc5ec65714bbc1bb285b7ee71dfd33036176ef952c3927c1c8eb630b1b010479b03bf5cae2aa5c23fe2ba131ce0c87ef619127c4cd292a27ab855a53f6df5ef049957ddc52844a88e9c2ca97355ae97a66bc9a8dfd390b310e61e1aaa7f813709c141efd8b475d2a73254972cae81a0bcd1ed59138ecc997da9f6ea6419db83204248ffdc61f14ce37d7d43ed690e72af5c861d7bec06fa4b48478cb6368bc2d3d0fcfa789f99a3037ce2f05eaa53ccc13ecd56564ce0e3e92d6f7ceb54231d6ead9c321d44ef19395707dcc98eb7aff76041cacf5c09557566747839aaa2b4e4976fb5b1b8894a3bb4158f86980d866044861ba1e4818abf79879e36a648e8fde9bec57c335b9ab5f7fc9fc8ba803fa6b7a44552a648b139faf154089726c5b588fbcc5d173782b97d5cb684cd8cba31455538f89a51d9bf79ca6376f8383f0bd3b63a40245aa360804662f1b96f5e9dc6bfc6d7c156396f35ecd611e846be2b22a1e89eb38c382479e46b86809a9894b6cc16fe2df23d6dcd9564ae50ceef58ddb6b4fd7d3cf3dcd69e772f2734980696ed5343c63fa93364025edeeba66d763487c52ddad24e1f05729f63639b56a21096ab415d307800c326948f9da1dfda9356ae4409c6268e63fd983a568ddcf6abf20f7e0c02d9f9a3e10262351719e3f38af3265cc7ff41e8a74db55f49e5be62c123d0278b9a2ea78b334a1419f1ba705d1fd9a38965072d022a68bb9e65aca79ec5fcf8ca41fff450acc89bf78abf066a60cee63ea5a8b65cb1b7071d9662ec7e985739936f4e6cfb5ead16633aefec869abc6f1c3753757836ef47a8641b4aa2d88bbcbe8e81bdfe6c4c058b90b34e3caf514ccac63650c9ce4a04e49fd6e25b3c60b375cf176fcee6605cd7ea1a8f350b9b4cd71444194187899eb1c445b8d4508d7ddab3c02fa7de6ca6c9e58eafdb40e29df6f60c2862ed516c3e943894f898cb1aa813b161da327174f17aec2901fa875fc2c55e4cead90ff3e7188d017753c3e32dbfd9b3f40fe580c64e887770e67d670248e6b445c7f7807eb0e23cd00b2c1f26e082540667323fcd2aefc07926b895c012f48084c0b2d5a5923940373079dc0863ffdab52dcc7a4bdfaca62915abc61cb790a11429e715a1cf6d24fb735ba74f03a2a0ff52ed1649caaf8bf12fac9781c52e7f7495eb3a1db5fbca2ff85d8d8c42cd2c3d6f0630788663eaf19cf66910a4b13a7f4f0f0ee82b0b555168f548670281928175d0c7416efea79ad576abd224eb03042b34a90326003353fc522bf149e2e1b69f6ca4cddd9a33b4c2685281b45ae0f730bf3506a4238c5578294cab5c81fb49083e3c7a7ea53be59a314c1d95d619257e3faedc058cadc126add2e5474bf1d1a7e1d94e230a5be89691151e6c59df4fb604b13e9025eff268470bb02e7f63e07019fc547ec01b5cb64e2dd137e33fb3a0abc0fe7647dd023344ce8054c686dcf98c9da4f3ad94bc411f87d21fdec68d5070816e5dbbf9b0855100733dd794fe71828831fa090432ba78049c84caf24010cb55ce0e3f7ac5ecebbf09fa9ae98ad2314bf54e6ddc9371ce16312aa846a7f822305ffa5f82c0aa89214d9854667abb5965b45e577d9ce5b4ad4dbf966ebf81f26704001e9ffbc89088a4e4beac26d477642e3a5d839947b49ffb68ea2dd7b28e107dce01d57ffcc4b06cfa54ef6d55d030d0dd61166e6c5a25f4cd102bb583da91aa2221f0d477d1adfb07a4da0a8b1d21deb4d1101962f40f467c8f5f96df4c7441cb1cdd80c49319132945c70c48f3ae1b13002e905fe7b8c8b9b0d9140aca0a3e52c1ead354e5b87df07309fb49247e5f0b0073e5c3289a89adc2f45d93a04ab269993c44b18fe856aa62b3492ae003bd0a966841117844140937763a03f1c95710d5742e0973662cd42df2597c34020d86a975d314bbd18de263804eb5bfb3ae910140942d34c58a26f395bcd39d26a29f408a53529f36ac7e9baf3de0179674e15f6ef589cf4842d0085fe897750162a6f4edce347e4f8461e1b4f0bc9818a1e49a8450813e50763c478d85bd000fbd1e5cd36022cf66f1e24414e790375fa74df14f73cba3c8ebd127c4d6cfe49967e5d040447e0d5e06bef0eb060d95d82280a7be918ad3a57c607ebb6d3ef2b217e8cebc3dbbea96826e64aba603a810fbd3c616884c71f9fa8dda34eb1da5455dbbecc94f25c3049b375c22dfba554a6be574c3ebeab08a9b3f45d1a66b88a8ecd6a55d33c690c18287e530d9ee7261eb34f1ef4c3867637d4b932980339224c3f13ce6d53465909183c9f86609009b47be719abdaea508d4ed8c03e5e6c6aef0abb0ac3b3f0395be30ac23360af1c970cab8312a4fad4f14aabd83abe5e6454e4c98bbf4ff9484e5e4abcac6fd4308077a2b6d06760e591d860cad5a1c79cbbcf554bdbe63ec5504077d4c94cfac2311e42fef4424b7ca25f93fa90a047b32d5e4519e3884d057af7c6f257c25180d4a9034616f634e9d333f4c54832393e1f8c8f804ff199732d22b95a59801fdb5b68bed5d4fbc68e2b62c88bfabaf64bcbf69266d0ea09ae7acc333eabf68c93d324c7c235623e76f46035f28716793e044080e9602923e8029256dad399eecce4a56698837465ab6de3e39e6920df8635b399eb91a61f6f8c0943f901cbd3eaa85cbf3fa576f2adbbda615d6d125aa5214e7fa80b9116a8d0b34af8032caae5fdd62230d0e0adf152ba63e5eb8ccc57706fab1e1f2c74401eb6500129295b010a873a0dc5530abe67c4879eab22441e4236b7c739bd86a64cfba8d4e5eed265759adb9828bc4ce31077f3e8f9d9e33b6af5f22af2a8a67b3cf2f04104f582f154eb66e1e1892b0c0eeba66af7865f5b3900494e26e9c11623ef56cf968d5b889d660ea2b440e82d539f7477d4ff93d9a1359ae4bd7d07c59c56dd6ca892ad3fddddf23200dd35b110af435c292598a6c8907b6e54381e8ebdfedf1e292ef2630a2d939071c1c9531ce533ff770798d050255ecbfdf452140f779be8d11a1ef9cbd9db54cddda1c043052f8ab44859bad51fa90a6d3b0f3a6162d5669a50b9077a3484de5a572a8f1dd3de03d86722d5e5d6c32d0b50244d275ba9c6351029d97da6112143781619b84d1840eb6c9baeed8ff70a713c0583998206c72ac144b9a928fafeecc872e92ca714a10b869031f3a128ae45928bbab18f822d3d0f151916a9ea59a95cd06d5455b66f6553e0233b28c2d6c01da221f1f2cc47d77e3466f7d8585c70f0820d524ad945442e6250494317065847abb717b5f5d0e92caeddaaed21ad37b6b542b84804cb904bdd4f4fbe133ffff4625e7e505b5d7af7075f9e14923d1a4656424c36ca26117a9ceabfa9df1098683f38e74550f390b5bd69f18b0d77c41ee2a295468cf15ae88eb3a82e51809a2e1e685d556db7af527107cacb97206f67e1ba6a50ebf36ddc5c856d95f861809fd57863642a6a09a347726768cb4d1c772ae2fbf7d5c41911203c044d07b188ba93743b12af4c849cf98e1f68c6c0eaa40a35f24260210f77a65f5843c82c42ad6e8da7dc73bad936bc2e3aa26abc78c5db935422a9e6e0f070fbd7b0732e029a09fc3e318fdfa626b91a215a31f0ec25d89b8de5b4e236369fb758ea9eff2ff8982c49086b0cee73bf5b459060a099ad78212fb8c9a27ffb98343b1b19d187802bedf9abceab509546c1c63e32e348cf6d8f484cb477ec702b2022fb20826d00a7965146417e4574f50c400a7effb138a26cd645fc75498e195a37e5b9c5c75c2385655706330cdf443a2cab38f8077dc2ab307b51150290b1d25a5c79da780b52a4c1ededd50d56c4921829b7718fa3f2fa0d3019e80a604e8d801ad94d73093b6e8009c6a2d2ce68d916d8ca079bb513778650e6443e3a292e65a933bb7b353d6686dbba2c1dc373385c40f8ded322f38a7adbfc9a36492cfffb2731bc9ee37fc76d669214e811b61d27ee6c78ce03b8f8ec7616460876288bf92a067ce48317cb960ab2e9a01430266aaaa125945091f86f3f14f441b0a72ecb9f07a32e51b8553e017b723ebd04ba1df19a75eea49cae5b321fc0a6e7f053152fea6fae7a41307f1c0453642bf9507920dbd92899a9f21a33a878e7fc08ea97f274045be8b58dd3da6c4e81257d4d4bc3c91206567f90855587ef9d8cbdc17fe7cb460dd66e7477ddebc0288743d4ccee443ca559aa4c10cb0bba4092c196f1458f7e8c115b88e922c620e2562bd23bfa9eadf397dbc5590a42f7c602870cab2bdfce818cb06ba69890f1638af1b34fff863c9ca5d7fcdf68e11b00e807e9b63237467f9f842f15e9f4d36063487e774f01b256d43dc310ebd2ab83d0952ae4cdde12197dba9d8cfc19afc4efee9678e5204d277faa1ac37b4134dfa5a5909e188a05f03b744f63bd487f30fbe6b83a7dd716459c4e0161cc92b10097d29782f89556a70b5db3862643d128e07cc937a4423492a63df883b9475b5470e7f800178ef90bbea83ad960484ddd86d135853ea4081ec3745bf4c28a4ab24bb99eb1e87724c63b4b3170a89b4d6c3348e3373010eb72192f6ada046a2b035dbc959e196d4b444a3603ea0b7a1b6a6d953f28d0d7efeae8be7fbfcef76ef0e98cad2aa2aef8b8ddada128bd710ca1c463a77c1047bc9850a9bbfe767a921ef4ef01488fbeb32506f127fb0a8ce78eda4c962725c3d8f4797f9b558dca616d1a4946cf20f6178943c884862f238c3eb774812a15ca759f0eaf2cecc4a897e47401d2ba81f4506cfb1006b22dcfc0e4067849d2b91900b0f537aa336ba5a0ee2485f89c6f21ed482f2dd6b1e9524ca908460f544f39e6aa447f4692e327f03530a7e24609afc02bbc22f1e92e82267d5cd78ede8d9bfdb4551da63998dda67ee4100f60bf0c0f57b2d2ab60df90d8f1ca8cfb472ee183c66f6c5eb8af3cdf6033918b3dcabb31a40c6ed6c51820f3d38231a4946e4f579ae1f630a82defcb59bd073adaee7ce6c023bd44ee1cabeb1fa82695b24782a0f1edd71ba936721ccb18309a47787dab7d5a0f6c380e5a43f3582f1abe942d9f040bd4712f9a217417d1e51e3417110bb6c45f9d029d2243a2d25209c40e4fe05105a136e01155bad0dcdf946c1697c03d2f5a44835c68a98b1227662811b5257e8e6ef49a790dd2870170db137f3d834b5f0031c042125be1ad7c95b2361001a576911add1ee6826ad7a8aaac59c6b69e4ce4f6cde889aa27a83010b343d438b6fd14a2adba3f86510ba159a6112c699209bb0ad63f8', + hexadecimal: '0xc77319bfce98759c21cec7e6585d7652021558ad26629eeb64d10bd0b15c1ce9deaf45b5da7309fdb2b621769cbfb84b68330eab6b8a5ca6f3dd3cbed8d7e6c63c4ab2a664d5c9fd056bfe3f725c716d67872edf6aeea3a2522c68309e852aa9f694f553d8581abc3f7fab0f58be6a2adfa1cdba0e81b090dd5549e192275871819b0ace21b32ae8f7763b8f65bbeb9bece4f8ae724cee343099c99a4808973882ab98310ad005fe8940a96fab1a436430f766fcbdad003174b0b94962ba2832cfc129a3e2a6d2f75f2a0fc3091cbe3a55db676357a049a2b2ee0c1e6ff9915ff057fceb37191782653453365828348322f72d62f0a5f0f633f26be4d298dcc07d2815eca72c2e9b0313059fc170a787770055b3470cf7284efb2e3a401c46941b4da4cd4f58477de18b1fa97c67415cbe1b12ea4e64374cefd8123516e8d8ac3da6561364a7bc7c7e9bb6cb50248a4e6b108d955c1761b9cae97e07810415fc1f8d149d594679eda5b427c85ee2b274de128271dc88bb51cbc8a77573f553903980b1e26f5502caee3d52f5464e7dde4d85285844ac7a162d8350e88933db0dc6a278b4a351848e704cbe619b5e7cf4c69cb1d9b9fb9b27042d695fff79b1e3569a31030b963221a296d2c2b89cce70881be24515099508f677e047c062e14562169f632f1ce0a0bcf1998767227b6cd6539e341f44d395183b2de3ecf1dc06191386b3d6b737a6869aa7376c9caf818c8c27d44555a72149fa21c3a5b68de64f648beb0bd8712e84d21d1cd2f8b9103db0e55f59820aee20e65591264d92ba762690720d2ab8fdadf62d5afbfef4e9863e66092710a0f65b3c51dbd3d850ec4a73edc185fa0263013192a77426dc3df58199ad76657db1ff6d23fd032bacab82e818b32e7847635afab67dd7877439f8e03cf7482ae8287f8412378a0506f5fb8a3c7eb344422e3a5d9766bc166235f21aca372542537c7b1eb6d671c9b8a7df0b310c76f9c3cc13a41e79e8ccc9f4e81275919b9ed19d66414595114d1ad5bbb33aed40a3b5841414776d49cedbd0f353ff7534470272d5bb9424aa26c6f5207d5fea525bbbffa6e06af28986eeae0e0552cea0331b26cf890afafcb39c51055e827bba428c7cb49d552fdda7fccbe16b720136f31a793f5706bd480ff8dcefc27b837e754c4791f8c64d93f96fb23ca75cb4c5893da4c8fb48ead34e2807f2b9180e713f72fce2d59f38f24943d4e8a84af3419d2ca21589e103941d56b3087b8ac01e194cd5f1df51ec92e4e2cadb3876f55eae49ecd62c37874d56c8dd7552fb3657b67ec6b9ab824a4bb24a9a7a6a19893d837575435c1dfe990507c6ba2c751e5ac8ef30a3da74442c32878efadf7075b2b16360c98999eff2a89f16d0fd86133c08ff6001082095ef261e9bbcd492606b7c2367c852578eeee310747ff37e0d771b3e3a0965780afe56c8138cf2c451b6da466b5a1a77c3f3d2a39e18a86c589a7a187e99c4c82bb0676489df30a8701cce07bb64b74dade7a7e9c08cd81e5f537cb333a4dd13449a390e1b256f83615b1a1de468fe04a8d99c999dc84b038fc47a39230f13a8a91ef47ae73c95f7f54779ef915cd1fe74b5aad67dd13643f79f4e32d6604124708c15df0d192668ef7f1835a801a5c9469948f78e5121cc86f23568b2cab2031b34534bf2a9bf7841498aa9e5cb70e680cc513e4f67dd31bb004ac95bb0f1159de7d71e34e0583607aee2ac8b6fa23bcab46bacc2a7f8946a0a675df68554338d27ed37f42cb1dcc9bf315973acca5cba2748adffa5c3e7903243a1ffa479b5311a89bfe115c51d2fb848f71746a8867e7d80cab59cde8c3653f5551d3ca5a4a86c6b0031e3e3bbd29ca260b08071492d8e72c5317b47d392f0c0f980799d5e8b5faca7e5fbe7103e93649f4348ab4a9d8b7c6e85419c6e0937f55eb4535696cd06fc05649b4abfdd38f1ce4995f7da912ede1d2ffccec707249acdc58e89a9528a539ce9187636d4e9ac778d5d56d9903623fed326f9e6d9ae9d354853fa3db166309f0e3d6124ab539849327860264059b3fecc2594db8e5ea24107c12dcb06cf8c80a203a05323989d90b149268348ca201c81be1547ff39375cb52592103cbd8a387303154c50353a391f851fe90b43098dc237ae13fdff233b50ff1c779432dc78e7fc7e72140be45cab3d609890e2dc73362c1fe1261ea5eb091cc356d477344e5f5acc4f0c8365f2d565376c95105afdb517d33107f3bb31ba7358569908a68a61cdcd8400a02526352a35c36a94214e8f7ba9c1c3ddf3a63ce36df0c24e86bd9d14c0aef0c360863746d5fe83bef929d078981eb45d722f9751eeb28cd8e5ef10a1739495ff9a00c5b850d80c1031c50fd489fd369cd8ccdf92f4e1e9e602c0741cba362fa4f0404b337ad93edafc8b0f048295a7eaa9f0daadff60b8625a6353845b9e03bf18c833d1596572d70b0bf6d55ebf5f4ad31e1915cb18e148ae67c202f43095a2304a6081447228d77c509078997bb9bf4a852f4d6bd6e2040be3e038ed22f1b30e879dd6bcbc30eaa22fc1327747ec86000c305bd1de7eec37b88bf965d6480e54ca9e00d3b3380dda9f782c8b4ef3dba136b00378fd15c430f722d84ceee3c8d484cac72a5e58a3db34e17f32443df27363f6f439bccc1ca4da5e2b9eceec456f2b5b9a3c7bcbbbc9aa9a1bd07ef743bf688222a85112e43fbc9dd998c546df6a88942c5d412306f9c18572b1409dcec91511fd48e4426e0acfcf252ec0d78b03c75a094e30065bca2a811d8420dba4b5e33ae10339e7141056ce58c98a8ec6a7e24dd380ded3bfe4422a7c92dc63f680fa25d9b498ced9d520ed53e950d98b1eb7a2fd5e5f950d4c05e609e2eca893d929059149bca7c3735dd91b231bd52487ef1d0f0def01c0c408e6ab7e3dcdfe78be9b2b072d8a1272ff420a1ce78e68f4f6612019a893a87af10a46ea35c700e3c8bb99b44a081fb04d78deffeba0ddea544a38d54630137acfc9d0b048ad53864e33b0e635238387d5e28248e9682ec3069a7a250333549079559602d1632f8bef4f41fe23a2b6b1db287c8e852a7602cfe7d8bdfe177b3667c002fe54243142d8668117a413374a3838c55867c9a3b3ad77115c9245d59f3ea193b19552eb8f7b356a754c94faf9483958a7d26354fcf633f735b69a2907f3ed111cc0d41775a3df2d2534bfda56f12346f9bf62c3c1785b0f7e43df7046225ae3fcad7a550c734b87281761d73b2e9117ae49b600c3d6b783a737bbbe2d65c935930fdfb9f138a393a0adf6c7f920818df80aff9c70b656fe1cb0a23cadab210139866b7d4e25870735d35bd1191f8d61ba23e24a0832d3e55b88869d7da4d36597f788c31e6dde618860c2e24396bc6f0fd2c93de1c1ca85a2d495359be1a05c3749c9433bff09993befb031a9ac1bba80d520146c9f1ccd97a86e04b1837f15a9a9f5577ce9cade1cea5c134959d916b4df86f5f1f35dd61e848eb32f16a272974a6759e7c3ff43821edfc230a9151df613686127e85615d0840f81e05e463169982f82db9a5b1712edf96d0d0bbd0c050554d424672263ad70306fd84b476e29b9561796e2903fca31341cf139060618a1f19afbd1d89285327c2631e01a031487374b21a6ff554256c7fce4b3a6ea007374ef5a53539c4ed9a292d8d8932b81fcea164f4d97d2bcbf7c2ca039d02a11325c6ec352d3c0f6227e5a17cee567229aedb99b66ba146c432eceaabec2d65137892e85c67911afb507686ea7f53f4955b97e7dd73f225f14c97bbec0bb1cac37762fec70e73857cc8b93d6d2d4c37dda07daf503ce2ead6c22f81296ad5e0f515bad67560ca36ac47bf89db40343cbaeb354f41c11850fed0672bd01928be8a3dcea733b84fb9693a651e60114397e749fe491d419ec54a5ce778367bc5c1358300e44db785578bcee24edc4617e1f407a4f9ef7f4c4183c40ba9c15b6b8ae64cb76efb1577da26b0c7d9ea7a8adc021eb9fb7b247a476b5c6c6f5a563ddc1cfd07c35e6a7a5c9c443b969f56fa254fcb5e34ab8288878587c2cb9cf219442c10b366143e02a4a5d2275e49e783c77fd6dfa26ec49f391883bded8a3d818a998213b632a1a049caf12391d29b8f9b394fab55db5deda3e40cbdc7461cd7719975428b045520c14c8665346bb5bb9b1eb7a73f517ee6b60c90907b5e8d20402da24dec5ba9e05868135da636d1cc1d7b011ecdbc03a0dfc8b3365f2ce44f00071ce5a7bca9ef5fdf880bf0ef33d8e2303667198b4559afba3c5f453ea303b42108eb2635ca1622783d65d047ab260a2613dba4eefabba400ab7b1079b2bb9a37c2a6e34f426124a5c08da37c19ffe3c7914c4b4fd5d1f5d96e211b890f28313ffc3b6857b7da03ceeae8d74bd4e1fe58eff15668a0ad6915bbc1be34113afb6d851e86a8aa2ae47c3d7bf411ddb9a2ac52ee4877e545eb4799684df43fe58adebf4376703970796d5ec63b8dca6f9aac90b5e65d14d2f011f6d4742435e47336a88b26547430dcf08c88b559f12a40b59e3920128cdd5c1e5f023aa21d4db46f3d34f9e5e2eaff8a86804786cd9c506a95303f2273499e5cae52657a2305da4debb63d347fca5e5ba78775efdc2cf655ccb71e0474e827648943fb9db963513e1988e72efcfe74c328f4b01459403473904b614967007e0c1ea3551d3729c5005d3f9a53545f20888e7b54613107fd1d476bd02f826bb46fe49f72a914139f3d76a9abb62fda91bce0a9194b78350ca1fec3d734524441d94c10dbffdeb1aebe387929700d76ca046b0c23b5e9d2e598d06cce1dfd97aae615a17ebee677b250220ff79e085d4aa30e02180f4f7f53cd62a21724da29cf0d33415fee7bc73fe2c460f5f0dbafd084e2829ef14f9d994a622686d14757c676be319a0688a2081e450fe786f3733b74c937bf0c431fa778bcde082662c821b1804ced01cfbe64a07eb0f7aa40decd62b2ce0e36e35b2b46ba0072c52c66c079fd74e1a070c092573f6ff694a572945afa5363c25c874e99a6b175f307cdf9d680db9ca020fb42f257c2b845fad4555cacc139231474a8ee970bf1df3627ffa141841785dd9af69b26ab971a3bebe5132bde403502e8c515a116b42e0a773f932ecdc9bd69b81f8295db9067864286be218a3740dd6a992249b818ba00f53e5ba7f6c8e8f1a2b07845513f979e66c5db0e6b40f3618028270bdacdd6e81f30304697466205796794d713a5a595a9d669cf3a110d60c3777c8c562485fe5c296d36287924e86dfce39229dabf63df326b8c0991c356ba8ef9601b3e113aa543d2e90a1ed3ec60eddd634c75a7d917003006cfa6eafee37a4ebbb30c91e2056bc0d7d9b78e2721c20d0374717b5a1017e0b249c2a9c9988496bba99c42930b2c06be2aa30ca6d327770c756168acbe2d8ed41a4ad8f26e3fed04836e3414b206870384d11cbcfbefdfd80625d89e660bab7c417fa80e553ee66593821afd249e1db222661224d4fd6034a89362536dc26cb49c2d424fd89f6a849f6219b1f9c6b6d8493fcffa18fc9aaf3c4144498adb0888bfe46142767138b264a31c94264fdb10beef3ef68930cd1945a2256a66e0e287599951c6a4c6b0c2cd61216afc37df76127f83690878b86d0a11a6874dc17d95d0770ecace5f3a55d0b2a2aedea4f3f6e26260ed4c147d2c3c6412e48142c717f371e0f9fa87e18fa2345908b043f5fc2346344f5a994c6caa7065f250bc3f48eb1d6e8df5819904fe656379eebcc5f0b362d143c7388b82384afc914eadc0ff1b2b572ae00aaf90c0b7779706a16c246ee8086a666bad7c914d8f8d7bd89cd61e937ae1cc337c71dc69aa9e951a513d45b8d3d1a1006e81b1db318c8f0f89ea56c3daa719516d1f0ba9466c9d44ae8d2fd441b8121e85f9790c2f1b6e2ab3fff389a93a7a89cc1af88fc8c2b0a8cf7831630d9fc3f260ea69ef397d5b40e16aa1c8f12443ccbdf99d31693dbda2d6f9a9e70fd1fa7b391a839126e26e601a868d425dd735b7ec4a28fabf738c85c9a9563352cd50ffe72af3f365b8b29dce25043eb35a6bb28dc87959ca7cfce6e7591540929bc2b263fa49e30031980126d980706e6a47c6477309078d71b359fc73efce7e3b2d598539d0c96363a4fc072fbe288c9667475447834e89c779bb4991ed0b70ac7348fa3d99e1583ad0b42be16268c7efa4c1ecaa2673bc1a8fbd0590c22e9834572c6fad9c11b03c09a3cc602c4ba1e05c58fd63c78c4a0b681cff0d91093b37893644ba062abdf251b28b59d8533cb2a1a4b715cc100370af2a3fac3294cf64d7a32cf7ba96e34ac5a5b87a643283f645ea2424296f51e9f285c0f909b1f2bdd500ef29ee55e2b9eda76e33efddaf06ab057f4069514531cbc0012c546f643188bd4bb0ef7d2b18ccf3f6ed0584b81f697c59a504e3209c125a4ebdd49021b31f8a01731bcf4f898b5dbff1d645a96484f5dcafa73a2069c4bca092e2f568e96e719e5d943e91fac48079e6f56a0653ddc3f1606ec3aa4f822f50368fcafc554d41741cd209d9db13f03da5192ff41a9726354a62cc14189f8494944bca69989849eddf89c1b76211e06937d86ac6c6247ce741e5122628891f069b367158891da8a3744015f5795521a1f43d7cdbe3dc62b2a29616f176d8ec01cbc589a3e7bfaeed128409b37412b8721d7e9c590a9f6d5578550d92e3587933cc40e416c78a16e0e44ce00a3195653721f8e520215ed52c7bfdd396cdc9051b65e497f20eb2b7d7a6af21d43598d3f14175a9be0db10d941ade57ffe640fef7efc70998eac51d9281da6634792dbe003dc0478d6746b6c9a89021724a988eabf31dda19b9e3de8641f97da1e18dde433b622d39b9957294160f6b1486e4042a2c65ae2df6062ff176b353678eded5518e55c046bf54ca3fccc0b9563d07cef8b2ce057c8180ded480d4150d24b9bb65ca350c6c0a41c5793b26c4c3d25653e89772e70c42689f78e9c0c5753be6d58cb63486383aa50eb231afe8f4b8212b70303b476943045838d6eb461f0dc379a20af3fc5f11441f120bfc072d76b6004afe877250ca9316684e4b60da8f4e4fb0a15fe73fb604b4bdc1866beab0cfc37aaea8c2593529886e67c13e0f66e8c01de42edaf488730b49451f72a7fc446e15c454797eea1621757fb9387a35d936dc7cbbdd9320460c46e95a91e2665c0bcfebf5f90a6d195a18b5199e2747c7aa1e438c3babc3243bf529773d47d6453431e031f7d617ebd25dd138e7c0a02177803db2e476699b8bacfa5aa43c368a4248fcbb9d30c82ffd6fa80d7d54e5f29a1a7c437c04bd47e6774a921a0b983ebb4f8ce45ba2fb53a2c57fa412dfa78ab8bb8ba032c671b44b41a03738786b1c8b0a8d459bacb0f235a2cdc8bb9c61151a5cfebf0aa0d1fca1eebb7bb3c9ffb6a5b173cef67f7ac3b1e7a3f2e157eaa5dced1880f1262463ace611f47c2f45d291c8c099ec0288d13ff2a9e4822f3facd26f3a6d420bfa6b205a2ea1c3bcd530d59c6edee349363c105f0c1cd1030da9b392a3dd499ca12751030233fc320b191d7764e601e83aae81cbbca89b5cbe30ef0774b9c77805f1e9e96c00c1d1a4730b580f14eacebb4a562ad2e5c62e2dea126c7eb993975bcfb01f5b8d60aab221962ece970c34d32addb54c8882b1b6bb59632a31d1a943859ffe7a73b02fe08a095cc98bace2795a791e327fd5d4f2a764946ed288c34eaf181e7ac9fc15c4e4e42372cafa6a0788dab87c6364d27979adcddc4cecbb15265553a2df54c5e2562b0efdaaabffd43147bc54019f59687ea8d08d6b4b958d8cbe941c0c71257b75cd0ff769e18dc5634f5c531b7b5f19ceaacc2f715e0bc523a59ccdc594f124f0880ed487bb02d50fe5f313a3cf1caf6a5a507cc352bfc864568194b76ac948afc4804878ff6cd121f921ccfe64d0239e21c3c4de9eabef7ded5578adc929d2aa2be8f7fe2c4e15236cc7bb51ea03e4640a3febf2b4ee667230b42f42da1aab0f1fbe7ecc50bdc2d26e3836354b345c6f37253862fd1df1c4989e49801b5805a3b2ce9e3be2ffdcf901feaa6054971e92ddc3269b78c139d9982e5215ce405339a490a8da9209d8e34c6b9660bda11e691751f4b1119de7d3971e41e9865efecc9bab65bffb4e720b82a8136884e6edc9d12f350ae06b174a5f9650ca1d9c8cca42d4b0aeb53a929570f0797c28d535e062e18e865c52127a98b74d01c36eebc7ff2367f3b8b57bb7b2f2af82ec1582d87f137e6d0b6454016cdd78e8bb112932136adfd2fc2d1d300982db604f764f343fd0d902f9baebed0d2f85db6e6ed4bd6620640b2d7eee9f659bde52eeec638c368d83938925db52ea8d01f1647002876a5b5c6dc0ddac2e481540e44259161f57078e16e05610dd09a2eb255358fa33bfc6d779a7c100c48062d915daef7bb5980f04e64735f66eb3bd22bca672d6a8e8d8061d60ba767a70e24f6068f5003439203f2a096455c8ccfaadaa5b2978186e18c6e73a32368e94aafdacb1a5f910857f222f8a90fe387d3b19076b320890f66d5e49b31b708662b7f0d47c5ecf03b2609cb5e94e4c2ec082c1353105c909771ccf85a872631613ca41053b6fa4e96c6dc9f5f3666ffe76c18d3b96abbfdeac7262027b9a20b808d01e0b4702f49779f66090da26f37308792872f5c838ab1433d8ebe8c93b7459e520ae382bd0322aa392bf0eb0b47b3e86073cf1e612a6ed6861f47f22d1cadcd4249d5f7a5fce2a6b2c0e4e9047ba2be7761353ba8524b2f35fb0f86698c8f9bae847bb33211efab2a0cc858397ed5c70d997fd757705c79a723f288aa66dee136cacf115608ebb54fdf8be7a7bfe1f04f3300b1e5cbdabbbe808c26cc550803d0b323dfacf3ba387d26693d1ba9b54b88588233229b1796a0e1c1a9c83ff6ad5f167b20b73c86478d2f60d9a2239b14b058effa21fd38abb84153f42fabc5f0ed5d885a01ca962e42456eb1ec5f7a65a8472d38d7248df8a5f6752831e8252a187bd222957ab8bda98b1b86f65b88f3d1a7bf8c72a6cfd3fe8a74b0f212536f816bb74c885217263a57d82d9cc0fd0170a61abe91d4be09c978c2aec3ba89aa42c6fa912bd09dc5ec65714bbc1bb285b7ee71dfd33036176ef952c3927c1c8eb630b1b010479b03bf5cae2aa5c23fe2ba131ce0c87ef619127c4cd292a27ab855a53f6df5ef049957ddc52844a88e9c2ca97355ae97a66bc9a8dfd390b310e61e1aaa7f813709c141efd8b475d2a73254972cae81a0bcd1ed59138ecc997da9f6ea6419db83204248ffdc61f14ce37d7d43ed690e72af5c861d7bec06fa4b48478cb6368bc2d3d0fcfa789f99a3037ce2f05eaa53ccc13ecd56564ce0e3e92d6f7ceb54231d6ead9c321d44ef19395707dcc98eb7aff76041cacf5c09557566747839aaa2b4e4976fb5b1b8894a3bb4158f86980d866044861ba1e4818abf79879e36a648e8fde9bec57c335b9ab5f7fc9fc8ba803fa6b7a44552a648b139faf154089726c5b588fbcc5d173782b97d5cb684cd8cba31455538f89a51d9bf79ca6376f8383f0bd3b63a40245aa360804662f1b96f5e9dc6bfc6d7c156396f35ecd611e846be2b22a1e89eb38c382479e46b86809a9894b6cc16fe2df23d6dcd9564ae50ceef58ddb6b4fd7d3cf3dcd69e772f2734980696ed5343c63fa93364025edeeba66d763487c52ddad24e1f05729f63639b56a21096ab415d307800c326948f9da1dfda9356ae4409c6268e63fd983a568ddcf6abf20f7e0c02d9f9a3e10262351719e3f38af3265cc7ff41e8a74db55f49e5be62c123d0278b9a2ea78b334a1419f1ba705d1fd9a38965072d022a68bb9e65aca79ec5fcf8ca41fff450acc89bf78abf066a60cee63ea5a8b65cb1b7071d9662ec7e985739936f4e6cfb5ead16633aefec869abc6f1c3753757836ef47a8641b4aa2d88bbcbe8e81bdfe6c4c058b90b34e3caf514ccac63650c9ce4a04e49fd6e25b3c60b375cf176fcee6605cd7ea1a8f350b9b4cd71444194187899eb1c445b8d4508d7ddab3c02fa7de6ca6c9e58eafdb40e29df6f60c2862ed516c3e943894f898cb1aa813b161da327174f17aec2901fa875fc2c55e4cead90ff3e7188d017753c3e32dbfd9b3f40fe580c64e887770e67d670248e6b445c7f7807eb0e23cd00b2c1f26e082540667323fcd2aefc07926b895c012f48084c0b2d5a5923940373079dc0863ffdab52dcc7a4bdfaca62915abc61cb790a11429e715a1cf6d24fb735ba74f03a2a0ff52ed1649caaf8bf12fac9781c52e7f7495eb3a1db5fbca2ff85d8d8c42cd2c3d6f0630788663eaf19cf66910a4b13a7f4f0f0ee82b0b555168f548670281928175d0c7416efea79ad576abd224eb03042b34a90326003353fc522bf149e2e1b69f6ca4cddd9a33b4c2685281b45ae0f730bf3506a4238c5578294cab5c81fb49083e3c7a7ea53be59a314c1d95d619257e3faedc058cadc126add2e5474bf1d1a7e1d94e230a5be89691151e6c59df4fb604b13e9025eff268470bb02e7f63e07019fc547ec01b5cb64e2dd137e33fb3a0abc0fe7647dd023344ce8054c686dcf98c9da4f3ad94bc411f87d21fdec68d5070816e5dbbf9b0855100733dd794fe71828831fa090432ba78049c84caf24010cb55ce0e3f7ac5ecebbf09fa9ae98ad2314bf54e6ddc9371ce16312aa846a7f822305ffa5f82c0aa89214d9854667abb5965b45e577d9ce5b4ad4dbf966ebf81f26704001e9ffbc89088a4e4beac26d477642e3a5d839947b49ffb68ea2dd7b28e107dce01d57ffcc4b06cfa54ef6d55d030d0dd61166e6c5a25f4cd102bb583da91aa2221f0d477d1adfb07a4da0a8b1d21deb4d1101962f40f467c8f5f96df4c7441cb1cdd80c49319132945c70c48f3ae1b13002e905fe7b8c8b9b0d9140aca0a3e52c1ead354e5b87df07309fb49247e5f0b0073e5c3289a89adc2f45d93a04ab269993c44b18fe856aa62b3492ae003bd0a966841117844140937763a03f1c95710d5742e0973662cd42df2597c34020d86a975d314bbd18de263804eb5bfb3ae910140942d34c58a26f395bcd39d26a29f408a53529f36ac7e9baf3de0179674e15f6ef589cf4842d0085fe897750162a6f4edce347e4f8461e1b4f0bc9818a1e49a8450813e50763c478d85bd000fbd1e5cd36022cf66f1e24414e790375fa74df14f73cba3c8ebd127c4d6cfe49967e5d040447e0d5e06bef0eb060d95d82280a7be918ad3a57c607ebb6d3ef2b217e8cebc3dbbea96826e64aba603a810fbd3c616884c71f9fa8dda34eb1da5455dbbecc94f25c3049b375c22dfba554a6be574c3ebeab08a9b3f45d1a66b88a8ecd6a55d33c690c18287e530d9ee7261eb34f1ef4c3867637d4b932980339224c3f13ce6d53465909183c9f86609009b47be719abdaea508d4ed8c03e5e6c6aef0abb0ac3b3f0395be30ac23360af1c970cab8312a4fad4f14aabd83abe5e6454e4c98bbf4ff9484e5e4abcac6fd4308077a2b6d06760e591d860cad5a1c79cbbcf554bdbe63ec5504077d4c94cfac2311e42fef4424b7ca25f93fa90a047b32d5e4519e3884d057af7c6f257c25180d4a9034616f634e9d333f4c54832393e1f8c8f804ff199732d22b95a59801fdb5b68bed5d4fbc68e2b62c88bfabaf64bcbf69266d0ea09ae7acc333eabf68c93d324c7c235623e76f46035f28716793e044080e9602923e8029256dad399eecce4a56698837465ab6de3e39e6920df8635b399eb91a61f6f8c0943f901cbd3eaa85cbf3fa576f2adbbda615d6d125aa5214e7fa80b9116a8d0b34af8032caae5fdd62230d0e0adf152ba63e5eb8ccc57706fab1e1f2c74401eb6500129295b010a873a0dc5530abe67c4879eab22441e4236b7c739bd86a64cfba8d4e5eed265759adb9828bc4ce31077f3e8f9d9e33b6af5f22af2a8a67b3cf2f04104f582f154eb66e1e1892b0c0eeba66af7865f5b3900494e26e9c11623ef56cf968d5b889d660ea2b440e82d539f7477d4ff93d9a1359ae4bd7d07c59c56dd6ca892ad3fddddf23200dd35b110af435c292598a6c8907b6e54381e8ebdfedf1e292ef2630a2d939071c1c9531ce533ff770798d050255ecbfdf452140f779be8d11a1ef9cbd9db54cddda1c043052f8ab44859bad51fa90a6d3b0f3a6162d5669a50b9077a3484de5a572a8f1dd3de03d86722d5e5d6c32d0b50244d275ba9c6351029d97da6112143781619b84d1840eb6c9baeed8ff70a713c0583998206c72ac144b9a928fafeecc872e92ca714a10b869031f3a128ae45928bbab18f822d3d0f151916a9ea59a95cd06d5455b66f6553e0233b28c2d6c01da221f1f2cc47d77e3466f7d8585c70f0820d524ad945442e6250494317065847abb717b5f5d0e92caeddaaed21ad37b6b542b84804cb904bdd4f4fbe133ffff4625e7e505b5d7af7075f9e14923d1a4656424c36ca26117a9ceabfa9df1098683f38e74550f390b5bd69f18b0d77c41ee2a295468cf15ae88eb3a82e51809a2e1e685d556db7af527107cacb97206f67e1ba6a50ebf36ddc5c856d95f861809fd57863642a6a09a347726768cb4d1c772ae2fbf7d5c41911203c044d07b188ba93743b12af4c849cf98e1f68c6c0eaa40a35f24260210f77a65f5843c82c42ad6e8da7dc73bad936bc2e3aa26abc78c5db935422a9e6e0f070fbd7b0732e029a09fc3e318fdfa626b91a215a31f0ec25d89b8de5b4e236369fb758ea9eff2ff8982c49086b0cee73bf5b459060a099ad78212fb8c9a27ffb98343b1b19d187802bedf9abceab509546c1c63e32e348cf6d8f484cb477ec702b2022fb20826d00a7965146417e4574f50c400a7effb138a26cd645fc75498e195a37e5b9c5c75c2385655706330cdf443a2cab38f8077dc2ab307b51150290b1d25a5c79da780b52a4c1ededd50d56c4921829b7718fa3f2fa0d3019e80a604e8d801ad94d73093b6e8009c6a2d2ce68d916d8ca079bb513778650e6443e3a292e65a933bb7b353d6686dbba2c1dc373385c40f8ded322f38a7adbfc9a36492cfffb2731bc9ee37fc76d669214e811b61d27ee6c78ce03b8f8ec7616460876288bf92a067ce48317cb960ab2e9a01430266aaaa125945091f86f3f14f441b0a72ecb9f07a32e51b8553e017b723ebd04ba1df19a75eea49cae5b321fc0a6e7f053152fea6fae7a41307f1c0453642bf9507920dbd92899a9f21a33a878e7fc08ea97f274045be8b58dd3da6c4e81257d4d4bc3c91206567f90855587ef9d8cbdc17fe7cb460dd66e7477ddebc0288743d4ccee443ca559aa4c10cb0bba4092c196f1458f7e8c115b88e922c620e2562bd23bfa9eadf397dbc5590a42f7c602870cab2bdfce818cb06ba69890f1638af1b34fff863c9ca5d7fcdf68e11b00e807e9b63237467f9f842f15e9f4d36063487e774f01b256d43dc310ebd2ab83d0952ae4cdde12197dba9d8cfc19afc4efee9678e5204d277faa1ac37b4134dfa5a5909e188a05f03b744f63bd487f30fbe6b83a7dd716459c4e0161cc92b10097d29782f89556a70b5db3862643d128e07cc937a4423492a63df883b9475b5470e7f800178ef90bbea83ad960484ddd86d135853ea4081ec3745bf4c28a4ab24bb99eb1e87724c63b4b3170a89b4d6c3348e3373010eb72192f6ada046a2b035dbc959e196d4b444a3603ea0b7a1b6a6d953f28d0d7efeae8be7fbfcef76ef0e98cad2aa2aef8b8ddada128bd710ca1c463a77c1047bc9850a9bbfe767a921ef4ef01488fbeb32506f127fb0a8ce78eda4c962725c3d8f4797f9b558dca616d1a4946cf20f6178943c884862f238c3eb774812a15ca759f0eaf2cecc4a897e47401d2ba81f4506cfb1006b22dcfc0e4067849d2b91900b0f537aa336ba5a0ee2485f89c6f21ed482f2dd6b1e9524ca908460f544f39e6aa447f4692e327f03530a7e24609afc02bbc22f1e92e82267d5cd78ede8d9bfdb4551da63998dda67ee4100f60bf0c0f57b2d2ab60df90d8f1ca8cfb472ee183c66f6c5eb8af3cdf6033918b3dcabb31a40c6ed6c51820f3d38231a4946e4f579ae1f630a82defcb59bd073adaee7ce6c023bd44ee1cabeb1fa82695b24782a0f1edd71ba936721ccb18309a47787dab7d5a0f6c380e5a43f3582f1abe942d9f040bd4712f9a217417d1e51e3417110bb6c45f9d029d2243a2d25209c40e4fe05105a136e01155bad0dcdf946c1697c03d2f5a44835c68a98b1227662811b5257e8e6ef49a790dd2870170db137f3d834b5f0031c042125be1ad7c95b2361001a576911add1ee6826ad7a8aaac59c6b69e4ce4f6cde889aa27a83010b343d438b6fd14a2adba3f86510ba159a6112c699209bb0ad63f8', bigint: BigInt('1857111686977555205051772703330307656506832618422827238131050978750856699589964072089237303184346250647364778288292535067996890619661760866918946260866715478596967814760691101915421209606332320886049827280904661203778779538364337595677188155890060811120788328698020675486147217054189274813613035770466760733633277752402679610845185086483999042526715610902235742728839333176453578889728656526861694498669556370889632877391174158101540167473509471477851717391464061451707225509375057638999226148775147378647492442681467478562214510523190069375425435495489938176841600995231829498475037708173324602764915145074066886905117262496786937906063473252953267182146720431219040177725444647172095289455723105859469468641411456810072422604184967020347111244194966024513088870849338123719058396340982079891657653863071080399737449457045408846402718399327842189824849539349225366778809743868839625706560400211748429015460737161617880781239656774314310718081617333096555911432384521270893083752404837801111703368417250959600324851214671243912416932132969018690082093959679609862313905588091350839594613795007078675367071470775923901682654198702940775558975986155478400466575946126632158191436595749719255466182094086966320534494126022387047827396122259166344960709347888168868881764298531036484907873117135885384239085403422059288819854857711577107567365044452393376099116219152809844076325174437152795077220936149275705906522000895193688231666117584266157261675211169452715138198645314934204215027922017032001038999371139959710236120962712491044934614427020682961993402134005867944720894913269092488889295958078832479744518843010617457502092716475608471617828827737873805403425908901398492208221404036282862735445730706005243692169228597647218460669679109583972442541248532278250350765389804054274670318571217156374267988700409340035243421403116809961028157368870454760783030548386269223054738736595840008598315575340717289210442983356525114937869056563676108786234709744180216044421428348148314084804131784068955053898330065122157314142191191167219710994873052895141671964534947396269061465873311240124886386653758516186644637770943519312429823684690345457555467320036591120365066692068008638229961910730428745920675590020626699008163218567813194376397670783520838259600294034165843477670201486068926968217418091271414461032802811861769177281425533773776168074053552685772143561480421665813159418871361274466750096436706159761185194473891611763098941503790405759192681679360900277129660525179314162819845450409946283327058117522862011187645382678196826094958309197134576067598377426085444085123422231824060589720729451559135812933060946081818806053722590646287450400320741696997750922320406228656176274919180112829604308651530834442244143242934122370147295991412414936699094117328100605990283108810241934186127169120140146642059853945766969886819236944832150017761399714372696058368397959221290688112790758907183327009431725056154898212795191355555042194798213365893888277830641886471048129714011095680550250328843740726491939165682842945493579513040703705927405597118652869741996459339390032817042422432749547472805336350153801591417375361749811578373988449553016905362871805263788706852871620438231619091920580254090240006935917140361088924304210651970416856529138696296206102781187640719613587373372600157031908790780688555745851285090610089355483815830939253698737631032300215183275946660053658942803929233936492664366136334212598180029620710504687690234831987762007047433421809230089699244956751177945084685509605559691233624634719797864295270963012899842730979171094576234270104113046086880203358915567475463009702424991048272423274059189621996586781916338485457622606191616471635499367518139715913451590129950211894129518820915725060904361425935059634746061774151362579528429449516871356891592899182799745275497130220167989995834388218577225388823497913541309287009490756990973321132790306854375017144143224001799456642103428625470625408497631087237194864620833693494808695982621137486994322232945872237836167743163321596030592278025264644759260601512465963835486793599522519728397214387034328941375112725026389369726605630531961786426002030196912268103997044908039441812250594683982746317509451972009720356134030659388546922523698046539948072307396918565111550657251464926873862634670485768893551960042221152126756494004345283954269633790689542476495032610169367884109302319497752516804208988160733434274666607720909428708387610434201511421725593161757802636543129309215361186281964537348083824800719300205155260869277171813172019057101206656255946378296555115218940043915575551656368138540367968230813638404341535506660006488555808181217414549108602445485256376283008981878024782224020896256994520956223172501921586311034684224711029341654492386438794189544567864127899736942441959369683324940394059106065658045728468359775069381439681451437264857581119411314289861711261197161385769049483792809494905183558996427132894417081760743038576822617498503715283141504002821495572427946741966623325558867618462757464948913201669208191007791387179437198293155294351907681922776384591680851061355790586703629409395687872756741401730445902638428739773071878685051843632628882058954725213869588786903883180612757329588356528298049283464556760355082294733888742547289703069146511973028561888600965566949614527025681825635103095143459972957300904290133139129508186946089341061827609504992731413695625602185961430501446328250910706203177656694985991432073056949770430589936193788960061654441256832344863940266889508140305112783933232434184233958120647297538402279970405145982259483346078738543750541776083716470606660109441036102254561450554611124047950837954616001536553143655631591305470399803618540840593453626711364214213427384661578544504288198347097177402537273558499593769094731145511000234869016147858350693608924287882418212701050380925964393391563011896575701783126971596647940946732810415040326366457407847697279357708065250638968560329043942608797124386780871566473494237295531776826610589032201408227812061825631014762086223804837235869369267804601810463367706211450490285326502680773042742985685298028668463395202220117392893153087727041798565887334606443270976746827316162575354346928828442249500420607379228098139058134025287579999395989572913672214866207546469304937472828489167275403957213427644220397065259391929138234121771433057012403393592975101248812940645920908054392199076730225336467241189790507503084598575266831069100706625382891240002793289007417248566069419040924695958138576021576755971371894145318918841789835079937414385120658054094564812680215561753664134667641419561504204773016625790296586664754958581286054275272656355915450547120441926764719164104574700339276377180410303270815214552641022482261857208307298773897241606370480196841928547561101175683734196804780763689436441193078334540093992819545794168181476350581679785370386809427673535700899906163216495236633809374092021595398622074248193502119491627724592478675321068725203451011623372294839400030069147177387161313931657309202998027908580686254131324005922223414310798035738847044237283403435522665437983506960613517007245346711937440284743436205770955719256237667574873823219383686207576942088144849318096838204276221442523898468025073233158298880308812507130321669806982756453219551934498576322341139073528835370081147569710592770677511716598692016196707054648542736951961166490908081227986603406670385200600067874703705912921500438876925134171645598237900250394263391315075892852633863046150255875751133517342854159768538818773158487497364481430920305601475077128765244173353794980990883523403603970791198062786974858592658665243199482399765993793393469263106408335053074416996163436568235849229650527923896043000530915085029927052237261655321034518917982130693254628988418585590884572597893266647619982005642402197528314306967699876954801717238828118235142718026376536012470434996025114593497010864599763001493796894074784309766485462894638547353736204736061273214259441787854954506544059854931992386159672276199650971883597208095625727612539524221266594169440405755645172349120968542796435039217714493409148120564371128364867057219490100843259428171712594007047687710200060013072984350823778084774087193322214952068484879414950956349051293271039940765310386503441908721775350864140484325330974443647295360828161639526428371232795349368000937756400534341449698772594694119243689998192381007559927540317149737185913780731342278813769468300977808560113554742613100806639712518072834552967461186334011647431623983253057006527053849058906651886838384822125439167879693842822651924026652279649621644648763345721243038167776549162907636089929452324345243253838917130669924810610399907812747384133640739546788460729899755741337188578342693265427620277518477129981161780256470172579386364407932487926081224791823560796163332063995857251607592778745998759782502105632921510592287587007432918105094096048167582474594944642953917183957284244151562746168988669931259614217742257390598696797934988350480177251715684176477664881740321564962154949259570516557518163499555267465370734886331765902949651187039626973056559987417017739700583205416411376974065166670080597180269470334808463199777113611049047032018532014536324430365073094551350346355724839938689279928071975407686462011951050447117473664790601107226775816676789694457306799393542082562435511460546790136589061635110640530046289208676116364849966957853454883670964967250851747816060338030069894147824206544957970406208156609436626059118168495253836613478011591769890447529272756312393234710562652320746899843923739869429486680552391960221643871903720394387721065967074640170691925552488834732337637950716838913339341050090487237779494003572134532414525733195085518867260068833712476904709737453182820899419272317299070554825321138980105924550448209039093958024953223400299251610703869502100000148756049596123728157322332729374312621177684223910964197805315241217854943221936183069664500793707575196129923049560381495261406642383335661838752629064830281358524700489258622533199427114190065413707598855276997244660987347865910253282277222685071801804306556378332592228878637228780944423916554777070618153544945236218517066380206016389170472276489843563487476024482296590899940001115048935933821472103353597866742288827750604999898312668925605495963483125780534026351915270185390973317503553307204399966778347319857806469492564002869433735014551761841384311476974964782062917474730810002596556744629973515527001924127947199926415894848348875457109481879340000699970395827583263643221127955417955299711013550679087013703618852530872041847746804804026803665724350315684015718222517408185786075631139420487684141870937192839669577227276327699858814592921589590189107540993994652905165445083185913772825855453163084526248470325120159324294814822227341356625590669935587536288152097413912566609476704961169381156988085910867575086281494645649214347207070055439850106962494508144406556910825110229201185278559573609084227876876233427749772538920696096799514620651913037209736945969166883071875345664489058723260628150153219957283713613977774354152417424724981802391036030013437104392094764849953647633559088320350702436721063890596222094597147507862099779014167089041496796041067614110889521363865541821482846785594542431224027847403918484891252633810779617308240526851104238032957862081261289257010144501288036724748237316357511087711987308390106387691943308801046475306090040285617916967635188346843110235559545513437506445173981944393507522930445585653968177095133956910034259143777558091624380513837136522578307410687878902986094804579775493292808151755797497281757418388564338852492657121598375055415572561204850638017970194892469622321687618930894118239830333929241059070459668135246038956132335434509928013280484967837884871463521699497600823890253212481297680349798679307018350089176406400679475969350464912523395289292788032307945571733154402182756466919540840466363183829299936639606589834499568509079020900430275102812354117592264388892692791184001370783845003203169355334405690152873998100998389063750708936469784835600191806489729402042109252360678420289333735429020533062453467911593105559733871096789177042583967357045305280853211458692054262043283971935743564302619750989354794878815781041508464258647190825202206963454532457876234704491013728029842891845429878050651730075616797049130771882785649022461011758238644594874731401321208360753507484594774980214728821300853952053450216581577263688951206795091440984730057484238674326525423672799292963364644928651663713543630452286016604026903770721131794031827689122550777535549132270482937883676554769233345147783032480052886236362406431019591202337500688099896546933372579314450555875728446923771188220581449360411448399080702329464592069546305075668635025286134847737671024664116599810238615229277150329314413138371479346202211300629177653787193652840019514928003342098908713970363542002161758334074738940150982147009817274188739375799536609533984829843731045684431950173620509249276083024199334461484710673129759819878329168424353503322211242982029779196595112528788310052146174106607137818367353276475948009183640714738022556490707610958745137896486171597994392165955449977250800370078331592707192121511033743022562733376916462878333575092083439024213268332649200684072706536287433957235940084890236143796275336676735567026660455816660218919628438992677141391499244977437241863415831653838333753132503152507362785573632464958962538813658222288595175082464484176084252945791265163330822672312485804128235242857259394761852034194490501105618442014714842343662157872238679013350640119699054563014588786641646992917721959574298127772357219135355041267000085374752140781584709883445869278385338633017245663021429814417707258196764167217684169551285116817925808988855658893156503271479231956234369659124637589103886228424371380208928659275177882288292525445841161744364728693212262512873096324440346658178959780959770094730438058233208633537999681620373059338044124403508803824001103711666270469640599660498211914741370454690998766755367957252554518851444948363120309360978288882348808318947587014241300022477623347710022720941890996963985141589386516096110757422327059760078648387410772657451749983544498073662002607850210370639337496366457578863917114993184087379777562609129800018173546846034077858877227657720481631435580407817476060640997741320055432597711965750737592834477046932092290278462803632318710900284455428451535549547204193836813306049444326152502900951206194304442191852029146857622691703880575187906843054509381466988441084396222005407187901857262908388322998595561823539148812267623466347517788879518156198034514816831217421358763616642968883244873618961469556086006958578437876347406650067676512144378152142127811012579477781761857506441126628589841373804002048556523912442062483731776526710883462295008456988573153868430366166821088900084630421384845119581678706329914922714643429301621960067292452303291689353033812923158480656572086801364967530524272277941057010707066762881128552895683292312383467619253528573051868364673784486473204647592803734994730393811233850864386837974729123876929855258067625514534572485385973733815390255672750846744211728811678891046334135436516906749351382878817421855926135789473013086443110801547312225388285715350051258790466376107278548330279958911757348859057162823358623869584145417961180614508803533159683977704015214037059511060084476853293253074498095953713976526673003613190288700880541647865137161594358838088208384635140323191367776279078576877058353299136197940171528789873636341644287269680197189557409108272964482130934771408012474446371808747293548018319857792101879201302353617295580377561961548193501319847772474696909747243391381370632233175630412756342546855114107607078720669698816542061053615958804899610533897511909541412701013424507923833608280936375141752860680355926930513845170297473682395587685235299350243288862116891536012598239668474840711704542930948209556423591662334607990634467436573355963904444287247603934409267438121684011121663231839829319539790129622811523779024131166367097352702305094203924136379824027358122385616991449693780281836306069210164555085963647746134167587798919458497009018152343178968519035317513886702723629249772595701722014422258502099181502627337439505863760144845451194066627941745605531287664527644303704837274296925261064082230183810659913878799955792258723308472668722647114309022632437557725021959918590379857098100785894272478687826086404097295404723402006525116061301000957530363735461343981957615687960073258087261498834601474165675014315441919762279692151215658788968125839917741883813864895345753137527281361505360771253556996294670331233632883590620336697569597383828399816315918373466000470818298255886225044317343919582793577578892507662514385253001868309028259405985858081732667339107033105948747369846945242143472098584436348482068550778845093783888243621503515857895994158988143748186196383534627317704219613531255116609881496277519856193277888144517455342951391850925866802803677447591536702769797690883853836075032498526932511655095978381225240139326154187227908404697778258519757294967429151784699723734737956277782929431893514924539559027217267695838602377019972309199575085348082309055362278670429178507744985837206669214334005053317698391147478279829837709544546476232801052251684735808650284629000059577853245028489974827978313687345388885536231405360481407570148964372940574808287505451406026348240676266260536797389838314880340162530955852826672340133242824535181243991668680204937331331355711087308137102902539165979417596135389218754672360179806682782449202257746705428416485475450795976688396756119103365678257544676066007165265306352210849062249310429608601362370811341929322852120111706092100901824913869682080238688287540514042213029276710434964479802205692989588535826710062145753507790029101885843443320688262685167723796295854142980690608010129637457489775025286597759829516387193867756540324713701869928396561552322134197583981117043309513194950327204711735028717698427581611937112097795326382808938847507027881861908299573446176667226981132650760533074819797949920362104362482584981149394507976964912568086742515461418151636198658142114973957301437842128114158517957360717128020740164308861318444523985293645978497153792093469914400408399851364501578583223996538791274555329130761362594871935613380914614136786464732489403073050713179103350354043528477993047344620797047035250112026765976889704277027769272020712648706943303400625370369330168955861351218115288687791985401216097031628573010668622066838588183974143133331082687997303117065488261032556591011311393486325121543499315468071698440329705887036825885662354567760241469855896329714869909593755558454416149020964371962305400555919825871555890703560078179938424454925940843365598420102582955024807493053939102839180329517152232052239189253298511938521987052874901428925927318439186236710349274601134998621961189035327097219982340295996198288939794434667794275605074335869034005863709864083141245546237833641323202135269996124233830124959369126651249520613102530845620189834876518700658148957529849603926003483508486490116167092554393530692860608758407432688155502776672401505310791137271114891718915787365529435260025353515391369475496860176596906372142607305422554892381123667341568395734869341937161602396952758245589989732070399894142179114434432749547716310073900604293472990470613103392976500019576629023078976589321238637829824754233095761693121941818296425047311597496329011749967075100326422079711661308697000486364917596440701965944502609770134034612369693676468040832791855446843845359791698403973537917902230907407424282783206251427070297954696515441156758477693068353832878961544065871283992646532142589167937289503459815292975359840360086008247156412170924514737320621923886151343925648188685042025979306866740533138751055471777481989993916280208335950533753501161551969058932339274339990809586221480474801223660966286655409945694793940936088576267442337680389205010958318124072791133660026786901529675563386837258061534481673494074881709182314411741486480534899981010700478778264927449403943977652150270248569715680037272943210952754670397018404305448037227756420195856338926850035001182290698959919518758248023158406308324833258469339817915902131367888853211101877191030099799351524031504602525970116976201920361382140181203570758067698753738862621886153418310938431974475605601080453362906463781291708636212627988829600411422608693706126667218590907913766084585435096487549338750939208330063311842487579847540829210668579060772493853380766090571268935103887800302278775158109842389533300998712963737206814161667392932461610331662835676357211655140841801352512845866628669900348474928741769674834471742038591132801860610469876177873790016109033434469415520139962071283039695350825757653110901397934045563397153925308184333416019176453081928593336174566484276974612168912955844141573128513995775901546687526803871726045580983011168233614394017622490191097540694987986890957230422420096983656401328567232292864026391546854188826879307645804668730451893640914236311573947414521519145347493003379677730902598355321751566000918254482778446693581185590179686211497089400229609316361603687413260847432801872732868849174964924280248957207373915235506268123738340521778288932079864888132828428100286894904735806728054059942378241282232836227056117421918568545920408284580123270068163694185090881379394641350696167687804493163949423960466674397641962710048168225822340310825435892894560935938220466316203713384644334630162369801212695289722630559249482468265086130002891488674814798390378826220763498523580700533872409469479695466985971611810145950145042752129032290904852839838555841674112676885638296627031026552941614824455710230628078870651722732487740818252473967023264151883330071750732329846428257336126203804681716743210519366380460051559325751407861755107366975090786335305812656731328339176190804871380490255745480598061879031263008118813729336385338093817976136635574272438007060630922112576626755227332545212226184498364676260903258338703349104093487584327195266747762373146563930710194746848578625317492022753120681955263026185991321980675068151334079346973124771527361089075615864166748857188263686891116603452709017997196156411393771827744896252014679158862835631048331690337856318343180930399010246491607947528720260488418152513136297051371675363775005122974908109920443715695777258667136692726908526325519092767361843787501836592015137628180031186661888914716173778809064383126221144891080526266097508943860309707782190759750327849331165090140840908137061411910726656108657296069699926217072857548916815111869061518333646855459057774129913057913340643185161006373699150678526251758245103371609589517467233835806315300745628981786341500158292944462578535239819944743242082202899728788206200947540785812255257551454997027094035728059919735019821024182123542502430702609867087217206309849294399117358003498851697667112990452869992554044587164992553883975079675331266818337562454489817093461014672163868044812258936305619028894348674145979706189726893235453145693341348729259442069453952000986613452216520960583869342000305674103420880720063690457213688960298338364483183930194481781261525310856136081222012120368092746422217615048219180730094374354715490186746425399168551097674910170566438971186959075220892901044371537711043541091544638635298645805548721561218524867043512553912211408100386769640894397163615149131304065177182237372154730378975940366479921836162644958904608013599960129404262751905601265652674383473639587917190344554419356971690010532569351310707427256312372767691408614795338618808505604541247474037209007249997454189721785291780830447687922107426216109510450719490801872031408496845297683401751047839994433066191921297159710333775044535423971831905212427137264469221130250250642884772135393628252392252394123011913258426767466155915171480113522627682871449941871564023582981765108569691621029890940215449668363257963814071196914714482379810986153328204797550137082397841972483772868530194343222604521139862018508461501247756972080323669382340726664094521079717495670078444839119962804052776811878055379338558260436985842795184488540743052334520932303813275839084184475914604300963788090775116839810987664300704516628200258606208014988056187299134917176335831555416831788728118226511040791256898274698493000070114055284346565287167623172517885155561144995508509905048544175236535686530573596999843277408394900092759931523506311841496375550238966190820843405177564886465021276984839338564055941174727097263729585985137802559127209438250058807840149366976568590036530707591572003505544967655703085098571794677732168779882311086200331265016'), }, /* eslint-enable */ // 100 KiB of 1s. { bytes: new Uint8Array(102400).fill(1), - hex: `0x${'01'.repeat(102400)}`, + hexadecimal: `0x${'01'.repeat(102400)}`, bigint: BigInt(`0x${'01'.repeat(102400)}`), }, ]; @@ -118,19 +121,22 @@ export const UPPER_CASE_HEX_FIXTURES = [ // 32 random bytes with uppercase characters. // prettier-ignore bytes: new Uint8Array([128, 166, 63, 33, 255, 253, 81, 50, 185, 159, 64, 5, 201, 96, 173, 113, 231, 157, 20, 253, 171, 196, 59, 83, 97, 52, 162, 30, 233, 162, 62, 137]), - hex: '0x80A63F21fffd5132B99F4005c960aD71E79D14FDaBc43B536134A21ee9A23e89', + hexadecimal: + '0x80A63F21fffd5132B99F4005c960aD71E79D14FDaBc43B536134A21ee9A23e89', }, { // 32 random bytes with uppercase characters. // prettier-ignore bytes: new Uint8Array([24, 59, 190, 155, 44, 45, 70, 12, 94, 71, 218, 198, 156, 6, 95, 55, 151, 93, 217, 212, 57, 56, 209, 106, 70, 72, 78, 228, 108, 104, 250, 76]), - hex: '0x183bBe9B2C2D460C5E47daC69c065F37975DD9d43938D16a46484eE46c68fa4c', + hexadecimal: + '0x183bBe9B2C2D460C5E47daC69c065F37975DD9d43938D16a46484eE46c68fa4c', }, { // 32 random bytes with uppercase characters. // prettier-ignore bytes: new Uint8Array([162, 34, 67, 251, 133, 170, 184, 203, 91, 211, 174, 71, 165, 215, 28, 168, 27, 18, 2, 91, 57, 222, 62, 54, 119, 204, 228, 207, 105, 230, 166, 107]), - hex: '0XA22243fb85AaB8cb5bd3aE47A5D71cA81B12025b39dE3e3677CcE4cF69e6a66b', + hexadecimal: + '0XA22243fb85AaB8cb5bd3aE47A5D71cA81B12025b39dE3e3677CcE4cF69e6a66b', }, ]; diff --git a/src/__fixtures__/coercions.ts b/src/__fixtures__/coercions.ts index 96f1e44bb..c80ebde3f 100644 --- a/src/__fixtures__/coercions.ts +++ b/src/__fixtures__/coercions.ts @@ -5,8 +5,7 @@ export const NEGATIVE_INTEGERS = [ -1, -10, -100, -1000, -123456789, -2147483647, ]; export const DECIMAL_NUMBERS = [ - 1.1, 1.123456789, 1.123456789123456789, -1.1, -1.123456789, - -1.123456789123456789, + 1.1, 1.123456789, 1.123456789123456, -1.1, -1.123456789, -1.123456789123456, ]; export const HEX_STRINGS: Hex[] = [ diff --git a/src/__fixtures__/json.ts b/src/__fixtures__/json.ts index 992d20a79..f57fbdbc2 100644 --- a/src/__fixtures__/json.ts +++ b/src/__fixtures__/json.ts @@ -1063,18 +1063,18 @@ export const JSON_RPC_PENDING_RESPONSE_FIXTURES = { export const COMPLEX_OBJECT = { data: { account: { - __typename: 'Account', + typename: 'Account', registrations: [ { - __typename: 'Registration', + typename: 'Registration', domain: { - __typename: 'Domain', + typename: 'Domain', isMigrated: true, labelName: 'mycrypto', labelhash: '0x9a781ca0d227debc3ee76d547c960b0803a6c9f58c6d3b4722f12ede7e6ef7c9', name: 'mycrypto.eth', - parent: { __typename: 'Domain', name: 'eth' }, + parent: { typename: 'Domain', name: 'eth' }, }, expiryDate: '1754111315', }, diff --git a/src/__fixtures__/numbers.ts b/src/__fixtures__/numbers.ts index 6328cb980..472bb47ce 100644 --- a/src/__fixtures__/numbers.ts +++ b/src/__fixtures__/numbers.ts @@ -2,51 +2,51 @@ export const NUMBER_VALUES = [ { number: 0, bigint: BigInt(0), - hex: '0x0', + hexadecimal: '0x0', }, { number: 1, bigint: BigInt(1), - hex: '0x1', + hexadecimal: '0x1', }, { number: 16, bigint: BigInt(16), - hex: '0x10', + hexadecimal: '0x10', }, { number: 255, bigint: BigInt(255), - hex: '0xff', + hexadecimal: '0xff', }, { number: 256, bigint: BigInt(256), - hex: '0x100', + hexadecimal: '0x100', }, { number: 65535, bigint: BigInt(65535), - hex: '0xffff', + hexadecimal: '0xffff', }, { number: 65536, bigint: BigInt(65536), - hex: '0x10000', + hexadecimal: '0x10000', }, { number: 4294967295, bigint: BigInt(4294967295), - hex: '0xffffffff', + hexadecimal: '0xffffffff', }, { number: 4294967296, bigint: BigInt(4294967296), - hex: '0x100000000', + hexadecimal: '0x100000000', }, { number: 9007199254740991, bigint: BigInt(9007199254740991), - hex: '0x1fffffffffffff', + hexadecimal: '0x1fffffffffffff', }, ]; diff --git a/src/assert.test.ts b/src/assert.test.ts index edb3f26b5..1449a57e8 100644 --- a/src/assert.test.ts +++ b/src/assert.test.ts @@ -1,5 +1,6 @@ import { string } from 'superstruct'; import * as superstructModule from 'superstruct'; + import { assert, assertExhaustive, @@ -18,7 +19,7 @@ describe('assert', () => { assert(item !== undefined); // This will fail to compile otherwise - expect(item.foo).toStrictEqual(1); + expect(item.foo).toBe(1); }); it('throws', () => { @@ -98,6 +99,7 @@ describe('assertStruct', () => { it('includes the value thrown in the message if it is not an error', () => { jest.spyOn(superstructModule, 'assert').mockImplementation(() => { + // eslint-disable-next-line @typescript-eslint/no-throw-literal throw 'foo.'; }); diff --git a/src/assert.ts b/src/assert.ts index 949ef817d..f4fa8e027 100644 --- a/src/assert.ts +++ b/src/assert.ts @@ -55,6 +55,7 @@ function getErrorMessage(error: unknown): string { * @param message - The error message. * @returns The error object. */ +// eslint-disable-next-line @typescript-eslint/naming-convention function getError(ErrorWrapper: AssertionErrorConstructor, message: string) { if (isConstructable(ErrorWrapper)) { return new ErrorWrapper({ @@ -92,6 +93,7 @@ export class AssertionError extends Error { export function assert( value: any, message: string | Error = 'Assertion failed.', + // eslint-disable-next-line @typescript-eslint/naming-convention ErrorWrapper: AssertionErrorConstructor = AssertionError, ): asserts value { if (!value) { @@ -118,6 +120,7 @@ export function assertStruct( value: unknown, struct: Struct, errorPrefix = 'Assertion failed', + // eslint-disable-next-line @typescript-eslint/naming-convention ErrorWrapper: AssertionErrorConstructor = AssertionError, ): asserts value is T { try { diff --git a/src/bytes.test.ts b/src/bytes.test.ts index 140ff08bd..2c424e599 100644 --- a/src/bytes.test.ts +++ b/src/bytes.test.ts @@ -1,3 +1,11 @@ +import { + BYTES_FIXTURES, + INVALID_BYTES_FIXTURES, + LARGE_BYTES_FIXTURES, + TWOS_COMPLEMENT_BYTES_FIXTURES, + UPPER_CASE_HEX_FIXTURES, + UTF_8_BYTES_FIXTURES, +} from './__fixtures__'; import { assertIsBytes, bigIntToBytes, @@ -15,14 +23,6 @@ import { stringToBytes, valueToBytes, } from './bytes'; -import { - BYTES_FIXTURES, - INVALID_BYTES_FIXTURES, - LARGE_BYTES_FIXTURES, - TWOS_COMPLEMENT_BYTES_FIXTURES, - UPPER_CASE_HEX_FIXTURES, - UTF_8_BYTES_FIXTURES, -} from './__fixtures__/bytes'; describe('isBytes', () => { it('returns true for a Node.js Buffer', () => { @@ -55,15 +55,15 @@ describe('assertIsBytes', () => { describe('bytesToHex', () => { it.each(BYTES_FIXTURES)( 'returns a hex string from a byte array', - ({ bytes, hex }) => { - expect(bytesToHex(bytes)).toBe(hex); + ({ bytes, hexadecimal }) => { + expect(bytesToHex(bytes)).toBe(hexadecimal); }, ); it.each(LARGE_BYTES_FIXTURES)( 'returns a hex string from a large byte array', - ({ bytes, hex }) => { - expect(bytesToHex(bytes)).toBe(hex); + ({ bytes, hexadecimal }) => { + expect(bytesToHex(bytes)).toBe(hexadecimal); }, ); @@ -173,22 +173,22 @@ describe('bytesToString', () => { describe('hexToBytes', () => { it.each(BYTES_FIXTURES)( 'returns a byte array from a hex string', - ({ bytes, hex }) => { - expect(hexToBytes(hex)).toStrictEqual(bytes); + ({ bytes, hexadecimal }) => { + expect(hexToBytes(hexadecimal)).toStrictEqual(bytes); }, ); it.each(LARGE_BYTES_FIXTURES)( 'returns a byte array from a large hex string', - ({ bytes, hex }) => { - expect(hexToBytes(hex)).toStrictEqual(bytes); + ({ bytes, hexadecimal }) => { + expect(hexToBytes(hexadecimal)).toStrictEqual(bytes); }, ); it.each(UPPER_CASE_HEX_FIXTURES)( 'returns a byte array from an upper case hex string', - ({ bytes, hex }) => { - expect(hexToBytes(hex)).toStrictEqual(bytes); + ({ bytes, hexadecimal }) => { + expect(hexToBytes(hexadecimal)).toStrictEqual(bytes); }, ); @@ -367,19 +367,19 @@ describe('stringToBytes', () => { describe('valueToBytes', () => { it.each(BYTES_FIXTURES)( 'returns a byte array from a value', - ({ bigint, number, hex, bytes }) => { + ({ bigint, number, hexadecimal, bytes }) => { expect(valueToBytes(bigint)).toStrictEqual(bytes); expect(valueToBytes(number)).toStrictEqual(bytes); - expect(valueToBytes(hex)).toStrictEqual(bytes); + expect(valueToBytes(hexadecimal)).toStrictEqual(bytes); expect(valueToBytes(bytes)).toBe(bytes); }, ); it.each(LARGE_BYTES_FIXTURES)( 'returns a byte array from a large value', - ({ bigint, hex, bytes }) => { + ({ bigint, hexadecimal, bytes }) => { expect(valueToBytes(bigint)).toStrictEqual(bytes); - expect(valueToBytes(hex)).toStrictEqual(bytes); + expect(valueToBytes(hexadecimal)).toStrictEqual(bytes); expect(valueToBytes(bytes)).toBe(bytes); }, ); diff --git a/src/bytes.ts b/src/bytes.ts index f31dc2a2c..9fbac3d41 100644 --- a/src/bytes.ts +++ b/src/bytes.ts @@ -82,14 +82,14 @@ export function bytesToHex(bytes: Uint8Array): Hex { } const lookupTable = getPrecomputedHexValues(); - const hex = new Array(bytes.length); + const hexadecimal = new Array(bytes.length); for (let i = 0; i < bytes.length; i++) { // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - hex[i] = lookupTable[bytes[i]!]; + hexadecimal[i] = lookupTable[bytes[i]!]; } - return add0x(hex.join('')); + return add0x(hexadecimal.join('')); } /** @@ -105,8 +105,8 @@ export function bytesToHex(bytes: Uint8Array): Hex { export function bytesToBigInt(bytes: Uint8Array): bigint { assertIsBytes(bytes); - const hex = bytesToHex(bytes); - return BigInt(hex); + const hexadecimal = bytesToHex(bytes); + return BigInt(hexadecimal); } /** @@ -226,8 +226,8 @@ export function bigIntToBytes(value: bigint): Uint8Array { assert(typeof value === 'bigint', 'Value must be a bigint.'); assert(value >= BigInt(0), 'Value must be a non-negative bigint.'); - const hex = value.toString(16); - return hexToBytes(hex); + const hexadecimal = value.toString(16); + return hexToBytes(hexadecimal); } /** @@ -301,8 +301,8 @@ export function numberToBytes(value: number): Uint8Array { 'Value is not a safe integer. Use `bigIntToBytes` instead.', ); - const hex = value.toString(16); - return hexToBytes(hex); + const hexadecimal = value.toString(16); + return hexToBytes(hexadecimal); } /** @@ -417,6 +417,10 @@ export function concatBytes(values: Bytes[]): Uint8Array { * @returns The {@link DataView}. */ export function createDataView(bytes: Uint8Array): DataView { + // To maintain compatibility with Node.js, we need to check if the bytes are + // a Buffer. If so, we need to slice the buffer to get the underlying + // ArrayBuffer. + // eslint-disable-next-line no-restricted-globals if (typeof Buffer !== 'undefined' && bytes instanceof Buffer) { const buffer = bytes.buffer.slice( bytes.byteOffset, diff --git a/src/coercers.test.ts b/src/coercers.test.ts index 1fc11028e..fb22cdad2 100644 --- a/src/coercers.test.ts +++ b/src/coercers.test.ts @@ -4,9 +4,9 @@ import { NEGATIVE_INTEGERS, POSITIVE_INTEGERS, } from './__fixtures__'; +import { bytesToHex, hexToBytes } from './bytes'; import { createBigInt, createBytes, createHex, createNumber } from './coercers'; import { add0x } from './hex'; -import { bytesToHex, hexToBytes } from './bytes'; describe('createNumber', () => { it.each(POSITIVE_INTEGERS)( diff --git a/src/coercers.ts b/src/coercers.ts index 556df03ab..a5ad0fb90 100644 --- a/src/coercers.ts +++ b/src/coercers.ts @@ -9,9 +9,10 @@ import { StructError, union, } from 'superstruct'; -import { Hex, StrictHexStruct } from './hex'; + import { assert } from './assert'; import { bytesToHex, hexToBytes } from './bytes'; +import { Hex, StrictHexStruct } from './hex'; const NumberLikeStruct = union([number(), bigint(), string(), StrictHexStruct]); const NumberCoercer = coerce(number(), NumberLikeStruct, Number); @@ -103,7 +104,9 @@ export function createBigInt(value: NumberLike): bigint { return create(value, BigIntCoercer); } catch (error) { if (error instanceof StructError) { - throw new Error(`Expected a number-like value, got "${error.value}".`); + throw new Error( + `Expected a number-like value, got "${String(error.value)}".`, + ); } /* istanbul ignore next */ @@ -139,7 +142,9 @@ export function createBytes(value: BytesLike): Uint8Array { return create(value, BytesCoercer); } catch (error) { if (error instanceof StructError) { - throw new Error(`Expected a bytes-like value, got "${error.value}".`); + throw new Error( + `Expected a bytes-like value, got "${String(error.value)}".`, + ); } /* istanbul ignore next */ @@ -178,7 +183,9 @@ export function createHex(value: BytesLike): Hex { return create(value, HexCoercer); } catch (error) { if (error instanceof StructError) { - throw new Error(`Expected a bytes-like value, got "${error.value}".`); + throw new Error( + `Expected a bytes-like value, got "${String(error.value)}".`, + ); } /* istanbul ignore next */ diff --git a/src/hex.ts b/src/hex.ts index d6716306d..9cb4d92d7 100644 --- a/src/hex.ts +++ b/src/hex.ts @@ -1,4 +1,5 @@ import { is, pattern, string, Struct } from 'superstruct'; + import { assert } from './assert'; export type Hex = `0x${string}`; @@ -58,32 +59,32 @@ export function assertIsStrictHexString(value: unknown): asserts value is Hex { * Add the `0x`-prefix to a hexadecimal string. If the string already has the * prefix, it is returned as-is. * - * @param hex - The hexadecimal string to add the prefix to. + * @param hexadecimal - The hexadecimal string to add the prefix to. * @returns The prefixed hexadecimal string. */ -export function add0x(hex: string): Hex { - if (hex.startsWith('0x')) { - return hex as Hex; +export function add0x(hexadecimal: string): Hex { + if (hexadecimal.startsWith('0x')) { + return hexadecimal as Hex; } - if (hex.startsWith('0X')) { - return `0x${hex.substring(2)}`; + if (hexadecimal.startsWith('0X')) { + return `0x${hexadecimal.substring(2)}`; } - return `0x${hex}`; + return `0x${hexadecimal}`; } /** * Remove the `0x`-prefix from a hexadecimal string. If the string doesn't have * the prefix, it is returned as-is. * - * @param hex - The hexadecimal string to remove the prefix from. + * @param hexadecimal - The hexadecimal string to remove the prefix from. * @returns The un-prefixed hexadecimal string. */ -export function remove0x(hex: string): string { - if (hex.startsWith('0x') || hex.startsWith('0X')) { - return hex.substring(2); +export function remove0x(hexadecimal: string): string { + if (hexadecimal.startsWith('0x') || hexadecimal.startsWith('0X')) { + return hexadecimal.substring(2); } - return hex; + return hexadecimal; } diff --git a/src/json.test-d.ts b/src/json.test-d.ts index c5ac43528..0d79c24f2 100644 --- a/src/json.test-d.ts +++ b/src/json.test-d.ts @@ -1,6 +1,7 @@ /* eslint-disable @typescript-eslint/consistent-type-definitions */ import { expectAssignable, expectNotAssignable } from 'tsd'; + import type { Json } from '.'; // Valid Json: @@ -128,8 +129,8 @@ expectNotAssignable(a); // The Json type gets confused by classes. This class instance is valid Json, // but it's incompatible with the Json type. -class B { +class Foo { a!: number; } -const b = new B(); -expectNotAssignable(b); +const foo = new Foo(); +expectNotAssignable(foo); diff --git a/src/json.test.ts b/src/json.test.ts index 817e37fa5..8381ee78c 100644 --- a/src/json.test.ts +++ b/src/json.test.ts @@ -1,18 +1,6 @@ import * as superstructModule from 'superstruct'; import { validate } from 'superstruct'; -import { - ARRAY_OF_DIFFRENT_KINDS_OF_NUMBERS, - COMPLEX_OBJECT, - JSON_FIXTURES, - JSON_RPC_ERROR_FIXTURES, - JSON_RPC_FAILURE_FIXTURES, - JSON_RPC_NOTIFICATION_FIXTURES, - JSON_RPC_PENDING_RESPONSE_FIXTURES, - JSON_RPC_REQUEST_FIXTURES, - JSON_RPC_RESPONSE_FIXTURES, - JSON_RPC_SUCCESS_FIXTURES, - NON_SERIALIZABLE_NESTED_OBJECT, -} from './__fixtures__'; + import { assert, assertIsJsonRpcError, @@ -34,15 +22,26 @@ import { JsonStruct, validateJsonAndGetSize, } from '.'; +import { + ARRAY_OF_DIFFRENT_KINDS_OF_NUMBERS, + COMPLEX_OBJECT, + JSON_FIXTURES, + JSON_RPC_ERROR_FIXTURES, + JSON_RPC_FAILURE_FIXTURES, + JSON_RPC_NOTIFICATION_FIXTURES, + JSON_RPC_PENDING_RESPONSE_FIXTURES, + JSON_RPC_REQUEST_FIXTURES, + JSON_RPC_RESPONSE_FIXTURES, + JSON_RPC_SUCCESS_FIXTURES, + NON_SERIALIZABLE_NESTED_OBJECT, +} from './__fixtures__'; describe('json', () => { describe('JsonStruct', () => { it('returns error message', () => { const [error] = validate(undefined, JsonStruct); assert(error !== undefined); - expect(error.message).toStrictEqual( - 'Expected a valid JSON-serializable value', - ); + expect(error.message).toBe('Expected a valid JSON-serializable value'); }); }); @@ -106,6 +105,7 @@ describe('json', () => { it('includes the value thrown in the message if it is not an error', () => { jest.spyOn(superstructModule, 'assert').mockImplementation(() => { + // eslint-disable-next-line @typescript-eslint/no-throw-literal throw 'oops'; }); @@ -158,6 +158,7 @@ describe('json', () => { it('includes the value thrown in the message if it is not an error', () => { jest.spyOn(superstructModule, 'assert').mockImplementation(() => { + // eslint-disable-next-line @typescript-eslint/no-throw-literal throw 'oops'; }); @@ -210,6 +211,7 @@ describe('json', () => { it('includes the value thrown in the message if it is not an error', () => { jest.spyOn(superstructModule, 'assert').mockImplementation(() => { + // eslint-disable-next-line @typescript-eslint/no-throw-literal throw 'oops'; }); @@ -262,6 +264,7 @@ describe('json', () => { it('includes the value thrown in the message if it is not an error', () => { jest.spyOn(superstructModule, 'assert').mockImplementation(() => { + // eslint-disable-next-line @typescript-eslint/no-throw-literal throw 'oops'; }); @@ -314,6 +317,7 @@ describe('json', () => { it('includes the value thrown in the message if it is not an error', () => { jest.spyOn(superstructModule, 'assert').mockImplementation(() => { + // eslint-disable-next-line @typescript-eslint/no-throw-literal throw 'oops'; }); @@ -358,6 +362,7 @@ describe('json', () => { it('includes the value thrown in the message if it is not an error', () => { jest.spyOn(superstructModule, 'assert').mockImplementation(() => { + // eslint-disable-next-line @typescript-eslint/no-throw-literal throw 'oops'; }); @@ -410,6 +415,7 @@ describe('json', () => { it('includes the value thrown in the message if it is not an error', () => { jest.spyOn(superstructModule, 'assert').mockImplementation(() => { + // eslint-disable-next-line @typescript-eslint/no-throw-literal throw 'oops'; }); @@ -550,10 +556,10 @@ describe('json', () => { ).toStrictEqual([true, 73]); }); - it('should return true for serialization and 1288 for a size of a complex nested object', () => { + it('should return true for serialization and 1280 for a size of a complex nested object', () => { expect(validateJsonAndGetSize(COMPLEX_OBJECT)).toStrictEqual([ true, - 1288, + 1280, ]); }); @@ -571,7 +577,7 @@ describe('json', () => { it('should return false for serialization and 0 for size when non-serializable nested object was provided', () => { expect( NON_SERIALIZABLE_NESTED_OBJECT.levelOne.levelTwo.levelThree.levelFour.levelFive(), - ).toStrictEqual('anything'); + ).toBe('anything'); expect( validateJsonAndGetSize(NON_SERIALIZABLE_NESTED_OBJECT), @@ -771,6 +777,7 @@ describe('json', () => { expect(validateJsonAndGetSize(123, true)).toStrictEqual([true, 0]); expect(validateJsonAndGetSize(undefined, true)).toStrictEqual([false, 0]); + /* eslint-disable @typescript-eslint/naming-convention */ // Value: string escape ASCII const charToJson = { '"': '\\"', @@ -808,6 +815,7 @@ describe('json', () => { '\x1E': '\\u001e', '\x1F': '\\u001f', }; + /* eslint-enable @typescript-eslint/naming-convention */ const chars = Object.keys(charToJson).join(''); const charsReversed = Object.keys(charToJson).reverse().join(''); @@ -849,7 +857,7 @@ describe('json', () => { ]; // eslint-disable-next-line guard-for-in - for (const strUnicode in stringEscapeUnicode) { + for (const strUnicode of stringEscapeUnicode) { expect(validateJsonAndGetSize(strUnicode, true)).toStrictEqual([ true, 0, diff --git a/src/json.ts b/src/json.ts index d12ca660c..680efda7f 100644 --- a/src/json.ts +++ b/src/json.ts @@ -16,6 +16,7 @@ import { union, unknown, } from 'superstruct'; + import { AssertionErrorConstructor, assertStruct } from './assert'; import { calculateNumberSize, @@ -116,7 +117,7 @@ export const JsonRpcRequestStruct = object({ }); export type InferWithParams< - Type extends Struct, + Type extends Struct, Params extends JsonRpcParams, > = Omit, 'params'> & (keyof Params extends undefined @@ -150,7 +151,7 @@ export type JsonRpcNotification = */ export function isJsonRpcNotification( value: unknown, -): value is JsonRpcNotification { +): value is JsonRpcNotification { return is(value, JsonRpcNotificationStruct); } @@ -164,8 +165,9 @@ export function isJsonRpcNotification( */ export function assertIsJsonRpcNotification( value: unknown, + // eslint-disable-next-line @typescript-eslint/naming-convention ErrorWrapper?: AssertionErrorConstructor, -): asserts value is JsonRpcNotification { +): asserts value is JsonRpcNotification { assertStruct( value, JsonRpcNotificationStruct, @@ -180,9 +182,7 @@ export function assertIsJsonRpcNotification( * @param value - The value to check. * @returns Whether the given value is a valid {@link JsonRpcRequest} object. */ -export function isJsonRpcRequest( - value: unknown, -): value is JsonRpcRequest { +export function isJsonRpcRequest(value: unknown): value is JsonRpcRequest { return is(value, JsonRpcRequestStruct); } @@ -196,8 +196,9 @@ export function isJsonRpcRequest( */ export function assertIsJsonRpcRequest( value: unknown, + // eslint-disable-next-line @typescript-eslint/naming-convention ErrorWrapper?: AssertionErrorConstructor, -): asserts value is JsonRpcRequest { +): asserts value is JsonRpcRequest { assertStruct( value, JsonRpcRequestStruct, @@ -289,6 +290,7 @@ export function isPendingJsonRpcResponse( */ export function assertIsPendingJsonRpcResponse( response: unknown, + // eslint-disable-next-line @typescript-eslint/naming-convention ErrorWrapper?: AssertionErrorConstructor, ): asserts response is PendingJsonRpcResponse { assertStruct( @@ -321,6 +323,7 @@ export function isJsonRpcResponse( */ export function assertIsJsonRpcResponse( value: unknown, + // eslint-disable-next-line @typescript-eslint/naming-convention ErrorWrapper?: AssertionErrorConstructor, ): asserts value is JsonRpcResponse { assertStruct( @@ -353,6 +356,7 @@ export function isJsonRpcSuccess( */ export function assertIsJsonRpcSuccess( value: unknown, + // eslint-disable-next-line @typescript-eslint/naming-convention ErrorWrapper?: AssertionErrorConstructor, ): asserts value is JsonRpcSuccess { assertStruct( @@ -383,6 +387,7 @@ export function isJsonRpcFailure(value: unknown): value is JsonRpcFailure { */ export function assertIsJsonRpcFailure( value: unknown, + // eslint-disable-next-line @typescript-eslint/naming-convention ErrorWrapper?: AssertionErrorConstructor, ): asserts value is JsonRpcFailure { assertStruct( @@ -413,6 +418,7 @@ export function isJsonRpcError(value: unknown): value is JsonRpcError { */ export function assertIsJsonRpcError( value: unknown, + // eslint-disable-next-line @typescript-eslint/naming-convention ErrorWrapper?: AssertionErrorConstructor, ): asserts value is JsonRpcError { assertStruct( diff --git a/src/logging.test.ts b/src/logging.test.ts index 1bc992e6d..cd2245bca 100644 --- a/src/logging.test.ts +++ b/src/logging.test.ts @@ -1,4 +1,5 @@ import { MockWritable } from 'stdio-mock'; + import { createProjectLogger, createModuleLogger } from './logging'; describe('logging', () => { diff --git a/src/misc.test.ts b/src/misc.test.ts index 2a817494a..633dd5435 100644 --- a/src/misc.test.ts +++ b/src/misc.test.ts @@ -52,7 +52,7 @@ describe('miscellaneous', () => { Symbol('foo'), [], () => undefined, - Promise.resolve, + Promise.resolve.bind(Promise), 1, null, undefined, @@ -84,8 +84,8 @@ describe('miscellaneous', () => { [ [{ a: 1 }, 'a'], [{ [symbol]: 1 }, symbol], - [{ 2: 'b' }, 2], - [{ a: 1, 2: 'b', c: 'x' }, 'c'], + [{ two: 'b' }, 'two'], + [{ a: 1, two: 'b', c: 'x' }, 'c'], ] as const ).forEach(([objectValue, property]) => { expect(hasProperty(objectValue, property)).toBe(true); diff --git a/src/number.test.ts b/src/number.test.ts index a73e248a7..89aa9d854 100644 --- a/src/number.test.ts +++ b/src/number.test.ts @@ -1,11 +1,11 @@ -import { bigIntToHex, hexToBigInt, hexToNumber, numberToHex } from './number'; import { NUMBER_VALUES } from './__fixtures__'; +import { bigIntToHex, hexToBigInt, hexToNumber, numberToHex } from './number'; describe('numberToHex', () => { it.each(NUMBER_VALUES)( 'converts a number to a hex string', - ({ number, hex }) => { - expect(numberToHex(number)).toBe(hex); + ({ number, hexadecimal }) => { + expect(numberToHex(number)).toBe(hexadecimal); }, ); @@ -39,8 +39,8 @@ describe('numberToHex', () => { describe('bigIntToHex', () => { it.each(NUMBER_VALUES)( 'converts a bigint to a hex string', - ({ bigint, hex }) => { - expect(bigIntToHex(bigint)).toBe(hex); + ({ bigint, hexadecimal }) => { + expect(bigIntToHex(bigint)).toBe(hexadecimal); }, ); @@ -65,8 +65,8 @@ describe('bigIntToHex', () => { describe('hexToNumber', () => { it.each(NUMBER_VALUES)( 'converts a hex string to a number', - ({ number, hex }) => { - expect(hexToNumber(hex)).toBe(number); + ({ number, hexadecimal }) => { + expect(hexToNumber(hexadecimal)).toBe(number); }, ); @@ -84,8 +84,8 @@ describe('hexToNumber', () => { describe('hexToBigInt', () => { it.each(NUMBER_VALUES)( 'converts a hex string to a bigint', - ({ bigint, hex }) => { - expect(hexToBigInt(hex)).toBe(bigint); + ({ bigint, hexadecimal }) => { + expect(hexToBigInt(hexadecimal)).toBe(bigint); }, ); diff --git a/src/number.ts b/src/number.ts index 7fcc09e76..c485e1053 100644 --- a/src/number.ts +++ b/src/number.ts @@ -1,5 +1,5 @@ -import { add0x, assertIsHexString } from './hex'; import { assert } from './assert'; +import { add0x, assertIsHexString } from './hex'; /** * Convert a number to a hexadecimal string. This verifies that the number is a diff --git a/yarn.lock b/yarn.lock index f1bb59bdc..84ddc1fa6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -15,15 +15,6 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:7.12.11": - version: 7.12.11 - resolution: "@babel/code-frame@npm:7.12.11" - dependencies: - "@babel/highlight": ^7.10.4 - checksum: 3963eff3ebfb0e091c7e6f99596ef4b258683e4ba8a134e4e95f77afe85be5c931e184fff6435fb4885d12eba04a5e25532f7fbc292ca13b48e7da943474e2f3 - languageName: node - linkType: hard - "@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.18.6": version: 7.18.6 resolution: "@babel/code-frame@npm:7.18.6" @@ -196,7 +187,7 @@ __metadata: languageName: node linkType: hard -"@babel/highlight@npm:^7.10.4, @babel/highlight@npm:^7.18.6": +"@babel/highlight@npm:^7.18.6": version: 7.18.6 resolution: "@babel/highlight@npm:7.18.6" dependencies: @@ -417,31 +408,31 @@ __metadata: languageName: node linkType: hard -"@es-joy/jsdoccomment@npm:0.10.8": - version: 0.10.8 - resolution: "@es-joy/jsdoccomment@npm:0.10.8" +"@es-joy/jsdoccomment@npm:~0.36.1": + version: 0.36.1 + resolution: "@es-joy/jsdoccomment@npm:0.36.1" dependencies: - comment-parser: 1.2.4 + comment-parser: 1.3.1 esquery: ^1.4.0 - jsdoc-type-pratt-parser: 1.1.1 - checksum: 3e144ef393459a541b64f6c9c8e62fb6d9b47e1a2c626410487ede12c472064f6ce6e0911df60b42ccf126d5a66102707eef59ca14767cb7aeb5e608b227558d + jsdoc-type-pratt-parser: ~3.1.0 + checksum: 28e697779230dc6a95b1f233a8c2a72b64fbea686e407106e5d4292083421a997452731c414de26c10bee86e8e0397c5fb84d6ecfd4b472a29735e1af103ddb6 languageName: node linkType: hard -"@eslint/eslintrc@npm:^0.4.3": - version: 0.4.3 - resolution: "@eslint/eslintrc@npm:0.4.3" +"@eslint/eslintrc@npm:^1.3.3": + version: 1.3.3 + resolution: "@eslint/eslintrc@npm:1.3.3" dependencies: ajv: ^6.12.4 - debug: ^4.1.1 - espree: ^7.3.0 - globals: ^13.9.0 - ignore: ^4.0.6 + debug: ^4.3.2 + espree: ^9.4.0 + globals: ^13.15.0 + ignore: ^5.2.0 import-fresh: ^3.2.1 - js-yaml: ^3.13.1 - minimatch: ^3.0.4 + js-yaml: ^4.1.0 + minimatch: ^3.1.2 strip-json-comments: ^3.1.1 - checksum: 03a7704150b868c318aab6a94d87a33d30dc2ec579d27374575014f06237ba1370ae11178db772f985ef680d469dc237e7b16a1c5d8edaaeb8c3733e7a95a6d3 + checksum: f03e9d6727efd3e0719da2051ea80c0c73d20e28c171121527dbb868cd34232ca9c1d0525a66e517a404afea26624b1e47895b6a92474678418c2f50c9566694 languageName: node linkType: hard @@ -452,18 +443,25 @@ __metadata: languageName: node linkType: hard -"@humanwhocodes/config-array@npm:^0.5.0": - version: 0.5.0 - resolution: "@humanwhocodes/config-array@npm:0.5.0" +"@humanwhocodes/config-array@npm:^0.11.6": + version: 0.11.7 + resolution: "@humanwhocodes/config-array@npm:0.11.7" dependencies: - "@humanwhocodes/object-schema": ^1.2.0 + "@humanwhocodes/object-schema": ^1.2.1 debug: ^4.1.1 - minimatch: ^3.0.4 - checksum: 44ee6a9f05d93dd9d5935a006b17572328ba9caff8002442f601736cbda79c580cc0f5a49ce9eb88fbacc5c3a6b62098357c2e95326cd17bb9f1a6c61d6e95e7 + minimatch: ^3.0.5 + checksum: cf506dc45d9488af7fbf108ea6ac2151ba1a25e6d2b94b9b4fc36d2c1e4099b89ff560296dbfa13947e44604d4ca4a90d97a4fb167370bf8dd01a6ca2b6d83ac + languageName: node + linkType: hard + +"@humanwhocodes/module-importer@npm:^1.0.1": + version: 1.0.1 + resolution: "@humanwhocodes/module-importer@npm:1.0.1" + checksum: 0fd22007db8034a2cdf2c764b140d37d9020bbfce8a49d3ec5c05290e77d4b0263b1b972b752df8c89e5eaa94073408f2b7d977aed131faf6cf396ebb5d7fb61 languageName: node linkType: hard -"@humanwhocodes/object-schema@npm:^1.2.0": +"@humanwhocodes/object-schema@npm:^1.2.1": version: 1.2.1 resolution: "@humanwhocodes/object-schema@npm:1.2.1" checksum: a824a1ec31591231e4bad5787641f59e9633827d0a2eaae131a288d33c9ef0290bd16fda8da6f7c0fcb014147865d12118df10db57f27f41e20da92369fcb3f1 @@ -852,52 +850,52 @@ __metadata: languageName: node linkType: hard -"@metamask/eslint-config-jest@npm:^9.0.0": - version: 9.0.0 - resolution: "@metamask/eslint-config-jest@npm:9.0.0" +"@metamask/eslint-config-jest@npm:^11.0.0": + version: 11.0.0 + resolution: "@metamask/eslint-config-jest@npm:11.0.0" peerDependencies: - "@metamask/eslint-config": ^9.0.0 - eslint: ^7.23.0 - eslint-plugin-jest: ^24.1.3 - checksum: 74ddc7953691cc1e5fe76616fa7e0aaff3c671fae0187851bb90122662cd6a1346ae92ff1f3c28cc1beeeb31a8e86e6ca99062313e7674792a42ab56309efd20 + "@metamask/eslint-config": ^11.0.0 + eslint: ^8.27.0 + eslint-plugin-jest: ^27.1.5 + checksum: 844a3fabb0a758c842fd8567ed6ebee41e43692d9f1f17de516cfafef33df1f549f9f2eb28d5b0eeb8a7c277cde310a2f31adadf80abb2802d87daa46412c046 languageName: node linkType: hard -"@metamask/eslint-config-nodejs@npm:^9.0.0": - version: 9.0.0 - resolution: "@metamask/eslint-config-nodejs@npm:9.0.0" +"@metamask/eslint-config-nodejs@npm:^11.0.1": + version: 11.0.1 + resolution: "@metamask/eslint-config-nodejs@npm:11.0.1" peerDependencies: - "@metamask/eslint-config": ^9.0.0 - eslint: ^7.23.0 + "@metamask/eslint-config": ^11.0.0 + eslint: ^8.27.0 eslint-plugin-node: ^11.1.0 - checksum: c4e502741f12f252fb01a391b7c733c76b447eadc7d26360b349aa2e768c52d04b30436e92d3db7969540faace68ab4d05f379a0f54d433778bf467f44469ba0 + checksum: 97858dc79e3228ba65cedf36455de2b8b3173e1d614522c69df41197d03b327a2543632c131c8bd4b9530fa84ef3e971e01888d6158d451c8eb900e11f138832 languageName: node linkType: hard -"@metamask/eslint-config-typescript@npm:^9.0.1": - version: 9.0.1 - resolution: "@metamask/eslint-config-typescript@npm:9.0.1" +"@metamask/eslint-config-typescript@npm:^11.0.0": + version: 11.0.0 + resolution: "@metamask/eslint-config-typescript@npm:11.0.0" peerDependencies: - "@metamask/eslint-config": ^9.0.0 - "@typescript-eslint/eslint-plugin": ^4.20.0 - "@typescript-eslint/parser": ^4.20.0 - eslint: ^7.23.0 - typescript: ^4.0.7 - checksum: df6c630e285b1a125caffce1988c23b3ba0f76507c337a849fb30fb5f9b9df4bb563419f9bb2ec7e39072601b7e95a4d5be52ddff1643bde65206f33d73440d3 + "@metamask/eslint-config": ^11.0.0 + "@typescript-eslint/eslint-plugin": ^5.42.1 + "@typescript-eslint/parser": ^5.42.1 + eslint: ^8.27.0 + typescript: ~4.8.4 + checksum: 545fa1338b2f46b4e6218de564189f5376d113f94912e123ecd75e6ed38fa2b2e48777a3109bdc1738b3cc23cd9eb1efa37ba3b9cf601746782f1c7ddd9180cc languageName: node linkType: hard -"@metamask/eslint-config@npm:^9.0.0": - version: 9.0.0 - resolution: "@metamask/eslint-config@npm:9.0.0" +"@metamask/eslint-config@npm:^11.0.1": + version: 11.0.1 + resolution: "@metamask/eslint-config@npm:11.0.1" peerDependencies: - eslint: ^7.23.0 - eslint-config-prettier: ^8.1.0 - eslint-plugin-import: ^2.22.1 - eslint-plugin-jsdoc: ^36.1.0 - eslint-plugin-prettier: ^3.3.1 - prettier: ^2.2.1 - checksum: e44768e5f674e61743f1b147c589932e11f6d717b3f52b4b44ee3ab6b0b1078d379aea93473204c740fdff4b309393fc361c1e63c9cecc59ed5c8ab704eb6d20 + eslint: ^8.27.0 + eslint-config-prettier: ^8.5.0 + eslint-plugin-import: ^2.26.0 + eslint-plugin-jsdoc: ^39.6.2 + eslint-plugin-prettier: ^4.2.1 + prettier: ^2.7.1 + checksum: 14c2f46b55045f2056b62d511772494995bc7a69dbf152c277598dac477fc96d1b3507bd3f5251ebd5650b43db7196d10f1b3affe42046aef1fff221343e57b2 languageName: node linkType: hard @@ -907,25 +905,25 @@ __metadata: dependencies: "@lavamoat/allow-scripts": ^2.0.3 "@metamask/auto-changelog": ^2.3.0 - "@metamask/eslint-config": ^9.0.0 - "@metamask/eslint-config-jest": ^9.0.0 - "@metamask/eslint-config-nodejs": ^9.0.0 - "@metamask/eslint-config-typescript": ^9.0.1 + "@metamask/eslint-config": ^11.0.1 + "@metamask/eslint-config-jest": ^11.0.0 + "@metamask/eslint-config-nodejs": ^11.0.1 + "@metamask/eslint-config-typescript": ^11.0.0 "@types/debug": ^4.1.7 "@types/jest": ^28.1.7 - "@typescript-eslint/eslint-plugin": ^4.21.0 - "@typescript-eslint/parser": ^4.21.0 + "@typescript-eslint/eslint-plugin": ^5.42.1 + "@typescript-eslint/parser": ^5.42.1 debug: ^4.3.4 - eslint: ^7.23.0 - eslint-config-prettier: ^8.1.0 - eslint-plugin-import: ^2.22.1 - eslint-plugin-jest: ^24.3.4 - eslint-plugin-jsdoc: ^36.1.0 + eslint: ^8.27.0 + eslint-config-prettier: ^8.5.0 + eslint-plugin-import: ^2.26.0 + eslint-plugin-jest: ^27.1.5 + eslint-plugin-jsdoc: ^39.6.2 eslint-plugin-node: ^11.1.0 - eslint-plugin-prettier: ^3.3.1 + eslint-plugin-prettier: ^4.2.1 jest: ^29.2.2 json-bigint: ^1.0.0 - prettier: ^2.2.1 + prettier: ^2.7.1 prettier-plugin-packagejson: ^2.2.11 rimraf: ^3.0.2 stdio-mock: ^1.2.0 @@ -933,7 +931,7 @@ __metadata: ts-jest: ^29.0.3 tsd: ^0.24.1 typedoc: ^0.23.10 - typescript: ~4.7.4 + typescript: ~4.8.4 languageName: unknown linkType: soft @@ -954,7 +952,7 @@ __metadata: languageName: node linkType: hard -"@nodelib/fs.walk@npm:^1.2.3": +"@nodelib/fs.walk@npm:^1.2.3, @nodelib/fs.walk@npm:^1.2.8": version: 1.2.8 resolution: "@nodelib/fs.walk@npm:1.2.8" dependencies: @@ -1172,7 +1170,7 @@ __metadata: languageName: node linkType: hard -"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.7": +"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.9": version: 7.0.11 resolution: "@types/json-schema@npm:7.0.11" checksum: 527bddfe62db9012fccd7627794bd4c71beb77601861055d87e3ee464f2217c85fca7a4b56ae677478367bbd248dbde13553312b7d4dbc702a2f2bbf60c4018d @@ -1228,6 +1226,13 @@ __metadata: languageName: node linkType: hard +"@types/semver@npm:^7.3.12": + version: 7.3.13 + resolution: "@types/semver@npm:7.3.13" + checksum: 00c0724d54757c2f4bc60b5032fe91cda6410e48689633d5f35ece8a0a66445e3e57fa1d6e07eb780f792e82ac542948ec4d0b76eb3484297b79bd18b8cf1cb0 + languageName: node + linkType: hard + "@types/stack-utils@npm:^2.0.0": version: 2.0.1 resolution: "@types/stack-utils@npm:2.0.1" @@ -1251,103 +1256,123 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:^4.21.0": - version: 4.33.0 - resolution: "@typescript-eslint/eslint-plugin@npm:4.33.0" +"@typescript-eslint/eslint-plugin@npm:^5.42.1": + version: 5.45.0 + resolution: "@typescript-eslint/eslint-plugin@npm:5.45.0" dependencies: - "@typescript-eslint/experimental-utils": 4.33.0 - "@typescript-eslint/scope-manager": 4.33.0 - debug: ^4.3.1 - functional-red-black-tree: ^1.0.1 - ignore: ^5.1.8 - regexpp: ^3.1.0 - semver: ^7.3.5 + "@typescript-eslint/scope-manager": 5.45.0 + "@typescript-eslint/type-utils": 5.45.0 + "@typescript-eslint/utils": 5.45.0 + debug: ^4.3.4 + ignore: ^5.2.0 + natural-compare-lite: ^1.4.0 + regexpp: ^3.2.0 + semver: ^7.3.7 tsutils: ^3.21.0 peerDependencies: - "@typescript-eslint/parser": ^4.0.0 - eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 + "@typescript-eslint/parser": ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: typescript: optional: true - checksum: d74855d0a5ffe0b2f362ec02fcd9301d39a53fb4155b9bd0cb15a0a31d065143129ebf98df9d86af4b6f74de1d423a4c0d8c0095520844068117453afda5bc4f + checksum: 7cff671a9ba33afa86f0ece6d0ebaeb5fc16596fc659ef230f6f65bfddfef2ffb6434310e3a4444fb852e79e40c85c5e62c559df6ddc9312aac235a18afdd269 languageName: node linkType: hard -"@typescript-eslint/experimental-utils@npm:4.33.0, @typescript-eslint/experimental-utils@npm:^4.0.1": - version: 4.33.0 - resolution: "@typescript-eslint/experimental-utils@npm:4.33.0" +"@typescript-eslint/parser@npm:^5.42.1": + version: 5.45.0 + resolution: "@typescript-eslint/parser@npm:5.45.0" dependencies: - "@types/json-schema": ^7.0.7 - "@typescript-eslint/scope-manager": 4.33.0 - "@typescript-eslint/types": 4.33.0 - "@typescript-eslint/typescript-estree": 4.33.0 - eslint-scope: ^5.1.1 - eslint-utils: ^3.0.0 + "@typescript-eslint/scope-manager": 5.45.0 + "@typescript-eslint/types": 5.45.0 + "@typescript-eslint/typescript-estree": 5.45.0 + debug: ^4.3.4 peerDependencies: - eslint: "*" - checksum: f859800ada0884f92db6856f24efcb1d073ac9883ddc2b1aa9339f392215487895bed8447ebce3741e8141bb32e545244abef62b73193ba9a8a0527c523aabae + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: b8ce3af72de3ff22bb206c3299e728d37a836dbe1f75bcb66ad3bb7962204174b7fff834992b84f0e661de507729c01c7ad71ad2707c217cccc3c0f798a9dc23 languageName: node linkType: hard -"@typescript-eslint/parser@npm:^4.21.0": - version: 4.33.0 - resolution: "@typescript-eslint/parser@npm:4.33.0" +"@typescript-eslint/scope-manager@npm:5.45.0": + version: 5.45.0 + resolution: "@typescript-eslint/scope-manager@npm:5.45.0" dependencies: - "@typescript-eslint/scope-manager": 4.33.0 - "@typescript-eslint/types": 4.33.0 - "@typescript-eslint/typescript-estree": 4.33.0 - debug: ^4.3.1 - peerDependencies: - eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 102457eae1acd516211098fea081c8a2ed728522bbda7f5a557b6ef23d88970514f9a0f6285d53fca134d3d4d7d17822b5d5e12438d5918df4d1f89cc9e67d57 + "@typescript-eslint/types": 5.45.0 + "@typescript-eslint/visitor-keys": 5.45.0 + checksum: 8f686be8ee0c7ac49ee2a313570cddf86a1364b1ec129f50f8a531038a3bb241429734dc5e2c4e5dd76cc3ed149628aa3e8425cc092f37ca6885b1995c99c2d1 languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:4.33.0": - version: 4.33.0 - resolution: "@typescript-eslint/scope-manager@npm:4.33.0" +"@typescript-eslint/type-utils@npm:5.45.0": + version: 5.45.0 + resolution: "@typescript-eslint/type-utils@npm:5.45.0" dependencies: - "@typescript-eslint/types": 4.33.0 - "@typescript-eslint/visitor-keys": 4.33.0 - checksum: 9a25fb7ba7c725ea7227a24d315b0f6aacbad002e2549a049edf723c1d3615c22f5c301f0d7d615b377f2cdf2f3519d97e79af0c459de6ef8d2aaf0906dff13e + "@typescript-eslint/typescript-estree": 5.45.0 + "@typescript-eslint/utils": 5.45.0 + debug: ^4.3.4 + tsutils: ^3.21.0 + peerDependencies: + eslint: "*" + peerDependenciesMeta: + typescript: + optional: true + checksum: be96c89b91116b8fbed160631f3cdd345d47e34248a38e8a730fa9e09a4aa21184259414547d3c7a741b83fa68d4a14f77e9fc93b84aba4752f67bd5a772bf27 languageName: node linkType: hard -"@typescript-eslint/types@npm:4.33.0": - version: 4.33.0 - resolution: "@typescript-eslint/types@npm:4.33.0" - checksum: 3baae1ca35872421b4eb60f5d3f3f32dc1d513f2ae0a67dee28c7d159fd7a43ed0d11a8a5a0f0c2d38507ffa036fc7c511cb0f18a5e8ac524b3ebde77390ec53 +"@typescript-eslint/types@npm:5.45.0": + version: 5.45.0 + resolution: "@typescript-eslint/types@npm:5.45.0" + checksum: 43d533622995f002221e439ea517aa07dbce2067cc880a6eb9d26307c505b746975f334d76b35501a2f4dd06d7aaf79964d86ce5a95e76a4f309d6e54faf5213 languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:4.33.0": - version: 4.33.0 - resolution: "@typescript-eslint/typescript-estree@npm:4.33.0" +"@typescript-eslint/typescript-estree@npm:5.45.0": + version: 5.45.0 + resolution: "@typescript-eslint/typescript-estree@npm:5.45.0" dependencies: - "@typescript-eslint/types": 4.33.0 - "@typescript-eslint/visitor-keys": 4.33.0 - debug: ^4.3.1 - globby: ^11.0.3 - is-glob: ^4.0.1 - semver: ^7.3.5 + "@typescript-eslint/types": 5.45.0 + "@typescript-eslint/visitor-keys": 5.45.0 + debug: ^4.3.4 + globby: ^11.1.0 + is-glob: ^4.0.3 + semver: ^7.3.7 tsutils: ^3.21.0 peerDependenciesMeta: typescript: optional: true - checksum: 2566984390c76bd95f43240057215c068c69769e406e27aba41e9f21fd300074d6772e4983fa58fe61e80eb5550af1548d2e31e80550d92ba1d051bb00fe6f5c + checksum: 8f48b3c75c155491ee49436c470e491f9fe48e6e7c95190c4d0c0ab64ce24e8bc6715de86996baf57fc9f0c6dae986ce9ae075e656664489bfa1dc706eaafcd7 languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:4.33.0": - version: 4.33.0 - resolution: "@typescript-eslint/visitor-keys@npm:4.33.0" +"@typescript-eslint/utils@npm:5.45.0, @typescript-eslint/utils@npm:^5.10.0": + version: 5.45.0 + resolution: "@typescript-eslint/utils@npm:5.45.0" dependencies: - "@typescript-eslint/types": 4.33.0 - eslint-visitor-keys: ^2.0.0 - checksum: 59953e474ad4610c1aa23b2b1a964445e2c6201521da6367752f37939d854352bbfced5c04ea539274065e012b1337ba3ffa49c2647a240a4e87155378ba9873 + "@types/json-schema": ^7.0.9 + "@types/semver": ^7.3.12 + "@typescript-eslint/scope-manager": 5.45.0 + "@typescript-eslint/types": 5.45.0 + "@typescript-eslint/typescript-estree": 5.45.0 + eslint-scope: ^5.1.1 + eslint-utils: ^3.0.0 + semver: ^7.3.7 + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: 33a383881efb6c6e0ecd32f74810ca18bb5e85d4839f607409047d6e3d64a98b3cd1e811d027638d051b3741981de50a652c3abe0fcbb70fac80d7d93cd3e36f + languageName: node + linkType: hard + +"@typescript-eslint/visitor-keys@npm:5.45.0": + version: 5.45.0 + resolution: "@typescript-eslint/visitor-keys@npm:5.45.0" + dependencies: + "@typescript-eslint/types": 5.45.0 + eslint-visitor-keys: ^3.3.0 + checksum: 050cc4275d8a3638a106c2915410710e775382996130a6b2af732269e55cbbc4ed438c8662ddf409635d2d8bd0d8a4389b3980bc2cb38c6105c77c6835222af0 languageName: node linkType: hard @@ -1358,7 +1383,7 @@ __metadata: languageName: node linkType: hard -"acorn-jsx@npm:^5.3.1": +"acorn-jsx@npm:^5.3.2": version: 5.3.2 resolution: "acorn-jsx@npm:5.3.2" peerDependencies: @@ -1367,12 +1392,12 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^7.4.0": - version: 7.4.1 - resolution: "acorn@npm:7.4.1" +"acorn@npm:^8.8.0": + version: 8.8.1 + resolution: "acorn@npm:8.8.1" bin: acorn: bin/acorn - checksum: 1860f23c2107c910c6177b7b7be71be350db9e1080d814493fae143ae37605189504152d1ba8743ba3178d0b37269ce1ffc42b101547fdc1827078f82671e407 + checksum: 4079b67283b94935157698831967642f24a075c52ce3feaaaafe095776dfbe15d86a1b33b1e53860fc0d062ed6c83f4284a5c87c85b9ad51853a01173da6097f languageName: node linkType: hard @@ -1418,25 +1443,6 @@ __metadata: languageName: node linkType: hard -"ajv@npm:^8.0.1": - version: 8.11.0 - resolution: "ajv@npm:8.11.0" - dependencies: - fast-deep-equal: ^3.1.1 - json-schema-traverse: ^1.0.0 - require-from-string: ^2.0.2 - uri-js: ^4.2.2 - checksum: 5e0ff226806763be73e93dd7805b634f6f5921e3e90ca04acdf8db81eed9d8d3f0d4c5f1213047f45ebbf8047ffe0c840fa1ef2ec42c3a644899f69aa72b5bef - languageName: node - linkType: hard - -"ansi-colors@npm:^4.1.1": - version: 4.1.3 - resolution: "ansi-colors@npm:4.1.3" - checksum: a9c2ec842038a1fabc7db9ece7d3177e2fe1c5dc6f0c51ecfbf5f39911427b89c00b5dc6b8bd95f82a26e9b16aaae2e83d45f060e98070ce4d1333038edceb0e - languageName: node - linkType: hard - "ansi-escapes@npm:^4.2.1": version: 4.3.2 resolution: "ansi-escapes@npm:4.3.2" @@ -1538,6 +1544,13 @@ __metadata: languageName: node linkType: hard +"argparse@npm:^2.0.1": + version: 2.0.1 + resolution: "argparse@npm:2.0.1" + checksum: 83644b56493e89a254bae05702abf3a1101b4fa4d0ca31df1c9985275a5a5bd47b3c27b7fa0b71098d41114d8ca000e6ed90cad764b306f8a503665e4d517ced + languageName: node + linkType: hard + "array-includes@npm:^3.1.4": version: 3.1.5 resolution: "array-includes@npm:3.1.5" @@ -1593,13 +1606,6 @@ __metadata: languageName: node linkType: hard -"astral-regex@npm:^2.0.0": - version: 2.0.0 - resolution: "astral-regex@npm:2.0.0" - checksum: 876231688c66400473ba505731df37ea436e574dd524520294cc3bbc54ea40334865e01fa0d074d74d036ee874ee7e62f486ea38bc421ee8e6a871c06f011766 - languageName: node - linkType: hard - "asynckit@npm:^0.4.0": version: 0.4.0 resolution: "asynckit@npm:0.4.0" @@ -2018,10 +2024,10 @@ __metadata: languageName: node linkType: hard -"comment-parser@npm:1.2.4": - version: 1.2.4 - resolution: "comment-parser@npm:1.2.4" - checksum: 36ac280bce4c472fac22b3ec4d8aebb4d3d7c22c6808c70174f4deabee3b82144db66f8bd61eca9c514a6d0f12f6087ddab99e7d531e660d0da793b4730fd445 +"comment-parser@npm:1.3.1": + version: 1.3.1 + resolution: "comment-parser@npm:1.3.1" + checksum: 421e6a113a3afd548500e7174ab46a2049dccf92e82bbaa3b209031b1bdf97552aabfa1ae2a120c0b62df17e1ba70e0d8b05d68504fee78e1ef974c59bcfe718 languageName: node linkType: hard @@ -2082,7 +2088,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:^4.0.1, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4": +"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4": version: 4.3.4 resolution: "debug@npm:4.3.4" dependencies: @@ -2283,15 +2289,6 @@ __metadata: languageName: node linkType: hard -"enquirer@npm:^2.3.5": - version: 2.3.6 - resolution: "enquirer@npm:2.3.6" - dependencies: - ansi-colors: ^4.1.1 - checksum: 1c0911e14a6f8d26721c91e01db06092a5f7675159f0261d69c403396a385afd13dd76825e7678f66daffa930cfaa8d45f506fb35f818a2788463d022af1b884 - languageName: node - linkType: hard - "env-paths@npm:^2.2.0": version: 2.2.1 resolution: "env-paths@npm:2.2.1" @@ -2395,7 +2392,7 @@ __metadata: languageName: node linkType: hard -"eslint-config-prettier@npm:^8.1.0": +"eslint-config-prettier@npm:^8.5.0": version: 8.5.0 resolution: "eslint-config-prettier@npm:8.5.0" peerDependencies: @@ -2456,7 +2453,7 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-import@npm:^2.22.1": +"eslint-plugin-import@npm:^2.26.0": version: 2.26.0 resolution: "eslint-plugin-import@npm:2.26.0" dependencies: @@ -2479,37 +2476,37 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-jest@npm:^24.3.4": - version: 24.7.0 - resolution: "eslint-plugin-jest@npm:24.7.0" +"eslint-plugin-jest@npm:^27.1.5": + version: 27.1.6 + resolution: "eslint-plugin-jest@npm:27.1.6" dependencies: - "@typescript-eslint/experimental-utils": ^4.0.1 + "@typescript-eslint/utils": ^5.10.0 peerDependencies: - "@typescript-eslint/eslint-plugin": ">= 4" - eslint: ">=5" + "@typescript-eslint/eslint-plugin": ^5.0.0 + eslint: ^7.0.0 || ^8.0.0 peerDependenciesMeta: "@typescript-eslint/eslint-plugin": optional: true - checksum: a4056582825ab3359d2e0e3aae50518f6f867d1cfb3240496605247d3ff9c84b4164f1a7e1f7087d5a2eae1343d738ada1ba74c422b13ad20b737601dc47ae08 + jest: + optional: true + checksum: 5b1640b5d575f0d5e27da8ef8cb3110a29f94ebd50ae51edc5ea34c1054f5dcf305416865b2919ac424bc02c4569848bbe7fd2c86e7e1aff23e77f1ff9ef7dfd languageName: node linkType: hard -"eslint-plugin-jsdoc@npm:^36.1.0": - version: 36.1.1 - resolution: "eslint-plugin-jsdoc@npm:36.1.1" +"eslint-plugin-jsdoc@npm:^39.6.2": + version: 39.6.4 + resolution: "eslint-plugin-jsdoc@npm:39.6.4" dependencies: - "@es-joy/jsdoccomment": 0.10.8 - comment-parser: 1.2.4 - debug: ^4.3.2 + "@es-joy/jsdoccomment": ~0.36.1 + comment-parser: 1.3.1 + debug: ^4.3.4 + escape-string-regexp: ^4.0.0 esquery: ^1.4.0 - jsdoc-type-pratt-parser: ^1.1.1 - lodash: ^4.17.21 - regextras: ^0.8.0 - semver: ^7.3.5 + semver: ^7.3.8 spdx-expression-parse: ^3.0.1 peerDependencies: - eslint: ^6.0.0 || ^7.0.0 - checksum: ceaca9f5c39dbbab4cbb2f302e787d1581919273b4a25adca9d1b6d83fbca66a0e58da024bc1f3f21c8710f473745a297cb2a1fe5ed56c9d1f16967995293620 + eslint: ^7.0.0 || ^8.0.0 + checksum: 2976112ae997b9f246eba98d849359a0df46ea07c0a9d6d90c3b76a29c253b9e92d1d46d6cf86f878e442653b97591e5ea01d05a6accdb078339c39e8767723e languageName: node linkType: hard @@ -2529,18 +2526,18 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-prettier@npm:^3.3.1": - version: 3.4.1 - resolution: "eslint-plugin-prettier@npm:3.4.1" +"eslint-plugin-prettier@npm:^4.2.1": + version: 4.2.1 + resolution: "eslint-plugin-prettier@npm:4.2.1" dependencies: prettier-linter-helpers: ^1.0.0 peerDependencies: - eslint: ">=5.0.0" - prettier: ">=1.13.0" + eslint: ">=7.28.0" + prettier: ">=2.0.0" peerDependenciesMeta: eslint-config-prettier: optional: true - checksum: fa6a89f0d7cba1cc87064352f5a4a68dc3739448dd279bec2bced1bfa3b704467e603d13b69dcec853f8fa30b286b8b715912898e9da776e1b016cf0ee48bd99 + checksum: b9e839d2334ad8ec7a5589c5cb0f219bded260839a857d7a486997f9870e95106aa59b8756ff3f37202085ebab658de382b0267cae44c3a7f0eb0bcc03a4f6d6 languageName: node linkType: hard @@ -2561,7 +2558,17 @@ __metadata: languageName: node linkType: hard -"eslint-utils@npm:^2.0.0, eslint-utils@npm:^2.1.0": +"eslint-scope@npm:^7.1.1": + version: 7.1.1 + resolution: "eslint-scope@npm:7.1.1" + dependencies: + esrecurse: ^4.3.0 + estraverse: ^5.2.0 + checksum: 9f6e974ab2db641ca8ab13508c405b7b859e72afe9f254e8131ff154d2f40c99ad4545ce326fd9fde3212ff29707102562a4834f1c48617b35d98c71a97fbf3e + languageName: node + linkType: hard + +"eslint-utils@npm:^2.0.0": version: 2.1.0 resolution: "eslint-utils@npm:2.1.0" dependencies: @@ -2581,7 +2588,7 @@ __metadata: languageName: node linkType: hard -"eslint-visitor-keys@npm:^1.1.0, eslint-visitor-keys@npm:^1.3.0": +"eslint-visitor-keys@npm:^1.1.0": version: 1.3.0 resolution: "eslint-visitor-keys@npm:1.3.0" checksum: 37a19b712f42f4c9027e8ba98c2b06031c17e0c0a4c696cd429bd9ee04eb43889c446f2cd545e1ff51bef9593fcec94ecd2c2ef89129fcbbf3adadbef520376a @@ -2595,64 +2602,70 @@ __metadata: languageName: node linkType: hard -"eslint@npm:^7.23.0": - version: 7.32.0 - resolution: "eslint@npm:7.32.0" +"eslint-visitor-keys@npm:^3.3.0": + version: 3.3.0 + resolution: "eslint-visitor-keys@npm:3.3.0" + checksum: d59e68a7c5a6d0146526b0eec16ce87fbf97fe46b8281e0d41384224375c4e52f5ffb9e16d48f4ea50785cde93f766b0c898e31ab89978d88b0e1720fbfb7808 + languageName: node + linkType: hard + +"eslint@npm:^8.27.0": + version: 8.28.0 + resolution: "eslint@npm:8.28.0" dependencies: - "@babel/code-frame": 7.12.11 - "@eslint/eslintrc": ^0.4.3 - "@humanwhocodes/config-array": ^0.5.0 + "@eslint/eslintrc": ^1.3.3 + "@humanwhocodes/config-array": ^0.11.6 + "@humanwhocodes/module-importer": ^1.0.1 + "@nodelib/fs.walk": ^1.2.8 ajv: ^6.10.0 chalk: ^4.0.0 cross-spawn: ^7.0.2 - debug: ^4.0.1 + debug: ^4.3.2 doctrine: ^3.0.0 - enquirer: ^2.3.5 escape-string-regexp: ^4.0.0 - eslint-scope: ^5.1.1 - eslint-utils: ^2.1.0 - eslint-visitor-keys: ^2.0.0 - espree: ^7.3.1 + eslint-scope: ^7.1.1 + eslint-utils: ^3.0.0 + eslint-visitor-keys: ^3.3.0 + espree: ^9.4.0 esquery: ^1.4.0 esutils: ^2.0.2 fast-deep-equal: ^3.1.3 file-entry-cache: ^6.0.1 - functional-red-black-tree: ^1.0.1 - glob-parent: ^5.1.2 - globals: ^13.6.0 - ignore: ^4.0.6 + find-up: ^5.0.0 + glob-parent: ^6.0.2 + globals: ^13.15.0 + grapheme-splitter: ^1.0.4 + ignore: ^5.2.0 import-fresh: ^3.0.0 imurmurhash: ^0.1.4 is-glob: ^4.0.0 - js-yaml: ^3.13.1 + is-path-inside: ^3.0.3 + js-sdsl: ^4.1.4 + js-yaml: ^4.1.0 json-stable-stringify-without-jsonify: ^1.0.1 levn: ^0.4.1 lodash.merge: ^4.6.2 - minimatch: ^3.0.4 + minimatch: ^3.1.2 natural-compare: ^1.4.0 optionator: ^0.9.1 - progress: ^2.0.0 - regexpp: ^3.1.0 - semver: ^7.2.1 - strip-ansi: ^6.0.0 + regexpp: ^3.2.0 + strip-ansi: ^6.0.1 strip-json-comments: ^3.1.0 - table: ^6.0.9 text-table: ^0.2.0 - v8-compile-cache: ^2.0.3 bin: eslint: bin/eslint.js - checksum: cc85af9985a3a11085c011f3d27abe8111006d34cc274291b3c4d7bea51a4e2ff6135780249becd919ba7f6d6d1ecc38a6b73dacb6a7be08d38453b344dc8d37 + checksum: 1b793486b2ec80f0602d75fff7116f7c39a3286f523608a999eead9bec4154a06841785d2b4fb87f8292a94cf85778c1dbfaec727772a09c4d604fdb9ff0809a languageName: node linkType: hard -"espree@npm:^7.3.0, espree@npm:^7.3.1": - version: 7.3.1 - resolution: "espree@npm:7.3.1" +"espree@npm:^9.4.0": + version: 9.4.1 + resolution: "espree@npm:9.4.1" dependencies: - acorn: ^7.4.0 - acorn-jsx: ^5.3.1 - eslint-visitor-keys: ^1.3.0 - checksum: aa9b50dcce883449af2e23bc2b8d9abb77118f96f4cb313935d6b220f77137eaef7724a83c3f6243b96bc0e4ab14766198e60818caad99f9519ae5a336a39b45 + acorn: ^8.8.0 + acorn-jsx: ^5.3.2 + eslint-visitor-keys: ^3.3.0 + checksum: 4d266b0cf81c7dfe69e542c7df0f246e78d29f5b04dda36e514eb4c7af117ee6cfbd3280e560571ed82ff6c9c3f0003c05b82583fc7a94006db7497c4fe4270e languageName: node linkType: hard @@ -2863,6 +2876,16 @@ __metadata: languageName: node linkType: hard +"find-up@npm:^5.0.0": + version: 5.0.0 + resolution: "find-up@npm:5.0.0" + dependencies: + locate-path: ^6.0.0 + path-exists: ^4.0.0 + checksum: 07955e357348f34660bde7920783204ff5a26ac2cafcaa28bace494027158a97b9f56faaf2d89a6106211a8174db650dd9f503f9c0d526b1202d5554a00b9095 + languageName: node + linkType: hard + "flat-cache@npm:^3.0.4": version: 3.0.4 resolution: "flat-cache@npm:3.0.4" @@ -2952,13 +2975,6 @@ __metadata: languageName: node linkType: hard -"functional-red-black-tree@npm:^1.0.1": - version: 1.0.1 - resolution: "functional-red-black-tree@npm:1.0.1" - checksum: ca6c170f37640e2d94297da8bb4bf27a1d12bea3e00e6a3e007fd7aa32e37e000f5772acf941b4e4f3cf1c95c3752033d0c509af157ad8f526e7f00723b9eb9f - languageName: node - linkType: hard - "functions-have-names@npm:^1.2.2": version: 1.2.3 resolution: "functions-have-names@npm:1.2.3" @@ -3072,6 +3088,15 @@ __metadata: languageName: node linkType: hard +"glob-parent@npm:^6.0.2": + version: 6.0.2 + resolution: "glob-parent@npm:6.0.2" + dependencies: + is-glob: ^4.0.3 + checksum: c13ee97978bef4f55106b71e66428eb1512e71a7466ba49025fc2aec59a5bfb0954d5abd58fc5ee6c9b076eef4e1f6d3375c2e964b88466ca390da4419a786a8 + languageName: node + linkType: hard + "glob@npm:^7.1.3, glob@npm:^7.1.4": version: 7.2.3 resolution: "glob@npm:7.2.3" @@ -3106,12 +3131,12 @@ __metadata: languageName: node linkType: hard -"globals@npm:^13.6.0, globals@npm:^13.9.0": - version: 13.17.0 - resolution: "globals@npm:13.17.0" +"globals@npm:^13.15.0": + version: 13.18.0 + resolution: "globals@npm:13.18.0" dependencies: type-fest: ^0.20.2 - checksum: fbaf4112e59b92c9f5575e85ce65e9e17c0b82711196ec5f58beb08599bbd92fd72703d6dfc9b080381fd35b644e1b11dcf25b38cc2341ec21df942594cbc8ce + checksum: 9fdaa74cfd5d4ac91319662f512c29b11d1d2deb9c8a20d3998097671deba83d195f20730b2345887de3ddab958a6fa68952feed9ae836ee4594a82ace62fdb4 languageName: node linkType: hard @@ -3131,7 +3156,7 @@ __metadata: languageName: node linkType: hard -"globby@npm:^11.0.1, globby@npm:^11.0.3": +"globby@npm:^11.0.1, globby@npm:^11.1.0": version: 11.1.0 resolution: "globby@npm:11.1.0" dependencies: @@ -3152,6 +3177,13 @@ __metadata: languageName: node linkType: hard +"grapheme-splitter@npm:^1.0.4": + version: 1.0.4 + resolution: "grapheme-splitter@npm:1.0.4" + checksum: 0c22ec54dee1b05cd480f78cf14f732cb5b108edc073572c4ec205df4cd63f30f8db8025afc5debc8835a8ddeacf648a1c7992fe3dcd6ad38f9a476d84906620 + languageName: node + linkType: hard + "har-schema@npm:^2.0.0": version: 2.0.0 resolution: "har-schema@npm:2.0.0" @@ -3325,14 +3357,7 @@ __metadata: languageName: node linkType: hard -"ignore@npm:^4.0.6": - version: 4.0.6 - resolution: "ignore@npm:4.0.6" - checksum: 248f82e50a430906f9ee7f35e1158e3ec4c3971451dd9f99c9bc1548261b4db2b99709f60ac6c6cac9333494384176cc4cc9b07acbe42d52ac6a09cad734d800 - languageName: node - linkType: hard - -"ignore@npm:^5.1.1, ignore@npm:^5.1.8, ignore@npm:^5.2.0": +"ignore@npm:^5.1.1, ignore@npm:^5.2.0": version: 5.2.0 resolution: "ignore@npm:5.2.0" checksum: 6b1f926792d614f64c6c83da3a1f9c83f6196c2839aa41e1e32dd7b8d174cef2e329d75caabb62cb61ce9dc432f75e67d07d122a037312db7caa73166a1bdb77 @@ -3544,6 +3569,13 @@ __metadata: languageName: node linkType: hard +"is-path-inside@npm:^3.0.3": + version: 3.0.3 + resolution: "is-path-inside@npm:3.0.3" + checksum: abd50f06186a052b349c15e55b182326f1936c89a78bf6c8f2b707412517c097ce04bc49a0ca221787bc44e1049f51f09a2ffb63d22899051988d3a618ba13e9 + languageName: node + linkType: hard + "is-plain-obj@npm:2.1.0": version: 2.1.0 resolution: "is-plain-obj@npm:2.1.0" @@ -4202,6 +4234,13 @@ __metadata: languageName: node linkType: hard +"js-sdsl@npm:^4.1.4": + version: 4.2.0 + resolution: "js-sdsl@npm:4.2.0" + checksum: 2cd0885f7212afb355929d72ca105cb37de7e95ad6031e6a32619eaefa46735a7d0fb682641a0ba666e1519cb138fe76abc1eea8a34e224140c9d94c995171f1 + languageName: node + linkType: hard + "js-tokens@npm:^4.0.0": version: 4.0.0 resolution: "js-tokens@npm:4.0.0" @@ -4221,6 +4260,17 @@ __metadata: languageName: node linkType: hard +"js-yaml@npm:^4.1.0": + version: 4.1.0 + resolution: "js-yaml@npm:4.1.0" + dependencies: + argparse: ^2.0.1 + bin: + js-yaml: bin/js-yaml.js + checksum: c7830dfd456c3ef2c6e355cc5a92e6700ceafa1d14bba54497b34a99f0376cecbb3e9ac14d3e5849b426d5a5140709a66237a8c991c675431271c4ce5504151a + languageName: node + linkType: hard + "jsbn@npm:~0.1.0": version: 0.1.1 resolution: "jsbn@npm:0.1.1" @@ -4228,17 +4278,10 @@ __metadata: languageName: node linkType: hard -"jsdoc-type-pratt-parser@npm:1.1.1": - version: 1.1.1 - resolution: "jsdoc-type-pratt-parser@npm:1.1.1" - checksum: 90522d1da193e1280c3e041561de20cb2f580dd823ad60f5c08e8f429dacc2e944259ed682c98c62d32f3fc8148a79becb47a47455a8093cebb5377b1c2ecbf2 - languageName: node - linkType: hard - -"jsdoc-type-pratt-parser@npm:^1.1.1": - version: 1.2.0 - resolution: "jsdoc-type-pratt-parser@npm:1.2.0" - checksum: 8be7a0e1373ad7662edd2e0f804dda462e9c56c9297aa722466ebe4bfd8c96ecdc5ce42ca91e0ca97ff6cc5c7ca730a9f5a0bc6939d7695559f0a8b95e3a2ca2 +"jsdoc-type-pratt-parser@npm:~3.1.0": + version: 3.1.0 + resolution: "jsdoc-type-pratt-parser@npm:3.1.0" + checksum: 2f437b57621f1e481918165f6cf0e48256628a9e510d8b3f88a2ab667bf2128bf8b94c628b57c43e78f555ca61983e9c282814703840dc091d2623992214a061 languageName: node linkType: hard @@ -4274,13 +4317,6 @@ __metadata: languageName: node linkType: hard -"json-schema-traverse@npm:^1.0.0": - version: 1.0.0 - resolution: "json-schema-traverse@npm:1.0.0" - checksum: 02f2f466cdb0362558b2f1fd5e15cce82ef55d60cd7f8fa828cf35ba74330f8d767fcae5c5c2adb7851fa811766c694b9405810879bc4e1ddd78a7c0e03658ad - languageName: node - linkType: hard - "json-schema@npm:0.4.0": version: 0.4.0 resolution: "json-schema@npm:0.4.0" @@ -4388,6 +4424,15 @@ __metadata: languageName: node linkType: hard +"locate-path@npm:^6.0.0": + version: 6.0.0 + resolution: "locate-path@npm:6.0.0" + dependencies: + p-locate: ^5.0.0 + checksum: 72eb661788a0368c099a184c59d2fee760b3831c9c1c33955e8a19ae4a21b4116e53fa736dc086cdeb9fce9f7cc508f2f92d2d3aae516f133e16a2bb59a39f5a + languageName: node + linkType: hard + "lodash.memoize@npm:4.x": version: 4.1.2 resolution: "lodash.memoize@npm:4.1.2" @@ -4402,20 +4447,6 @@ __metadata: languageName: node linkType: hard -"lodash.truncate@npm:^4.4.2": - version: 4.4.2 - resolution: "lodash.truncate@npm:4.4.2" - checksum: b463d8a382cfb5f0e71c504dcb6f807a7bd379ff1ea216669aa42c52fc28c54e404bfbd96791aa09e6df0de2c1d7b8f1b7f4b1a61f324d38fe98bc535aeee4f5 - languageName: node - linkType: hard - -"lodash@npm:^4.17.21": - version: 4.17.21 - resolution: "lodash@npm:4.17.21" - checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 - languageName: node - linkType: hard - "log-symbols@npm:^4.0.0": version: 4.1.0 resolution: "log-symbols@npm:4.1.0" @@ -4595,7 +4626,7 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^3.0.4, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": +"minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": version: 3.1.2 resolution: "minimatch@npm:3.1.2" dependencies: @@ -4731,6 +4762,13 @@ __metadata: languageName: node linkType: hard +"natural-compare-lite@npm:^1.4.0": + version: 1.4.0 + resolution: "natural-compare-lite@npm:1.4.0" + checksum: 5222ac3986a2b78dd6069ac62cbb52a7bf8ffc90d972ab76dfe7b01892485d229530ed20d0c62e79a6b363a663b273db3bde195a1358ce9e5f779d4453887225 + languageName: node + linkType: hard + "natural-compare@npm:^1.4.0": version: 1.4.0 resolution: "natural-compare@npm:1.4.0" @@ -4980,7 +5018,7 @@ __metadata: languageName: node linkType: hard -"p-limit@npm:^3.1.0": +"p-limit@npm:^3.0.2, p-limit@npm:^3.1.0": version: 3.1.0 resolution: "p-limit@npm:3.1.0" dependencies: @@ -4998,6 +5036,15 @@ __metadata: languageName: node linkType: hard +"p-locate@npm:^5.0.0": + version: 5.0.0 + resolution: "p-locate@npm:5.0.0" + dependencies: + p-limit: ^3.0.2 + checksum: 1623088f36cf1cbca58e9b61c4e62bf0c60a07af5ae1ca99a720837356b5b6c5ba3eb1b2127e47a06865fee59dd0453cad7cc844cda9d5a62ac1a5a51b7c86d3 + languageName: node + linkType: hard + "p-map@npm:^4.0.0": version: 4.0.0 resolution: "p-map@npm:4.0.0" @@ -5146,12 +5193,12 @@ __metadata: languageName: node linkType: hard -"prettier@npm:^2.2.1": - version: 2.7.1 - resolution: "prettier@npm:2.7.1" +"prettier@npm:^2.7.1": + version: 2.8.0 + resolution: "prettier@npm:2.8.0" bin: prettier: bin-prettier.js - checksum: 55a4409182260866ab31284d929b3cb961e5fdb91fe0d2e099dac92eaecec890f36e524b4c19e6ceae839c99c6d7195817579cdffc8e2c80da0cb794463a748b + checksum: 72004ce0cc9bb097daf3e3833f62495768724392c1d5b178dd47372337616e9e50ecbb0804f236596223f7b5eb1bbe69cefc8957dca21112c5777e77ef73a564 languageName: node linkType: hard @@ -5185,13 +5232,6 @@ __metadata: languageName: node linkType: hard -"progress@npm:^2.0.0": - version: 2.0.3 - resolution: "progress@npm:2.0.3" - checksum: f67403fe7b34912148d9252cb7481266a354bd99ce82c835f79070643bb3c6583d10dbcfda4d41e04bbc1d8437e9af0fb1e1f2135727878f5308682a579429b7 - languageName: node - linkType: hard - "promise-inflight@npm:^1.0.1": version: 1.0.1 resolution: "promise-inflight@npm:1.0.1" @@ -5341,20 +5381,13 @@ __metadata: languageName: node linkType: hard -"regexpp@npm:^3.0.0, regexpp@npm:^3.1.0": +"regexpp@npm:^3.0.0, regexpp@npm:^3.2.0": version: 3.2.0 resolution: "regexpp@npm:3.2.0" checksum: a78dc5c7158ad9ddcfe01aa9144f46e192ddbfa7b263895a70a5c6c73edd9ce85faf7c0430e59ac38839e1734e275b9c3de5c57ee3ab6edc0e0b1bdebefccef8 languageName: node linkType: hard -"regextras@npm:^0.8.0": - version: 0.8.0 - resolution: "regextras@npm:0.8.0" - checksum: b7ec5b32a2b98b4b27048d44f8ab90009873c1307f2cf89321aa8c4cbb8147f1bee07863f4dadf585546ca0b91a234ad9804954dea5fc029421f6c25a4523798 - languageName: node - linkType: hard - "request@npm:^2.88.2": version: 2.88.2 resolution: "request@npm:2.88.2" @@ -5390,13 +5423,6 @@ __metadata: languageName: node linkType: hard -"require-from-string@npm:^2.0.2": - version: 2.0.2 - resolution: "require-from-string@npm:2.0.2" - checksum: a03ef6895445f33a4015300c426699bc66b2b044ba7b670aa238610381b56d3f07c686251740d575e22f4c87531ba662d06937508f0f3c0f1ddc04db3130560b - languageName: node - linkType: hard - "resolve-cwd@npm:^3.0.0": version: 3.0.0 resolution: "resolve-cwd@npm:3.0.0" @@ -5528,7 +5554,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:7.x, semver@npm:^7.2.1, semver@npm:^7.3.2, semver@npm:^7.3.5": +"semver@npm:7.x, semver@npm:^7.3.2, semver@npm:^7.3.5": version: 7.3.7 resolution: "semver@npm:7.3.7" dependencies: @@ -5548,7 +5574,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:^7.3.4": +"semver@npm:^7.3.4, semver@npm:^7.3.7, semver@npm:^7.3.8": version: 7.3.8 resolution: "semver@npm:7.3.8" dependencies: @@ -5625,17 +5651,6 @@ __metadata: languageName: node linkType: hard -"slice-ansi@npm:^4.0.0": - version: 4.0.0 - resolution: "slice-ansi@npm:4.0.0" - dependencies: - ansi-styles: ^4.0.0 - astral-regex: ^2.0.0 - is-fullwidth-code-point: ^3.0.0 - checksum: 4a82d7f085b0e1b070e004941ada3c40d3818563ac44766cca4ceadd2080427d337554f9f99a13aaeb3b4a94d9964d9466c807b3d7b7541d1ec37ee32d308756 - languageName: node - linkType: hard - "smart-buffer@npm:^4.2.0": version: 4.2.0 resolution: "smart-buffer@npm:4.2.0" @@ -5969,19 +5984,6 @@ __metadata: languageName: node linkType: hard -"table@npm:^6.0.9": - version: 6.8.0 - resolution: "table@npm:6.8.0" - dependencies: - ajv: ^8.0.1 - lodash.truncate: ^4.4.2 - slice-ansi: ^4.0.0 - string-width: ^4.2.3 - strip-ansi: ^6.0.1 - checksum: 5b07fe462ee03d2e1fac02cbb578efd2e0b55ac07e3d3db2e950aa9570ade5a4a2b8d3c15e9f25c89e4e50b646bc4269934601ee1eef4ca7968ad31960977690 - languageName: node - linkType: hard - "tar@npm:^6.0.2, tar@npm:^6.1.11, tar@npm:^6.1.2": version: 6.1.11 resolution: "tar@npm:6.1.11" @@ -6216,23 +6218,23 @@ __metadata: languageName: node linkType: hard -"typescript@npm:~4.7.4": - version: 4.7.4 - resolution: "typescript@npm:4.7.4" +"typescript@npm:~4.8.4": + version: 4.8.4 + resolution: "typescript@npm:4.8.4" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 5750181b1cd7e6482c4195825547e70f944114fb47e58e4aa7553e62f11b3f3173766aef9c281783edfd881f7b8299cf35e3ca8caebe73d8464528c907a164df + checksum: 3e4f061658e0c8f36c820802fa809e0fd812b85687a9a2f5430bc3d0368e37d1c9605c3ce9b39df9a05af2ece67b1d844f9f6ea8ff42819f13bcb80f85629af0 languageName: node linkType: hard -"typescript@patch:typescript@~4.7.4#~builtin": - version: 4.7.4 - resolution: "typescript@patch:typescript@npm%3A4.7.4#~builtin::version=4.7.4&hash=a1c5e5" +"typescript@patch:typescript@~4.8.4#~builtin": + version: 4.8.4 + resolution: "typescript@patch:typescript@npm%3A4.8.4#~builtin::version=4.8.4&hash=a1c5e5" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 9096d8f6c16cb80ef3bf96fcbbd055bf1c4a43bd14f3b7be45a9fbe7ada46ec977f604d5feed3263b4f2aa7d4c7477ce5f9cd87de0d6feedec69a983f3a4f93e + checksum: 563a0ef47abae6df27a9a3ab38f75fc681f633ccf1a3502b1108e252e187787893de689220f4544aaf95a371a4eb3141e4a337deb9895de5ac3c1ca76430e5f0 languageName: node linkType: hard @@ -6305,13 +6307,6 @@ __metadata: languageName: node linkType: hard -"v8-compile-cache@npm:^2.0.3": - version: 2.3.0 - resolution: "v8-compile-cache@npm:2.3.0" - checksum: adb0a271eaa2297f2f4c536acbfee872d0dd26ec2d76f66921aa7fc437319132773483344207bdbeee169225f4739016d8d2dbf0553913a52bb34da6d0334f8e - languageName: node - linkType: hard - "v8-to-istanbul@npm:^9.0.1": version: 9.0.1 resolution: "v8-to-istanbul@npm:9.0.1"